public virtual void SetDeploymentStatusProcess(string rootPath, string newStatus, string slot, string subscription, string serviceName)
        {
            string result;

            if (!string.IsNullOrEmpty(subscription))
            {
                var globalComponents = GlobalComponents.Load(GlobalPathInfo.GlobalSettingsDirectory);
                CurrentSubscription = globalComponents.Subscriptions.Values.First(
                    sub => sub.SubscriptionName == subscription);
            }

            // Check that deployment slot for the service exists
            WriteVerboseWithTimestamp(Resources.LookingForDeploymentMessage, slot, serviceName);
            result = CheckDeployment(newStatus, serviceName, slot);

            if (string.IsNullOrEmpty(result))
            {
                SetDeployment(newStatus, serviceName, slot);
                GetDeploymentStatus deploymentStatusCommand = new GetDeploymentStatus(Channel, CommandRuntime)
                { ShareChannel = ShareChannel, CurrentSubscription = CurrentSubscription };
                deploymentStatusCommand.WaitForState(newStatus, rootPath, serviceName, slot, CurrentSubscription.SubscriptionName);
                Deployment deployment = this.RetryCall<Deployment>(s => this.Channel.GetDeploymentBySlot(s, serviceName, slot));

                if (PassThru)
                {
                    WriteObject(deployment);
                }

                WriteVerboseWithTimestamp(string.Format(Resources.ChangeDeploymentStatusCompleteMessage, serviceName, newStatus));
            }
            else
            {
                WriteWarning(result);
            }
        }
        public void PublishService(string serviceRootPath)
        {
            AzureTool.Validate();
            WriteVerbose(string.Format(Resources.PublishServiceStartMessage, _hostedServiceName));

            // Package the service and all of its roles up in the open package format used by Azure
            if (InitializeSettingsAndCreatePackage(serviceRootPath))
            {
                if (ServiceExists())
                {
                    var deploymentStatusCommand = new GetDeploymentStatus(Channel, CommandRuntime)
                    { ShareChannel = ShareChannel, CurrentSubscription = CurrentSubscription };
                    bool deploymentExists = deploymentStatusCommand.DeploymentExists(
                        _azureService.Paths.RootPath,
                        _hostedServiceName,
                        _deploymentSettings.ServiceSettings.Slot,
                        _deploymentSettings.ServiceSettings.Subscription);
                    if (deploymentExists)
                    {
                        UpgradeDeployment();
                    }
                    else
                    {
                        CreateNewDeployment();
                    }
                }
                else
                {
                    CreateHostedService();
                    CreateNewDeployment();
                }

                // Verify the deployment succeeded by checking that each of the
                // roles are running
                VerifyDeployment();

                // After we've finished deploying, optionally launch a browser pointed at the service
                if (Launch && CanGenerateUrlForDeploymentSlot())
                {
                    LaunchService();
                }

                Deployment deployment = this.RetryCall<Deployment>(s => this.Channel.GetDeploymentBySlot(
                    s,
                    _hostedServiceName,
                    _deploymentSettings.ServiceSettings.Slot
                ));
                WriteObject(deployment);
            }
            else
            {
                WriteVerbose(Resources.PublishAbortedAtUserRequest);
            }

            WriteVerboseWithTimestamp(Resources.PublishCompleteMessage);
        }
        private void StopAndRemove(string rootName, string serviceName, string subscription, string slot)
        {
            var deploymentStatusCommand = new GetDeploymentStatus(Channel, CommandRuntime)
            { ShareChannel = ShareChannel, CurrentSubscription = CurrentSubscription };
            if (deploymentStatusCommand.DeploymentExists(rootName, serviceName, slot, subscription))
            {
                InvokeInOperationContext(() =>
                {
                    this.RetryCall(s => this.Channel.DeleteDeploymentBySlot(s, serviceName, slot));
                });

                // Wait until deployment is removed
                while (deploymentStatusCommand.DeploymentExists(rootName, serviceName, slot, subscription));
            }
        }