/// <summary> /// Upgrade the deployment for the service. /// </summary> private void UpgradeDeployment() { Debug.Assert( !string.IsNullOrEmpty(_hostedServiceName), "_hostedServiceName cannot be null or empty."); Debug.Assert( !string.IsNullOrEmpty(_deploymentSettings.Label), "Label cannot be null or empty."); Debug.Assert( !string.IsNullOrEmpty(_deploymentSettings.DeploymentName), "DeploymentName cannot be null or empty."); UpgradeDeploymentInput deploymentInput = new UpgradeDeploymentInput { PackageUrl = UploadPackage(), Configuration = GetConfiguration(), Label = ServiceManagementHelper.EncodeToBase64String(_deploymentSettings.Label), Mode = UpgradeType.Auto }; InvokeInOperationContext(() => { SafeWriteObjectWithTimestamp(Resources.PublishUpgradingMessage); RetryCall(subscription => Channel.UpgradeDeployment( subscription, _hostedServiceName, _deploymentSettings.DeploymentName, deploymentInput)); WaitForDeploymentToStart(); }); }
protected override void PerformOperation(IServiceManagement channel) { UpgradeDeploymentInput input = new UpgradeDeploymentInput { Configuration = Utility.GetSettings(ConfigFileLocation), Mode = Mode, RoleToUpgrade = RoleToUpgrade, }; if (!string.IsNullOrEmpty(PackageLocation)) { input.PackageUrl = new Uri(PackageLocation); } if (!string.IsNullOrEmpty(Label)) { input.Label = ServiceManagementHelper.EncodeToBase64String(Label); } if (TreatWarningsAsError) { input.TreatWarningsAsError = TreatWarningsAsError; } Console.WriteLine("Upgrading Deployment"); if (!string.IsNullOrEmpty(DeploymentName)) { channel.UpgradeDeployment(SubscriptionId, HostedServiceName, DeploymentName, input); } else if (!string.IsNullOrEmpty(DeploymentSlot)) { channel.UpgradeDeploymentBySlot(SubscriptionId, HostedServiceName, DeploymentSlot, input); } }
private void UpgradeDeployment(PublishContext context) { UpgradeDeploymentInput upgradeDeploymentInput = new UpgradeDeploymentInput { PackageUrl = UploadPackage(context), Configuration = General.GetConfiguration(context.ConfigPath), Label = context.ServiceName, Mode = UpgradeType.Auto }; WriteVerboseWithTimestamp(Resources.PublishUpgradingMessage); CertificateList uploadedCertificates = ServiceManagementChannel.ListCertificates( subscriptionId, context.ServiceName); AddCertificates(uploadedCertificates, context); ServiceManagementChannel.UpgradeDeploymentBySlot( subscriptionId, context.ServiceName, context.ServiceSettings.Slot, upgradeDeploymentInput); }
public void ExecuteCommand() { string configString = string.Empty; if (!string.IsNullOrEmpty(Configuration)) { configString = General.GetConfiguration(Configuration); } // Upgrade Parameter Set if (string.Compare(ParameterSetName, "Upgrade", StringComparison.OrdinalIgnoreCase) == 0) { bool removePackage = false; CurrentSubscription = this.GetCurrentSubscription(); var storageName = CurrentSubscription.CurrentStorageAccount; Uri packageUrl = null; if (Package.StartsWith(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase) || Package.StartsWith(Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase)) { packageUrl = new Uri(Package); } else { if (string.IsNullOrEmpty(storageName)) { throw new ArgumentException("CurrentStorageAccount is not set. Use Set-AzureSubscription subname -CurrentStorageAccount storageaccount to set it."); } var progress = new ProgressRecord(0, "Please wait...", "Uploading package to blob storage"); WriteProgress(progress); removePackage = true; InvokeInOperationContext(() => packageUrl = RetryCall(s => AzureBlob.UploadPackageToBlob(this.Channel, storageName, s, Package, null))); } var upgradeDeploymentInput = new UpgradeDeploymentInput { Mode = Mode ?? UpgradeType.Auto, Configuration = configString, PackageUrl = packageUrl, Label = Label != null ? Label : ServiceName, Force = Force.IsPresent }; if (!string.IsNullOrEmpty(RoleName)) { upgradeDeploymentInput.RoleToUpgrade = RoleName; } using (new OperationContextScope(Channel.ToContextChannel())) { try { ExecuteClientAction(upgradeDeploymentInput, CommandRuntime.ToString(), s => this.Channel.UpgradeDeploymentBySlot(s, this.ServiceName, this.Slot, upgradeDeploymentInput)); if (removePackage == true) { this.RetryCall(s => AzureBlob.DeletePackageFromBlob( this.Channel, storageName, s, packageUrl)); } } catch (ServiceManagementClientException ex) { this.WriteErrorDetails(ex); } } } else if (string.Compare(this.ParameterSetName, "Config", StringComparison.OrdinalIgnoreCase) == 0) { // Config parameter set var changeConfiguration = new ChangeConfigurationInput { Configuration = configString }; ExecuteClientActionInOCS(changeConfiguration, CommandRuntime.ToString(), s => this.Channel.ChangeConfigurationBySlot(s, this.ServiceName, this.Slot, changeConfiguration)); } else { // Status parameter set var updateDeploymentStatus = new UpdateDeploymentStatusInput() { Status = this.NewStatus }; ExecuteClientActionInOCS(null, CommandRuntime.ToString(), s => this.Channel.UpdateDeploymentStatusBySlot(s, this.ServiceName, this.Slot, updateDeploymentStatus)); } }
public static void UpgradeDeploymentBySlot(this IServiceManagement proxy, string subscriptionId, string serviceName, string deploymentSlot, UpgradeDeploymentInput input) { proxy.EndUpgradeDeploymentBySlot(proxy.BeginUpgradeDeploymentBySlot(subscriptionId, serviceName, deploymentSlot, input, null, null)); }
/// <summary> /// Upgrade the deployment for the service. /// </summary> private void UpgradeDeployment() { Debug.Assert( !string.IsNullOrEmpty(_hostedServiceName), "_hostedServiceName cannot be null or empty."); Debug.Assert( !string.IsNullOrEmpty(_deploymentSettings.Label), "Label cannot be null or empty."); Debug.Assert( !string.IsNullOrEmpty(_deploymentSettings.DeploymentName), "DeploymentName cannot be null or empty."); UpgradeDeploymentInput deploymentInput = new UpgradeDeploymentInput { PackageUrl = UploadPackage(), Configuration = GetConfiguration(), Label = ServiceManagementHelper.EncodeToBase64String(_deploymentSettings.Label), Mode = UpgradeType.Auto }; CertificateList uploadedCertificates = RetryCall<CertificateList>(subscription => Channel.ListCertificates(subscription, _hostedServiceName)); AddCertificates(uploadedCertificates); InvokeInOperationContext(() => { SafeWriteObjectWithTimestamp(Resources.PublishUpgradingMessage); RetryCall(subscription => Channel.UpgradeDeployment( subscription, _hostedServiceName, _deploymentSettings.DeploymentName, deploymentInput)); WaitForDeploymentToStart(); }); }
public IAsyncResult BeginUpgradeDeploymentBySlot(string subscriptionId, string serviceName, string deploymentSlot, UpgradeDeploymentInput input, AsyncCallback callback, object state) { SimpleServiceManagementAsyncResult result = new SimpleServiceManagementAsyncResult(); result.Values["subscriptionId"] = subscriptionId; result.Values["serviceName"] = serviceName; result.Values["deploymentSlot"] = deploymentSlot; result.Values["input"] = input; result.Values["callback"] = callback; result.Values["state"] = state; return result; }
public void ExecuteCommand() { string configString = string.Empty; if (!string.IsNullOrEmpty(Configuration)) { configString = General.GetConfiguration(Configuration); } ExtensionConfiguration extConfig = null; if (ExtensionConfiguration != null) { var roleList = (from c in ExtensionConfiguration where c != null from r in c.Roles select r).GroupBy(r => r.ToString()).Select(g => g.First()); foreach (var role in roleList) { var result = from c in ExtensionConfiguration where c != null && c.Roles.Any(r => r.ToString() == role.ToString()) select string.Format("{0}.{1}", c.ProviderNameSpace, c.Type); foreach (var s in result) { if (result.Count(t => t == s) > 1) { throw new Exception(string.Format(Resources.ServiceExtensionCannotApplyExtensionsInSameType, s)); } } } Deployment deployment = Channel.GetDeploymentBySlot(CurrentSubscription.SubscriptionId, ServiceName, Slot); ExtensionManager extensionMgr = new ExtensionManager(this, ServiceName); ExtensionConfigurationBuilder configBuilder = extensionMgr.GetBuilder(); foreach (ExtensionConfigurationInput context in ExtensionConfiguration) { if (context != null) { if (context.X509Certificate != null) { var operationDescription = string.Format(Resources.ServiceExtensionUploadingCertificate, CommandRuntime, context.X509Certificate.Thumbprint); ExecuteClientActionInOCS(null, operationDescription, s => this.Channel.AddCertificates(s, this.ServiceName, CertUtils.Create(context.X509Certificate))); } ExtensionConfiguration currentConfig = extensionMgr.InstallExtension(context, Slot, deployment.ExtensionConfiguration); foreach (var r in currentConfig.AllRoles) { if (!extensionMgr.GetBuilder(deployment.ExtensionConfiguration).ExistAny(r.Id)) { configBuilder.AddDefault(r.Id); } } foreach (var r in currentConfig.NamedRoles) { foreach (var e in r.Extensions) { if (!extensionMgr.GetBuilder(deployment.ExtensionConfiguration).ExistAny(e.Id)) { configBuilder.Add(r.RoleName, e.Id); } } } } } extConfig = configBuilder.ToConfiguration(); } // Upgrade Parameter Set if (string.Compare(ParameterSetName, "Upgrade", StringComparison.OrdinalIgnoreCase) == 0) { bool removePackage = false; CurrentSubscription = this.GetCurrentSubscription(); var storageName = CurrentSubscription.CurrentStorageAccount; Uri packageUrl = null; if (Package.StartsWith(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase) || Package.StartsWith(Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase)) { packageUrl = new Uri(Package); } else { if (string.IsNullOrEmpty(storageName)) { throw new ArgumentException(Resources.CurrentStorageAccountIsNotSet); } var progress = new ProgressRecord(0, Resources.WaitForUploadingPackage, Resources.UploadingPackage); WriteProgress(progress); removePackage = true; InvokeInOperationContext(() => packageUrl = RetryCall(s => AzureBlob.UploadPackageToBlob(this.Channel, storageName, s, Package, null))); } var upgradeDeploymentInput = new UpgradeDeploymentInput { Mode = Mode ?? UpgradeType.Auto, Configuration = configString, ExtensionConfiguration = extConfig, PackageUrl = packageUrl, Label = Label ?? ServiceName, Force = Force.IsPresent }; if (!string.IsNullOrEmpty(RoleName)) { upgradeDeploymentInput.RoleToUpgrade = RoleName; } using (new OperationContextScope(Channel.ToContextChannel())) { try { ExecuteClientAction(upgradeDeploymentInput, CommandRuntime.ToString(), s => this.Channel.UpgradeDeploymentBySlot(s, this.ServiceName, this.Slot, upgradeDeploymentInput)); if (removePackage == true) { this.RetryCall(s => AzureBlob.DeletePackageFromBlob( this.Channel, storageName, s, packageUrl)); } } catch (ServiceManagementClientException ex) { this.WriteErrorDetails(ex); } } } else if (string.Compare(this.ParameterSetName, "Config", StringComparison.OrdinalIgnoreCase) == 0) { // Config parameter set var changeConfiguration = new ChangeConfigurationInput { Configuration = configString, ExtensionConfiguration = extConfig }; ExecuteClientActionInOCS(changeConfiguration, CommandRuntime.ToString(), s => this.Channel.ChangeConfigurationBySlot(s, this.ServiceName, this.Slot, changeConfiguration)); } else { // Status parameter set var updateDeploymentStatus = new UpdateDeploymentStatusInput { Status = this.NewStatus }; ExecuteClientActionInOCS(null, CommandRuntime.ToString(), s => this.Channel.UpdateDeploymentStatusBySlot(s, this.ServiceName, this.Slot, updateDeploymentStatus)); } }
public void SetDeploymentTmpProcess() { SetAzureDeploymentCommand.SetAzureDeploymentCommand variable = null; string mode; string base64String; string empty = string.Empty; if (!string.IsNullOrEmpty(this.Configuration)) { empty = Utility.GetConfiguration(this.Configuration); } if (string.Compare(base.ParameterSetName, "Upgrade", StringComparison.OrdinalIgnoreCase) != 0) { if (string.Compare(base.ParameterSetName, "Config", StringComparison.OrdinalIgnoreCase) != 0) { Action <string> action = null; UpdateDeploymentStatusInput updateDeploymentStatusInput = new UpdateDeploymentStatusInput(); updateDeploymentStatusInput.Status = this.NewStatus; UpdateDeploymentStatusInput updateDeploymentStatusInput1 = updateDeploymentStatusInput; using (OperationContextScope operationContextScope = new OperationContextScope((IContextChannel)base.Channel)) { try { SetAzureDeploymentCommand setAzureDeploymentCommand = this; if (action == null) { action = (string s) => base.Channel.UpdateDeploymentStatusBySlot(s, this.ServiceName, this.Slot, updateDeploymentStatusInput1); } ((CmdletBase <IServiceManagement>)setAzureDeploymentCommand).RetryCall(action); Operation operation = base.WaitForOperation(base.CommandRuntime.ToString()); ManagementOperationContext managementOperationContext = new ManagementOperationContext(); managementOperationContext.set_OperationDescription(base.CommandRuntime.ToString()); managementOperationContext.set_OperationId(operation.OperationTrackingId); managementOperationContext.set_OperationStatus(operation.Status); ManagementOperationContext managementOperationContext1 = managementOperationContext; base.WriteObject(managementOperationContext1, true); } catch (CommunicationException communicationException1) { CommunicationException communicationException = communicationException1; this.WriteErrorDetails(communicationException); } } } else { Action <string> action1 = null; ChangeConfigurationInput changeConfigurationInput = new ChangeConfigurationInput(); changeConfigurationInput.Configuration = empty; ChangeConfigurationInput changeConfigurationInput1 = changeConfigurationInput; using (OperationContextScope operationContextScope1 = new OperationContextScope((IContextChannel)base.Channel)) { try { CmdletExtensions.WriteVerboseOutputForObject(this, changeConfigurationInput1); SetAzureDeploymentCommand setAzureDeploymentCommand1 = this; if (action1 == null) { action1 = (string s) => base.Channel.ChangeConfigurationBySlot(s, this.ServiceName, this.Slot, changeConfigurationInput1); } ((CmdletBase <IServiceManagement>)setAzureDeploymentCommand1).RetryCall(action1); Operation operation1 = base.WaitForOperation(base.CommandRuntime.ToString()); ManagementOperationContext managementOperationContext2 = new ManagementOperationContext(); managementOperationContext2.set_OperationDescription(base.CommandRuntime.ToString()); managementOperationContext2.set_OperationId(operation1.OperationTrackingId); managementOperationContext2.set_OperationStatus(operation1.Status); ManagementOperationContext managementOperationContext3 = managementOperationContext2; base.WriteObject(managementOperationContext3, true); } catch (CommunicationException communicationException3) { CommunicationException communicationException2 = communicationException3; this.WriteErrorDetails(communicationException2); } } } } else { Func <string, Uri> func = null; Action <string> action2 = null; Action <string> action3 = null; bool flag = false; base.CurrentSubscription = CmdletSubscriptionExtensions.GetCurrentSubscription(this); string currentStorageAccount = base.CurrentSubscription.CurrentStorageAccount; if (this.Package.StartsWith(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase) || this.Package.StartsWith(Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase)) { Uri uri = new Uri(this.Package); } else { if (!string.IsNullOrEmpty(currentStorageAccount)) { ProgressRecord progressRecord = new ProgressRecord(0, "Please wait...", "Uploading package to blob storage"); base.WriteProgress(progressRecord); flag = true; SetAzureDeploymentCommand variable1 = variable; SetAzureDeploymentCommand setAzureDeploymentCommand2 = this; if (func == null) { func = (string s) => AzureBlob.UploadPackageToBlob(this.CreateChannel(), currentStorageAccount, s, this.Package); } packageUrl = ((CmdletBase <IServiceManagement>)setAzureDeploymentCommand2).RetryCall <Uri>(func); } else { throw new ArgumentException("CurrentStorageAccount is not set. Use Set-AzureSubscription subname -CurrentStorageAccount storageaccount to set it."); } } SetAzureDeploymentCommand variable2 = variable; UpgradeDeploymentInput upgradeDeploymentInput = new UpgradeDeploymentInput(); UpgradeDeploymentInput upgradeDeploymentInput1 = upgradeDeploymentInput; if (this.Mode == null) { mode = "Auto"; } else { mode = this.Mode; } upgradeDeploymentInput1.Mode = mode; upgradeDeploymentInput.Configuration = empty; upgradeDeploymentInput.PackageUrl = uri; UpgradeDeploymentInput upgradeDeploymentInput2 = upgradeDeploymentInput; if (this.Label != null) { base64String = ServiceManagementHelper.EncodeToBase64String(this.Label); } else { base64String = ServiceManagementHelper.EncodeToBase64String(this.ServiceName); } upgradeDeploymentInput2.Label = base64String; SwitchParameter force = this.Force; upgradeDeploymentInput.Force = new bool?(force.IsPresent); variable2.upgradeDeploymentInput = upgradeDeploymentInput; if (!string.IsNullOrEmpty(this.RoleName)) { UpgradeDeploymentInput roleName = this.RoleName; } using (OperationContextScope operationContextScope2 = new OperationContextScope((IContextChannel)base.Channel)) { try { CmdletExtensions.WriteVerboseOutputForObject(this, roleName); SetAzureDeploymentCommand setAzureDeploymentCommand3 = this; if (action2 == null) { action2 = (string s) => this.Channel.UpgradeDeploymentBySlot(s, this.ServiceName, this.Slot, this.upgradeDeploymentInput); } ((CmdletBase <IServiceManagement>)setAzureDeploymentCommand3).RetryCall(action2); Operation operation2 = base.WaitForOperation(base.CommandRuntime.ToString()); ManagementOperationContext managementOperationContext4 = new ManagementOperationContext(); managementOperationContext4.OperationDescription = base.CommandRuntime.ToString(); managementOperationContext4.OperationId = operation2.OperationTrackingId; managementOperationContext4.OperationStatus = operation2.Status; ManagementOperationContext managementOperationContext5 = managementOperationContext4; base.WriteObject(managementOperationContext5, true); if (flag) { SetAzureDeploymentCommand setAzureDeploymentCommand4 = this; if (action3 == null) { action3 = (string s) => AzureBlob.DeletePackageFromBlob(base.Channel, currentStorageAccount, s, uri); } ((CmdletBase <IServiceManagement>)setAzureDeploymentCommand4).RetryCall(action3); } } catch (CommunicationException communicationException5) { CommunicationException communicationException4 = communicationException5; this.WriteErrorDetails(communicationException4); } } } }
public void ExecuteCommand() { string configString = string.Empty; if (!string.IsNullOrEmpty(Configuration)) { configString = General.GetConfiguration(Configuration); } ExtensionConfiguration extConfig = null; if (ExtensionConfiguration != null) { var roleList = (from c in ExtensionConfiguration where c != null from r in c.Roles select r).GroupBy(r => r.ToString()).Select(g => g.First()); foreach (var role in roleList) { var result = from c in ExtensionConfiguration where c != null && c.Roles.Any(r => r.ToString() == role.ToString()) select string.Format("{0}.{1}", c.ProviderNameSpace, c.Type); foreach (var s in result) { if (result.Count(t => t == s) > 1) { throw new Exception(string.Format(Resources.ServiceExtensionCannotApplyExtensionsInSameType, s)); } } } Deployment deployment = Channel.GetDeploymentBySlot(CurrentSubscription.SubscriptionId, ServiceName, Slot); ExtensionManager extensionMgr = new ExtensionManager(Channel, CurrentSubscription.SubscriptionId, ServiceName); ExtensionConfigurationBuilder configBuilder = extensionMgr.GetBuilder(); foreach (ExtensionConfigurationInput context in ExtensionConfiguration) { if (context != null) { if (context.X509Certificate != null) { var operationDescription = string.Format(Resources.ServiceExtensionUploadingCertificate, CommandRuntime, context.X509Certificate.Thumbprint); ExecuteClientActionInOCS(null, operationDescription, s => this.Channel.AddCertificates(s, this.ServiceName, CertUtils.Create(context.X509Certificate))); } ExtensionConfiguration currentConfig = extensionMgr.InstallExtension(context, Slot, deployment.ExtensionConfiguration); foreach (var r in currentConfig.AllRoles) { if (!extensionMgr.GetBuilder(deployment.ExtensionConfiguration).ExistAny(r.Id)) { configBuilder.AddDefault(r.Id); } } foreach (var r in currentConfig.NamedRoles) { foreach (var e in r.Extensions) { if (!extensionMgr.GetBuilder(deployment.ExtensionConfiguration).ExistAny(e.Id)) { configBuilder.Add(r.RoleName, e.Id); } } } } } extConfig = configBuilder.ToConfiguration(); } // Upgrade Parameter Set if (string.Compare(ParameterSetName, "Upgrade", StringComparison.OrdinalIgnoreCase) == 0) { bool removePackage = false; CurrentSubscription = this.GetCurrentSubscription(); var storageName = CurrentSubscription.CurrentStorageAccount; Uri packageUrl = null; if (Package.StartsWith(Uri.UriSchemeHttp, StringComparison.OrdinalIgnoreCase) || Package.StartsWith(Uri.UriSchemeHttps, StringComparison.OrdinalIgnoreCase)) { packageUrl = new Uri(Package); } else { if (string.IsNullOrEmpty(storageName)) { throw new ArgumentException(Resources.CurrentStorageAccountIsNotSet); } var progress = new ProgressRecord(0, Resources.WaitForUploadingPackage, Resources.UploadingPackage); WriteProgress(progress); removePackage = true; InvokeInOperationContext(() => packageUrl = RetryCall(s => AzureBlob.UploadPackageToBlob(this.Channel, storageName, s, Package, null))); } var upgradeDeploymentInput = new UpgradeDeploymentInput { Mode = Mode ?? UpgradeType.Auto, Configuration = configString, ExtensionConfiguration = extConfig, PackageUrl = packageUrl, Label = Label ?? ServiceName, Force = Force.IsPresent }; if (!string.IsNullOrEmpty(RoleName)) { upgradeDeploymentInput.RoleToUpgrade = RoleName; } using (new OperationContextScope(Channel.ToContextChannel())) { try { ExecuteClientAction(upgradeDeploymentInput, CommandRuntime.ToString(), s => this.Channel.UpgradeDeploymentBySlot(s, this.ServiceName, this.Slot, upgradeDeploymentInput)); if (removePackage == true) { this.RetryCall(s => AzureBlob.DeletePackageFromBlob( this.Channel, storageName, s, packageUrl)); } } catch (ServiceManagementClientException ex) { this.WriteErrorDetails(ex); } } } else if (string.Compare(this.ParameterSetName, "Config", StringComparison.OrdinalIgnoreCase) == 0) { // Config parameter set var changeConfiguration = new ChangeConfigurationInput { Configuration = configString, ExtensionConfiguration = extConfig }; ExecuteClientActionInOCS(changeConfiguration, CommandRuntime.ToString(), s => this.Channel.ChangeConfigurationBySlot(s, this.ServiceName, this.Slot, changeConfiguration)); } else { // Status parameter set var updateDeploymentStatus = new UpdateDeploymentStatusInput { Status = this.NewStatus }; ExecuteClientActionInOCS(null, CommandRuntime.ToString(), s => this.Channel.UpdateDeploymentStatusBySlot(s, this.ServiceName, this.Slot, updateDeploymentStatus)); } }