public override void ExecuteCmdlet() { if (this.IsParameterBound(c => c.UserData)) { if (!ValidateBase64EncodedString.ValidateStringIsBase64Encoded(this.UserData)) { this.UserData = ValidateBase64EncodedString.EncodeStringToBase64(this.UserData); this.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); } } base.ExecuteCmdlet(); if (this.ParameterSetName.Equals(IdParameterSet)) { this.ResourceGroupName = GetResourceGroupNameFromId(this.Id); } if (ShouldProcess(this.VM.Name, VerbsData.Update)) { ExecuteClientAction(() => { var parameters = new VirtualMachine { DiagnosticsProfile = this.VM.DiagnosticsProfile, HardwareProfile = this.VM.HardwareProfile, StorageProfile = this.VM.StorageProfile, NetworkProfile = this.VM.NetworkProfile, OsProfile = this.VM.OSProfile, BillingProfile = this.VM.BillingProfile, SecurityProfile = this.VM.SecurityProfile, Plan = this.VM.Plan, AvailabilitySet = this.VM.AvailabilitySetReference, Location = this.VM.Location, ExtendedLocation = this.VM.ExtendedLocation, LicenseType = this.VM.LicenseType, Tags = this.Tag != null ? this.Tag.ToDictionary() : this.VM.Tags, Identity = ComputeAutoMapperProfile.Mapper.Map <VirtualMachineIdentity>(this.VM.Identity), Zones = (this.VM.Zones != null && this.VM.Zones.Count > 0) ? this.VM.Zones : null, ProximityPlacementGroup = this.IsParameterBound(c => c.ProximityPlacementGroupId) ? new SubResource(this.ProximityPlacementGroupId) : this.VM.ProximityPlacementGroup, Host = this.IsParameterBound(c => c.HostId) ? new SubResource(this.HostId) : this.VM.Host, VirtualMachineScaleSet = this.VM.VirtualMachineScaleSet, AdditionalCapabilities = this.VM.AdditionalCapabilities, EvictionPolicy = this.VM.EvictionPolicy, Priority = this.VM.Priority, CapacityReservation = this.VM.CapacityReservation, ApplicationProfile = ComputeAutoMapperProfile.Mapper.Map <ApplicationProfile>(this.VM.ApplicationProfile), UserData = this.IsParameterBound(c => c.UserData) ? this.UserData : this.VM.UserData }; if (parameters.Host != null && string.IsNullOrWhiteSpace(parameters.Host.Id)) { parameters.Host.Id = null; } if (parameters.ProximityPlacementGroup != null && string.IsNullOrWhiteSpace(parameters.ProximityPlacementGroup.Id)) { parameters.ProximityPlacementGroup.Id = null; } if (this.IsParameterBound(c => c.IdentityType)) { parameters.Identity = new VirtualMachineIdentity(null, null, this.IdentityType, null); } if (this.IsParameterBound(c => c.IdentityId)) { if (parameters.Identity == null) { parameters.Identity = new VirtualMachineIdentity(); } parameters.Identity.UserAssignedIdentities = new Dictionary <string, VirtualMachineIdentityUserAssignedIdentitiesValue>(); foreach (var id in this.IdentityId) { parameters.Identity.UserAssignedIdentities.Add(id, new VirtualMachineIdentityUserAssignedIdentitiesValue()); } } if (this.IsParameterBound(c => c.OsDiskWriteAccelerator)) { if (parameters.StorageProfile == null) { parameters.StorageProfile = new StorageProfile(); } if (parameters.StorageProfile.OsDisk == null) { parameters.StorageProfile.OsDisk = new OSDisk(); } parameters.StorageProfile.OsDisk.WriteAcceleratorEnabled = this.OsDiskWriteAccelerator; } if (this.IsParameterBound(c => c.UltraSSDEnabled)) { if (parameters.AdditionalCapabilities == null) { parameters.AdditionalCapabilities = new AdditionalCapabilities(); } parameters.AdditionalCapabilities.UltraSSDEnabled = this.UltraSSDEnabled; } if (this.IsParameterBound(c => c.MaxPrice)) { if (parameters.BillingProfile == null) { parameters.BillingProfile = new BillingProfile(); } parameters.BillingProfile.MaxPrice = this.MaxPrice; } if (this.IsParameterBound(c => c.EncryptionAtHost)) { if (parameters.SecurityProfile == null) { parameters.SecurityProfile = new SecurityProfile(); } parameters.SecurityProfile.EncryptionAtHost = this.EncryptionAtHost; } if (this.IsParameterBound(c => c.CapacityReservationGroupId)) { if (parameters.CapacityReservation == null) { parameters.CapacityReservation = new CapacityReservationProfile(); } parameters.CapacityReservation.CapacityReservationGroup = new SubResource(CapacityReservationGroupId); } if (parameters.StorageProfile != null && parameters.StorageProfile.ImageReference != null && parameters.StorageProfile.ImageReference.Id != null) { parameters.StorageProfile.ImageReference.Id = null; } if (NoWait.IsPresent) { var op = this.VirtualMachineClient.BeginCreateOrUpdateWithHttpMessagesAsync( this.ResourceGroupName, this.VM.Name, parameters).GetAwaiter().GetResult(); var result = ComputeAutoMapperProfile.Mapper.Map <PSAzureOperationResponse>(op); WriteObject(result); } else { var op = this.VirtualMachineClient.CreateOrUpdateWithHttpMessagesAsync( this.ResourceGroupName, this.VM.Name, parameters).GetAwaiter().GetResult(); var result = ComputeAutoMapperProfile.Mapper.Map <PSAzureOperationResponse>(op); WriteObject(result); } }); } }
public override void ExecuteCmdlet() { var vm = new PSVirtualMachine { Name = this.VMName, AvailabilitySetReference = string.IsNullOrEmpty(this.AvailabilitySetId) ? null : new SubResource { Id = this.AvailabilitySetId }, LicenseType = this.LicenseType, Identity = null, Tags = this.Tags != null?this.Tags.ToDictionary() : null, Zones = this.Zone, EvictionPolicy = this.EvictionPolicy, Priority = this.Priority }; if (this.IsParameterBound(c => c.IdentityType)) { vm.Identity = new VirtualMachineIdentity(null, null, this.IdentityType); } if (this.IsParameterBound(c => c.IdentityId)) { if (vm.Identity == null) { vm.Identity = new VirtualMachineIdentity(); } vm.Identity.UserAssignedIdentities = new Dictionary <string, VirtualMachineIdentityUserAssignedIdentitiesValue>(); foreach (var id in this.IdentityId) { vm.Identity.UserAssignedIdentities.Add(id, new VirtualMachineIdentityUserAssignedIdentitiesValue()); } } if (!string.IsNullOrEmpty(this.VMSize)) { vm.HardwareProfile = new HardwareProfile(); vm.HardwareProfile.VmSize = this.VMSize; } if (this.EnableUltraSSD.IsPresent) { vm.AdditionalCapabilities = new AdditionalCapabilities(true); } if (this.IsParameterBound(c => c.ProximityPlacementGroupId)) { vm.ProximityPlacementGroup = new SubResource(this.ProximityPlacementGroupId); } if (this.IsParameterBound(c => c.HostId)) { vm.Host = new SubResource(this.HostId); } if (this.IsParameterBound(c => c.VmssId)) { vm.VirtualMachineScaleSet = new SubResource(this.VmssId); } if (this.IsParameterBound(c => c.MaxPrice)) { vm.BillingProfile = new BillingProfile(this.MaxPrice); } if (this.EncryptionAtHost.IsPresent) { if (vm.SecurityProfile == null) { vm.SecurityProfile = new SecurityProfile(); } vm.SecurityProfile.EncryptionAtHost = this.EncryptionAtHost.IsPresent; } if (this.IsParameterBound(c => c.CapacityReservationGroupId)) { vm.CapacityReservation = new CapacityReservationProfile(); vm.CapacityReservation.CapacityReservationGroup = new SubResource(this.CapacityReservationGroupId); } if (this.IsParameterBound(c => c.UserData)) { if (!ValidateBase64EncodedString.ValidateStringIsBase64Encoded(this.UserData)) { this.UserData = ValidateBase64EncodedString.EncodeStringToBase64(this.UserData); this.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); } vm.UserData = this.UserData; } WriteObject(vm); }
public override void ExecuteCmdlet() { if (this.IsParameterBound(c => c.UserData)) { if (!ValidateBase64EncodedString.ValidateStringIsBase64Encoded(this.UserData)) { this.UserData = ValidateBase64EncodedString.EncodeStringToBase64(this.UserData); this.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); } } base.ExecuteCmdlet(); switch (ParameterSetName) { case SimpleParameterSet: this.StartAndWait(SimpleParameterSetExecuteCmdlet); break; default: ExecuteClientAction(() => { if (ShouldProcess(this.VMScaleSetName, VerbsCommon.New)) { string resourceGroupName = this.ResourceGroupName; string vmScaleSetName = this.VMScaleSetName; VirtualMachineScaleSet parameters = new VirtualMachineScaleSet(); ComputeAutomationAutoMapperProfile.Mapper.Map <PSVirtualMachineScaleSet, VirtualMachineScaleSet>(this.VirtualMachineScaleSet, parameters); if (parameters?.VirtualMachineProfile?.StorageProfile?.ImageReference?.Version?.ToLower() != "latest") { WriteWarning("You are deploying VMSS pinned to a specific image version from Azure Marketplace. \n" + "Consider using \"latest\" as the image version. This allows VMSS to auto upgrade when a newer version is available."); } if (parameters?.OrchestrationMode == "Flexible") { if (parameters?.VirtualMachineProfile?.NetworkProfile?.NetworkInterfaceConfigurations != null) { foreach (var nicConfig in parameters.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations) { if (nicConfig.IpConfigurations != null) { foreach (var ipConfig in nicConfig.IpConfigurations) { ipConfig.LoadBalancerInboundNatPools = null; } } } } parameters.UpgradePolicy = null; flexibleOrchestrationModeDefaultParameters(parameters); checkFlexibleOrchestrationModeParamsDefaultParamSet(parameters); } var result = VirtualMachineScaleSetsClient.CreateOrUpdate(resourceGroupName, vmScaleSetName, parameters); var psObject = new PSVirtualMachineScaleSet(); ComputeAutomationAutoMapperProfile.Mapper.Map <VirtualMachineScaleSet, PSVirtualMachineScaleSet>(result, psObject); WriteObject(psObject); } }); break; } }
private void Run() { // Sku Sku vSku = null; // Plan Plan vPlan = null; // UpgradePolicy UpgradePolicy vUpgradePolicy = null; // AutomaticRepairsPolicy AutomaticRepairsPolicy vAutomaticRepairsPolicy = null; // VirtualMachineProfile PSVirtualMachineScaleSetVMProfile vVirtualMachineProfile = null; // ProximityPlacementGroup SubResource vProximityPlacementGroup = null; // AdditionalCapabilities AdditionalCapabilities vAdditionalCapabilities = null; // ScaleInPolicy ScaleInPolicy vScaleInPolicy = null; // Identity VirtualMachineScaleSetIdentity vIdentity = null; // ExtendedLocation CM.PSExtendedLocation vExtendedLocation = null; if (this.IsParameterBound(c => c.SkuName)) { if (vSku == null) { vSku = new Sku(); } vSku.Name = this.SkuName; } if (this.IsParameterBound(c => c.SkuTier)) { if (vSku == null) { vSku = new Sku(); } vSku.Tier = this.SkuTier; } if (this.IsParameterBound(c => c.SkuCapacity)) { if (vSku == null) { vSku = new Sku(); } vSku.Capacity = this.SkuCapacity; } if (this.IsParameterBound(c => c.PlanName)) { if (vPlan == null) { vPlan = new Plan(); } vPlan.Name = this.PlanName; } if (this.IsParameterBound(c => c.PlanPublisher)) { if (vPlan == null) { vPlan = new Plan(); } vPlan.Publisher = this.PlanPublisher; } if (this.IsParameterBound(c => c.PlanProduct)) { if (vPlan == null) { vPlan = new Plan(); } vPlan.Product = this.PlanProduct; } if (this.IsParameterBound(c => c.PlanPromotionCode)) { if (vPlan == null) { vPlan = new Plan(); } vPlan.PromotionCode = this.PlanPromotionCode; } if (this.IsParameterBound(c => c.UpgradePolicyMode)) { if (vUpgradePolicy == null) { vUpgradePolicy = new UpgradePolicy(); } vUpgradePolicy.Mode = this.UpgradePolicyMode; } if (this.IsParameterBound(c => c.RollingUpgradePolicy)) { if (vUpgradePolicy == null) { vUpgradePolicy = new UpgradePolicy(); } vUpgradePolicy.RollingUpgradePolicy = this.RollingUpgradePolicy; } if (this.AutoOSUpgrade.IsPresent) { if (vUpgradePolicy == null) { vUpgradePolicy = new UpgradePolicy(); } if (vUpgradePolicy.AutomaticOSUpgradePolicy == null) { vUpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); } vUpgradePolicy.AutomaticOSUpgradePolicy.EnableAutomaticOSUpgrade = this.AutoOSUpgrade.IsPresent; } if (this.EnableAutomaticRepair.IsPresent) { if (vAutomaticRepairsPolicy == null) { vAutomaticRepairsPolicy = new AutomaticRepairsPolicy(); } vAutomaticRepairsPolicy.Enabled = this.EnableAutomaticRepair.IsPresent; } if (this.EncryptionAtHost.IsPresent) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } if (vVirtualMachineProfile.SecurityProfile == null) { vVirtualMachineProfile.SecurityProfile = new SecurityProfile(); } vVirtualMachineProfile.SecurityProfile.EncryptionAtHost = this.EncryptionAtHost; } if (this.IsParameterBound(c => c.CapacityReservationGroupId)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } if (vVirtualMachineProfile.CapacityReservation == null) { vVirtualMachineProfile.CapacityReservation = new CapacityReservationProfile(); } vVirtualMachineProfile.CapacityReservation.CapacityReservationGroup = new SubResource(this.CapacityReservationGroupId); } if (this.IsParameterBound(c => c.AutomaticRepairGracePeriod)) { if (vAutomaticRepairsPolicy == null) { vAutomaticRepairsPolicy = new AutomaticRepairsPolicy(); } vAutomaticRepairsPolicy.GracePeriod = this.AutomaticRepairGracePeriod; } if (this.IsParameterBound(c => c.DisableAutoRollback)) { if (vUpgradePolicy == null) { vUpgradePolicy = new UpgradePolicy(); } if (vUpgradePolicy.AutomaticOSUpgradePolicy == null) { vUpgradePolicy.AutomaticOSUpgradePolicy = new AutomaticOSUpgradePolicy(); } vUpgradePolicy.AutomaticOSUpgradePolicy.DisableAutomaticRollback = this.DisableAutoRollback; } if (this.IsParameterBound(c => c.OsProfile)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } vVirtualMachineProfile.OsProfile = this.OsProfile; } if (this.IsParameterBound(c => c.StorageProfile)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } vVirtualMachineProfile.StorageProfile = this.StorageProfile; } if (this.IsParameterBound(c => c.HealthProbeId)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } if (vVirtualMachineProfile.NetworkProfile == null) { vVirtualMachineProfile.NetworkProfile = new VirtualMachineScaleSetNetworkProfile(); } if (vVirtualMachineProfile.NetworkProfile.HealthProbe == null) { vVirtualMachineProfile.NetworkProfile.HealthProbe = new ApiEntityReference(); } vVirtualMachineProfile.NetworkProfile.HealthProbe.Id = this.HealthProbeId; } if (this.IsParameterBound(c => c.NetworkInterfaceConfiguration)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } if (vVirtualMachineProfile.NetworkProfile == null) { vVirtualMachineProfile.NetworkProfile = new VirtualMachineScaleSetNetworkProfile(); } vVirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations = this.NetworkInterfaceConfiguration; } if (this.IsParameterBound(c => c.BootDiagnostic)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } if (vVirtualMachineProfile.DiagnosticsProfile == null) { vVirtualMachineProfile.DiagnosticsProfile = new DiagnosticsProfile(); } vVirtualMachineProfile.DiagnosticsProfile.BootDiagnostics = this.BootDiagnostic; } if (this.IsParameterBound(c => c.Extension)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } if (vVirtualMachineProfile.ExtensionProfile == null) { vVirtualMachineProfile.ExtensionProfile = new PSVirtualMachineScaleSetExtensionProfile(); } vVirtualMachineProfile.ExtensionProfile.Extensions = this.Extension; } if (this.IsParameterBound(c => c.LicenseType)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } vVirtualMachineProfile.LicenseType = this.LicenseType; } if (this.IsParameterBound(c => c.Priority)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } vVirtualMachineProfile.Priority = this.Priority; } if (this.IsParameterBound(c => c.EvictionPolicy)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } vVirtualMachineProfile.EvictionPolicy = this.EvictionPolicy; } if (this.IsParameterBound(c => c.MaxPrice)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } if (vVirtualMachineProfile.BillingProfile == null) { vVirtualMachineProfile.BillingProfile = new BillingProfile(); } vVirtualMachineProfile.BillingProfile.MaxPrice = this.MaxPrice; } if (this.TerminateScheduledEvents.IsPresent) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } if (vVirtualMachineProfile.ScheduledEventsProfile == null) { vVirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); } if (vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) { vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); } vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.Enable = this.TerminateScheduledEvents.IsPresent; } if (this.IsParameterBound(c => c.TerminateScheduledEventNotBeforeTimeoutInMinutes)) { if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } if (vVirtualMachineProfile.ScheduledEventsProfile == null) { vVirtualMachineProfile.ScheduledEventsProfile = new ScheduledEventsProfile(); } if (vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile == null) { vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile = new TerminateNotificationProfile(); } vVirtualMachineProfile.ScheduledEventsProfile.TerminateNotificationProfile.NotBeforeTimeout = XmlConvert.ToString(new TimeSpan(0, this.TerminateScheduledEventNotBeforeTimeoutInMinutes, 0)); } if (this.IsParameterBound(c => c.ProximityPlacementGroupId)) { if (vProximityPlacementGroup == null) { vProximityPlacementGroup = new SubResource(); } vProximityPlacementGroup.Id = this.ProximityPlacementGroupId; } if (this.EnableUltraSSD.IsPresent) { if (vAdditionalCapabilities == null) { vAdditionalCapabilities = new AdditionalCapabilities(true); } } if (this.IsParameterBound(c => c.ScaleInPolicy)) { if (vScaleInPolicy == null) { vScaleInPolicy = new ScaleInPolicy(); } vScaleInPolicy.Rules = this.ScaleInPolicy; } if (this.IsParameterBound(c => c.IdentityType)) { if (vIdentity == null) { vIdentity = new VirtualMachineScaleSetIdentity(); } vIdentity.Type = this.IdentityType; } if (this.IsParameterBound(c => c.IdentityId)) { if (vIdentity == null) { vIdentity = new VirtualMachineScaleSetIdentity(); } vIdentity.UserAssignedIdentities = new Dictionary <string, VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue>(); foreach (var id in this.IdentityId) { vIdentity.UserAssignedIdentities.Add(id, new VirtualMachineScaleSetIdentityUserAssignedIdentitiesValue()); } } if (this.IsParameterBound(c => c.EdgeZone)) { vExtendedLocation = new CM.PSExtendedLocation(this.EdgeZone); } if (this.IsParameterBound(c => c.UserData)) { if (!ValidateBase64EncodedString.ValidateStringIsBase64Encoded(this.UserData)) { this.UserData = ValidateBase64EncodedString.EncodeStringToBase64(this.UserData); this.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); } if (vVirtualMachineProfile == null) { vVirtualMachineProfile = new PSVirtualMachineScaleSetVMProfile(); } vVirtualMachineProfile.UserData = this.UserData; } var vVirtualMachineScaleSet = new PSVirtualMachineScaleSet { Overprovision = this.IsParameterBound(c => c.Overprovision) ? this.Overprovision : (bool?)null, DoNotRunExtensionsOnOverprovisionedVMs = this.SkipExtensionsOnOverprovisionedVMs.IsPresent ? true : (bool?)null, SinglePlacementGroup = this.IsParameterBound(c => c.SinglePlacementGroup) ? this.SinglePlacementGroup : (bool?)null, ZoneBalance = this.ZoneBalance.IsPresent ? true : (bool?)null, PlatformFaultDomainCount = this.IsParameterBound(c => c.PlatformFaultDomainCount) ? this.PlatformFaultDomainCount : (int?)null, Zones = this.IsParameterBound(c => c.Zone) ? this.Zone : null, Location = this.IsParameterBound(c => c.Location) ? this.Location : null, ExtendedLocation = vExtendedLocation, Tags = this.IsParameterBound(c => c.Tag) ? this.Tag.Cast <DictionaryEntry>().ToDictionary(ht => (string)ht.Key, ht => (string)ht.Value) : null, Sku = vSku, Plan = vPlan, UpgradePolicy = vUpgradePolicy, AutomaticRepairsPolicy = vAutomaticRepairsPolicy, VirtualMachineProfile = vVirtualMachineProfile, ProximityPlacementGroup = vProximityPlacementGroup, AdditionalCapabilities = vAdditionalCapabilities, ScaleInPolicy = vScaleInPolicy, Identity = vIdentity, OrchestrationMode = this.IsParameterBound(c => c.OrchestrationMode) ? this.OrchestrationMode : null, SpotRestorePolicy = this.IsParameterBound(c => c.EnableSpotRestore) ? new SpotRestorePolicy(true, this.SpotRestoreTimeout) : null }; WriteObject(vVirtualMachineScaleSet); }
public override void ExecuteCmdlet() { if (this.IsParameterBound(c => c.UserData)) { if (!ValidateBase64EncodedString.ValidateStringIsBase64Encoded(this.UserData)) { this.UserData = ValidateBase64EncodedString.EncodeStringToBase64(this.UserData); this.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); } } base.ExecuteCmdlet(); switch (ParameterSetName) { case SimpleParameterSet: this.StartAndWait(SimpleParameterSetExecuteCmdlet); break; default: ExecuteClientAction(() => { if (ShouldProcess(this.VMScaleSetName, VerbsCommon.New)) { string resourceGroupName = this.ResourceGroupName; string vmScaleSetName = this.VMScaleSetName; VirtualMachineScaleSet parameters = new VirtualMachineScaleSet(); ComputeAutomationAutoMapperProfile.Mapper.Map <PSVirtualMachineScaleSet, VirtualMachineScaleSet>(this.VirtualMachineScaleSet, parameters); if (parameters?.VirtualMachineProfile?.StorageProfile?.ImageReference?.Version?.ToLower() != "latest") { WriteWarning("You are deploying VMSS pinned to a specific image version from Azure Marketplace. \n" + "Consider using \"latest\" as the image version. This allows VMSS to auto upgrade when a newer version is available."); } if (parameters?.OrchestrationMode == "Flexible") { if (parameters?.VirtualMachineProfile?.NetworkProfile?.NetworkInterfaceConfigurations != null) { foreach (var nicConfig in parameters.VirtualMachineProfile.NetworkProfile.NetworkInterfaceConfigurations) { if (nicConfig.IpConfigurations != null) { foreach (var ipConfig in nicConfig.IpConfigurations) { ipConfig.LoadBalancerInboundNatPools = null; } } } } parameters.UpgradePolicy = null; flexibleOrchestrationModeDefaultParameters(parameters); checkFlexibleOrchestrationModeParamsDefaultParamSet(parameters); } // For Cross-tenant RBAC sharing Dictionary <string, List <string> > auxAuthHeader = null; if (!string.IsNullOrEmpty(parameters.VirtualMachineProfile?.StorageProfile?.ImageReference?.Id)) { var resourceId = ResourceId.TryParse(parameters.VirtualMachineProfile?.StorageProfile.ImageReference.Id); if (string.Equals(ComputeStrategy.Namespace, resourceId?.ResourceType?.Namespace, StringComparison.OrdinalIgnoreCase) && string.Equals("galleries", resourceId?.ResourceType?.Provider, StringComparison.OrdinalIgnoreCase) && !string.Equals(this.ComputeClient?.ComputeManagementClient?.SubscriptionId, resourceId?.SubscriptionId, StringComparison.OrdinalIgnoreCase)) { List <string> resourceIds = new List <string>(); resourceIds.Add(parameters.VirtualMachineProfile?.StorageProfile.ImageReference.Id); var auxHeaderDictionary = GetAuxilaryAuthHeaderFromResourceIds(resourceIds); if (auxHeaderDictionary != null && auxHeaderDictionary.Count > 0) { auxAuthHeader = new Dictionary <string, List <string> >(auxHeaderDictionary); } } } // END: For Cross-tenant RBAC sharing VirtualMachineScaleSet result; if (auxAuthHeader != null) { var res = VirtualMachineScaleSetsClient.CreateOrUpdateWithHttpMessagesAsync( resourceGroupName, vmScaleSetName, parameters, auxAuthHeader).GetAwaiter().GetResult(); result = res.Body; } else { result = VirtualMachineScaleSetsClient.CreateOrUpdate(resourceGroupName, vmScaleSetName, parameters); } var psObject = new PSVirtualMachineScaleSet(); ComputeAutomationAutoMapperProfile.Mapper.Map <VirtualMachineScaleSet, PSVirtualMachineScaleSet>(result, psObject); WriteObject(psObject); } }); break; } }
public override void ExecuteCmdlet() { base.ExecuteCmdlet(); ExecuteClientAction(() => { if (ShouldProcess(this.VMScaleSetName, VerbsData.Update)) { string resourceGroupName; string vmScaleSetName; string instanceId; switch (this.ParameterSetName) { case ResourceIdParameterSet: resourceGroupName = GetResourceGroupName(this.ResourceId); vmScaleSetName = GetResourceName(this.ResourceId, "Microsoft.Compute/virtualMachineScaleSets", "virtualMachines"); instanceId = GetInstanceId(this.ResourceId, "Microsoft.Compute/virtualMachineScaleSets", "virtualMachines"); break; case ObjectParameterSet: resourceGroupName = GetResourceGroupName(this.VirtualMachineScaleSetVM.Id); vmScaleSetName = GetResourceName(this.VirtualMachineScaleSetVM.Id, "Microsoft.Compute/virtualMachineScaleSets", "virtualMachines"); instanceId = GetInstanceId(this.VirtualMachineScaleSetVM.Id, "Microsoft.Compute/virtualMachineScaleSets", "virtualMachines"); break; default: resourceGroupName = this.ResourceGroupName; vmScaleSetName = this.VMScaleSetName; instanceId = this.InstanceId; break; } VirtualMachineScaleSetVM parameters = new VirtualMachineScaleSetVM(); ComputeAutomationAutoMapperProfile.Mapper.Map <PSVirtualMachineScaleSetVM, VirtualMachineScaleSetVM>(this.VirtualMachineScaleSetVM, parameters); if (this.IsParameterBound(c => c.UserData)) { parameters = VirtualMachineScaleSetVMsClient.Get(resourceGroupName, vmScaleSetName, instanceId, UserDataExpand); } else if (this.ParameterSetName != ObjectParameterSet) { parameters = VirtualMachineScaleSetVMsClient.Get(resourceGroupName, vmScaleSetName, instanceId); } if (this.DataDisk != null) { if (parameters.StorageProfile == null) { parameters.StorageProfile = new StorageProfile(); } if (parameters.StorageProfile.DataDisks == null) { parameters.StorageProfile.DataDisks = new List <DataDisk>(); } foreach (var d in this.DataDisk) { parameters.StorageProfile.DataDisks.Add(d); } } if (this.IsParameterBound(c => c.ProtectFromScaleIn)) { if (parameters.ProtectionPolicy == null) { parameters.ProtectionPolicy = new VirtualMachineScaleSetVMProtectionPolicy(); } parameters.ProtectionPolicy.ProtectFromScaleIn = this.ProtectFromScaleIn; } if (this.IsParameterBound(c => c.ProtectFromScaleSetAction)) { if (parameters.ProtectionPolicy == null) { parameters.ProtectionPolicy = new VirtualMachineScaleSetVMProtectionPolicy(); } parameters.ProtectionPolicy.ProtectFromScaleSetActions = this.ProtectFromScaleSetAction; } if (this.IsParameterBound(c => c.UserData)) { if (!ValidateBase64EncodedString.ValidateStringIsBase64Encoded(this.UserData)) { this.UserData = ValidateBase64EncodedString.EncodeStringToBase64(this.UserData); this.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); } parameters.UserData = this.UserData; } var result = VirtualMachineScaleSetVMsClient.Update(resourceGroupName, vmScaleSetName, instanceId, parameters); var psObject = new PSVirtualMachineScaleSetVM(); ComputeAutomationAutoMapperProfile.Mapper.Map <VirtualMachineScaleSetVM, PSVirtualMachineScaleSetVM>(result, psObject); WriteObject(psObject); } }); }
private async Task <ResourceConfig <VirtualMachineScaleSet> > SimpleParameterSetNormalMode() { ImageAndOsType = await _client.UpdateImageAndOsTypeAsync( ImageAndOsType, _cmdlet.ResourceGroupName, _cmdlet.ImageName, Location); // generate a domain name label if it's not specified. _cmdlet.DomainNameLabel = await PublicIPAddressStrategy.UpdateDomainNameLabelAsync( domainNameLabel : _cmdlet.DomainNameLabel, name : _cmdlet.VMScaleSetName, location : Location, client : _client); var resourceGroup = ResourceGroupStrategy.CreateResourceGroupConfig(_cmdlet.ResourceGroupName); var noZones = _cmdlet.Zone == null || _cmdlet.Zone.Count == 0; var publicIpAddress = resourceGroup.CreatePublicIPAddressConfig( name: _cmdlet.PublicIpAddressName, edgeZone: _cmdlet.EdgeZone, domainNameLabel: _cmdlet.DomainNameLabel, allocationMethod: _cmdlet.AllocationMethod, //sku.Basic is not compatible with multiple placement groups sku: (noZones && _cmdlet.SinglePlacementGroup.IsPresent) ? PublicIPAddressStrategy.Sku.Basic : PublicIPAddressStrategy.Sku.Standard, zones: null); var virtualNetwork = resourceGroup.CreateVirtualNetworkConfig( name: _cmdlet.VirtualNetworkName, edgeZone: _cmdlet.EdgeZone, addressPrefix: _cmdlet.VnetAddressPrefix); var subnet = virtualNetwork.CreateSubnet( _cmdlet.SubnetName, _cmdlet.SubnetAddressPrefix); var loadBalancer = resourceGroup.CreateLoadBalancerConfig( name: _cmdlet.LoadBalancerName, //sku.Basic is not compatible with multiple placement groups sku: (noZones && _cmdlet.SinglePlacementGroup.IsPresent) ? LoadBalancerStrategy.Sku.Basic : LoadBalancerStrategy.Sku.Standard); var frontendIpConfiguration = loadBalancer.CreateFrontendIPConfiguration( name: _cmdlet.FrontendPoolName, publicIpAddress: publicIpAddress); var backendAddressPool = loadBalancer.CreateBackendAddressPool( name: _cmdlet.BackendPoolName); if (_cmdlet.BackendPort != null) { var loadBalancingRuleName = _cmdlet.LoadBalancerName; foreach (var backendPort in _cmdlet.BackendPort) { loadBalancer.CreateLoadBalancingRule( name: loadBalancingRuleName + backendPort.ToString(), fronendIpConfiguration: frontendIpConfiguration, backendAddressPool: backendAddressPool, frontendPort: backendPort, backendPort: backendPort); } } _cmdlet.NatBackendPort = ImageAndOsType.UpdatePorts(_cmdlet.NatBackendPort); var inboundNatPoolName = _cmdlet.VMScaleSetName; var PortRangeSize = _cmdlet.InstanceCount * 2; var ports = _cmdlet .NatBackendPort ?.Select((port, i) => Tuple.Create( port, FirstPortRangeStart + i * 2000)) .ToList(); var inboundNatPools = ports ?.Select(p => loadBalancer.CreateInboundNatPool( name: inboundNatPoolName + p.Item1.ToString(), frontendIpConfiguration: frontendIpConfiguration, frontendPortRangeStart: p.Item2, frontendPortRangeEnd: p.Item2 + PortRangeSize, backendPort: p.Item1)) .ToList(); var networkSecurityGroup = noZones ? null : resourceGroup.CreateNetworkSecurityGroupConfig( _cmdlet.VMScaleSetName, _cmdlet.NatBackendPort.Concat(_cmdlet.BackendPort).ToList()); var proximityPlacementGroup = resourceGroup.CreateProximityPlacementGroupSubResourceFunc(_cmdlet.ProximityPlacementGroupId); var hostGroup = resourceGroup.CreateDedicatedHostGroupSubResourceFunc(_cmdlet.HostGroupId); if (_cmdlet.IsParameterBound(c => c.UserData)) { if (!ValidateBase64EncodedString.ValidateStringIsBase64Encoded(_cmdlet.UserData)) { _cmdlet.UserData = ValidateBase64EncodedString.EncodeStringToBase64(_cmdlet.UserData); _cmdlet.WriteInformation(ValidateBase64EncodedString.UserDataEncodeNotification, new string[] { "PSHOST" }); } } return(resourceGroup.CreateVirtualMachineScaleSetConfig( name: _cmdlet.VMScaleSetName, subnet: subnet, backendAdressPool: backendAddressPool, inboundNatPools: inboundNatPools, networkSecurityGroup: networkSecurityGroup, imageAndOsType: ImageAndOsType, adminUsername: _cmdlet.Credential.UserName, adminPassword: new NetworkCredential(string.Empty, _cmdlet.Credential.Password).Password, vmSize: _cmdlet.VmSize, instanceCount: _cmdlet.InstanceCount, upgradeMode: _cmdlet.MyInvocation.BoundParameters.ContainsKey(nameof(UpgradePolicyMode)) ? _cmdlet.UpgradePolicyMode : (UpgradeMode?)null, dataDisks: _cmdlet.DataDiskSizeInGb, zones: _cmdlet.Zone, ultraSSDEnabled: _cmdlet.EnableUltraSSD.IsPresent, identity: _cmdlet.GetVmssIdentityFromArgs(), singlePlacementGroup: _cmdlet.SinglePlacementGroup.IsPresent, proximityPlacementGroup: proximityPlacementGroup, hostGroup: hostGroup, priority: _cmdlet.Priority, evictionPolicy: _cmdlet.EvictionPolicy, maxPrice: _cmdlet.IsParameterBound(c => c.MaxPrice) ? _cmdlet.MaxPrice : (double?)null, scaleInPolicy: _cmdlet.ScaleInPolicy, doNotRunExtensionsOnOverprovisionedVMs: _cmdlet.SkipExtensionsOnOverprovisionedVMs.IsPresent, encryptionAtHost: _cmdlet.EncryptionAtHost.IsPresent, platformFaultDomainCount: _cmdlet.IsParameterBound(c => c.PlatformFaultDomainCount) ? _cmdlet.PlatformFaultDomainCount : (int?)null, edgeZone: _cmdlet.EdgeZone, orchestrationMode: _cmdlet.IsParameterBound(c => c.OrchestrationMode) ? _cmdlet.OrchestrationMode : null, capacityReservationId: _cmdlet.IsParameterBound(c => c.CapacityReservationGroupId) ? _cmdlet.CapacityReservationGroupId : null, userData: _cmdlet.IsParameterBound(c => c.UserData) ? _cmdlet.UserData : null )); }