示例#1
0
        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;
            }
        }
示例#4
0
        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);
        }
示例#5
0
        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);
                }
            });
        }
示例#7
0
            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
                           ));
            }