public void NewAzureVMProcess() { SubscriptionData currentSubscription = this.GetCurrentSubscription(); CloudStorageAccount currentStorage = null; try { currentStorage = currentSubscription.GetCurrentStorageAccount(); } catch (ServiceManagementClientException) // couldn't access { throw new ArgumentException(Resources.CurrentStorageAccountIsNotAccessible); } if (currentStorage == null) // not set { throw new ArgumentException(Resources.CurrentStorageAccountIsNotSet); } bool serviceExists = DoesCloudServiceExist(this.ServiceName); if (!string.IsNullOrEmpty(this.Location)) { if (serviceExists) { throw new ApplicationException(Resources.ServiceExistsLocationCanNotBeSpecified); } } if (!string.IsNullOrEmpty(this.AffinityGroup)) { if (serviceExists) { throw new ApplicationException(Resources.ServiceExistsAffinityGroupCanNotBeSpecified); } } if (!serviceExists) { using (new OperationContextScope(Channel.ToContextChannel())) { try { //Implicitly created hosted service2012-05-07 23:12 // Create the Cloud Service when // Location or Affinity Group is Specified // or VNET is specified and the service doesn't exist var chsi = new CreateHostedServiceInput { AffinityGroup = this.AffinityGroup, Location = this.Location, ServiceName = this.ServiceName, Description = String.Format("Implicitly created hosted service{0}", DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm")), Label = this.ServiceName }; ExecuteClientAction(chsi, CommandRuntime + Resources.QuickVMCreateCloudService, s => this.Channel.CreateHostedService(s, chsi)); } catch (ServiceManagementClientException ex) { this.WriteErrorDetails(ex); return; } } } if (ParameterSetName.Equals("Windows", StringComparison.OrdinalIgnoreCase)) { if (WinRMCertificate != null) { if (!CertUtils.HasExportablePrivateKey(WinRMCertificate)) { throw new ArgumentException(Resources.WinRMCertificateDoesNotHaveExportablePrivateKey); } var operationDescription = string.Format(Resources.QuickVMUploadingWinRMCertificate, CommandRuntime, WinRMCertificate.Thumbprint); var certificateFile = CertUtils.Create(WinRMCertificate); ExecuteClientActionInOCS(null, operationDescription, s => this.Channel.AddCertificates(s, this.ServiceName, certificateFile)); } if (X509Certificates != null) { var certificateFilesWithThumbprint = from c in X509Certificates select new { c.Thumbprint, CertificateFile = CertUtils.Create(c, this.NoExportPrivateKey.IsPresent) }; foreach (var current in certificateFilesWithThumbprint.ToList()) { var operationDescription = string.Format(Resources.QuickVMUploadingCertificate, CommandRuntime, current.Thumbprint); ExecuteClientActionInOCS(null, operationDescription, s => this.Channel.AddCertificates(s, this.ServiceName, current.CertificateFile)); } } } var vm = CreatePersistenVMRole(currentStorage); // If the current deployment doesn't exist set it create it if (CurrentDeployment == null) { using (new OperationContextScope(Channel.ToContextChannel())) { try { var deployment = new Deployment { DeploymentSlot = DeploymentSlotType.Production, Name = this.ServiceName, Label = this.ServiceName, RoleList = new RoleList { vm }, VirtualNetworkName = this.VNetName }; if (this.DnsSettings != null) { deployment.Dns = new DnsSettings { DnsServers = new DnsServerList() }; foreach (DnsServer dns in this.DnsSettings) { deployment.Dns.DnsServers.Add(dns); } } var operationDescription = string.Format(Resources.QuickVMCreateDeploymentWithVM, CommandRuntime, vm.RoleName); ExecuteClientAction(deployment, operationDescription, s => this.Channel.CreateDeployment(s, this.ServiceName, deployment)); if (WaitForBoot.IsPresent) { WaitForRoleToBoot(vm.RoleName); } } catch (ServiceManagementClientException ex) { if (ex.HttpStatus == HttpStatusCode.NotFound) { throw new Exception(Resources.ServiceDoesNotExistSpecifyLocationOrAffinityGroup); } else { this.WriteErrorDetails(ex); } return; } _createdDeployment = true; } } else { if (VNetName != null || DnsSettings != null) { WriteWarning(Resources.VNetNameOrDnsSettingsCanOnlyBeSpecifiedOnNewDeployments); } } // Only create the VM when a new VM was added and it was not created during the deployment phase. if ((_createdDeployment == false)) { using (new OperationContextScope(Channel.ToContextChannel())) { try { var operationDescription = string.Format(Resources.QuickVMCreateVM, CommandRuntime, vm.RoleName); ExecuteClientAction(vm, operationDescription, s => this.Channel.AddRole(s, this.ServiceName, this.ServiceName, vm)); if (WaitForBoot.IsPresent) { WaitForRoleToBoot(vm.RoleName); } } catch (ServiceManagementClientException ex) { this.WriteErrorDetails(ex); return; } } } }
public void NewAzureVMProcess() { SubscriptionData currentSubscription = this.GetCurrentSubscription(); CloudStorageAccount currentStorage = null; try { currentStorage = currentSubscription.GetCurrentStorageAccount(); } catch (ServiceManagementClientException) // couldn't access { throw new ArgumentException(Resources.CurrentStorageAccountIsNotAccessible); } if (currentStorage == null) // not set { throw new ArgumentException(Resources.CurrentStorageAccountIsNotSet); } Operation lastOperation = null; using (new OperationContextScope(Channel.ToContextChannel())) { try { if (this.ParameterSetName.Equals("CreateService", StringComparison.OrdinalIgnoreCase) == true) { var chsi = new CreateHostedServiceInput { AffinityGroup = this.AffinityGroup, Location = this.Location, ServiceName = this.ServiceName, Description = this.ServiceDescription ?? String.Format("Implicitly created hosted service{0}", DateTime.Now.ToUniversalTime().ToString("yyyy-MM-dd HH:mm")), Label = this.ServiceLabel ?? this.ServiceName }; ExecuteClientAction(chsi, CommandRuntime + " - Create Cloud Service", s => this.Channel.CreateHostedService(s, chsi)); } } catch (ServiceManagementClientException ex) { this.WriteErrorDetails(ex); return; } } if (lastOperation != null && string.Compare(lastOperation.Status, OperationState.Failed, StringComparison.OrdinalIgnoreCase) == 0) { return; } foreach (var vm in VMs) { var configuration = vm.ConfigurationSets.OfType <WindowsProvisioningConfigurationSet>().FirstOrDefault(); if (configuration != null) { if (vm.WinRMCertificate != null) { if (!CertUtils.HasExportablePrivateKey(vm.WinRMCertificate)) { throw new ArgumentException(Resources.WinRMCertificateDoesNotHaveExportablePrivateKey); } var operationDescription = string.Format(Resources.AzureVMUploadingWinRMCertificate, CommandRuntime, vm.WinRMCertificate.Thumbprint); var certificateFile = CertUtils.Create(vm.WinRMCertificate); ExecuteClientActionInOCS(null, operationDescription, s => this.Channel.AddCertificates(s, this.ServiceName, certificateFile)); } var certificateFilesWithThumbprint = from c in vm.X509Certificates select new { c.Thumbprint, CertificateFile = CertUtils.Create(c, vm.NoExportPrivateKey) }; foreach (var current in certificateFilesWithThumbprint.ToList()) { var operationDescription = string.Format(Resources.AzureVMCommandUploadingCertificate, CommandRuntime, current.Thumbprint); ExecuteClientActionInOCS(null, operationDescription, s => this.Channel.AddCertificates(s, this.ServiceName, current.CertificateFile)); } } } var persistentVMs = this.VMs.Select(vm => CreatePersistenVMRole(vm, currentStorage)).ToList(); // If the current deployment doesn't exist set it create it if (CurrentDeployment == null) { using (new OperationContextScope(Channel.ToContextChannel())) { try { var deployment = new Deployment { DeploymentSlot = DeploymentSlotType.Production, Name = this.DeploymentName ?? this.ServiceName, Label = this.DeploymentLabel ?? this.ServiceName, RoleList = new RoleList(new List <Role> { persistentVMs[0] }), VirtualNetworkName = this.VNetName }; if (this.DnsSettings != null) { deployment.Dns = new DnsSettings { DnsServers = new DnsServerList() }; foreach (var dns in this.DnsSettings) { deployment.Dns.DnsServers.Add(dns); } } var operationDescription = string.Format(Resources.AzureVMCommandCreateDeploymentWithVM, CommandRuntime, persistentVMs[0].RoleName); ExecuteClientAction(deployment, operationDescription, s => this.Channel.CreateDeployment(s, this.ServiceName, deployment)); if (this.WaitForBoot.IsPresent) { WaitForRoleToBoot(persistentVMs[0].RoleName); } } catch (ServiceManagementClientException ex) { if (ex.HttpStatus == HttpStatusCode.NotFound) { throw new Exception(Resources.ServiceDoesNotExistSpecifyLocationOrAffinityGroup); } else { this.WriteErrorDetails(ex); } return; } this.createdDeployment = true; } } else { if (this.VNetName != null || this.DnsSettings != null || !string.IsNullOrEmpty(this.DeploymentLabel) || !string.IsNullOrEmpty(this.DeploymentName)) { WriteWarning(Resources.VNetNameDnsSettingsDeploymentLabelDeploymentNameCanBeSpecifiedOnNewDeployments); } } if (this.createdDeployment == false && CurrentDeployment != null) { this.DeploymentName = CurrentDeployment.Name; } int startingVM = (this.createdDeployment == true) ? 1 : 0; for (int i = startingVM; i < persistentVMs.Count; i++) { var operationDescription = string.Format(Resources.AzureVMCommandCreateVM, CommandRuntime, persistentVMs[i].RoleName); ExecuteClientActionInOCS(persistentVMs[i], operationDescription, s => this.Channel.AddRole(s, this.ServiceName, this.DeploymentName ?? this.ServiceName, persistentVMs[i])); } if (this.WaitForBoot.IsPresent) { for (int i = startingVM; i < persistentVMs.Count; i++) { WaitForRoleToBoot(persistentVMs[i].RoleName); } } }