コード例 #1
0
 internal VirtualMachineScaleSetData(ResourceIdentifier id, string name, ResourceType resourceType, SystemData systemData, IDictionary <string, string> tags, AzureLocation location, ComputeSku sku, ComputePlan plan, ManagedServiceIdentity identity, IList <string> zones, Models.ExtendedLocation extendedLocation, UpgradePolicy upgradePolicy, AutomaticRepairsPolicy automaticRepairsPolicy, VirtualMachineScaleSetVmProfile virtualMachineProfile, string provisioningState, bool?overprovision, bool?doNotRunExtensionsOnOverprovisionedVms, string uniqueId, bool?singlePlacementGroup, bool?zoneBalance, int?platformFaultDomainCount, WritableSubResource proximityPlacementGroup, WritableSubResource hostGroup, AdditionalCapabilities additionalCapabilities, ScaleInPolicy scaleInPolicy, OrchestrationMode?orchestrationMode, SpotRestorePolicy spotRestorePolicy, DateTimeOffset?timeCreated) : base(id, name, resourceType, systemData, tags, location)
 {
     Sku                    = sku;
     Plan                   = plan;
     Identity               = identity;
     Zones                  = zones;
     ExtendedLocation       = extendedLocation;
     UpgradePolicy          = upgradePolicy;
     AutomaticRepairsPolicy = automaticRepairsPolicy;
     VirtualMachineProfile  = virtualMachineProfile;
     ProvisioningState      = provisioningState;
     Overprovision          = overprovision;
     DoNotRunExtensionsOnOverprovisionedVms = doNotRunExtensionsOnOverprovisionedVms;
     UniqueId                 = uniqueId;
     SinglePlacementGroup     = singlePlacementGroup;
     ZoneBalance              = zoneBalance;
     PlatformFaultDomainCount = platformFaultDomainCount;
     ProximityPlacementGroup  = proximityPlacementGroup;
     HostGroup                = hostGroup;
     AdditionalCapabilities   = additionalCapabilities;
     ScaleInPolicy            = scaleInPolicy;
     OrchestrationMode        = orchestrationMode;
     SpotRestorePolicy        = spotRestorePolicy;
     TimeCreated              = timeCreated;
 }
コード例 #2
0
        public VirtualMachineScaleSet CreateVMScaleSet_NoAsyncTracking(
            string rgName,
            string vmssName,
            StorageAccount storageAccount,
            ImageReference imageRef,
            out VirtualMachineScaleSet inputVMScaleSet,
            VirtualMachineScaleSetExtensionProfile extensionProfile = null,
            Action <VirtualMachineScaleSet> vmScaleSetCustomizer    = null,
            bool createWithPublicIpAddress = false,
            bool createWithManagedDisks    = false,
            bool hasDiffDisks          = false,
            bool createWithHealthProbe = false,
            Subnet subnet              = null,
            IList <string> zones       = null,
            int?osDiskSizeInGB         = null,
            string ppgId               = null,
            string machineSizeType     = null,
            bool?enableUltraSSD        = false,
            string diskEncryptionSetId = null,
            AutomaticRepairsPolicy automaticRepairsPolicy = null,
            bool singlePlacementGroup = true)
        {
            try
            {
                var createOrUpdateResponse = CreateVMScaleSetAndGetOperationResponse(rgName,
                                                                                     vmssName,
                                                                                     storageAccount,
                                                                                     imageRef,
                                                                                     out inputVMScaleSet,
                                                                                     extensionProfile,
                                                                                     vmScaleSetCustomizer,
                                                                                     createWithPublicIpAddress,
                                                                                     createWithManagedDisks,
                                                                                     hasDiffDisks,
                                                                                     createWithHealthProbe,
                                                                                     subnet,
                                                                                     zones,
                                                                                     osDiskSizeInGB,
                                                                                     ppgId: ppgId,
                                                                                     machineSizeType: machineSizeType,
                                                                                     enableUltraSSD: enableUltraSSD,
                                                                                     diskEncryptionSetId: diskEncryptionSetId,
                                                                                     automaticRepairsPolicy: automaticRepairsPolicy,
                                                                                     singlePlacementGroup: singlePlacementGroup);

                var getResponse = m_CrpClient.VirtualMachineScaleSets.Get(rgName, vmssName);

                return(getResponse);
            }
            catch
            {
                // TODO: It is better to issue Delete and forget.
                m_ResourcesClient.ResourceGroups.Delete(rgName);
                throw;
            }
        }
コード例 #3
0
        public async Task <(VirtualMachineScaleSet, VirtualMachineScaleSet)> CreateVMScaleSet_NoAsyncTracking(
            string rgName,
            string vmssName,
            StorageAccount storageAccount,
            ImageReference imageRef,
            VirtualMachineScaleSetExtensionProfile extensionProfile = null,
            Action <VirtualMachineScaleSet> vmScaleSetCustomizer    = null,
            bool createWithPublicIpAddress = false,
            bool createWithManagedDisks    = false,
            bool hasDiffDisks          = false,
            bool createWithHealthProbe = false,
            Subnet subnet              = null,
            IList <string> zones       = null,
            int?osDiskSizeInGB         = null,
            string ppgId               = null,
            string machineSizeType     = null,
            bool?enableUltraSSD        = false,
            string diskEncryptionSetId = null,
            AutomaticRepairsPolicy automaticRepairsPolicy = null)
        {
            try
            {
                var createOrUpdateResponse = await CreateVMScaleSetAndGetOperationResponse(rgName,
                                                                                           vmssName,
                                                                                           storageAccount,
                                                                                           imageRef,
                                                                                           extensionProfile,
                                                                                           vmScaleSetCustomizer,
                                                                                           createWithPublicIpAddress,
                                                                                           createWithManagedDisks,
                                                                                           hasDiffDisks,
                                                                                           createWithHealthProbe,
                                                                                           subnet,
                                                                                           zones,
                                                                                           osDiskSizeInGB,
                                                                                           ppgId : ppgId,
                                                                                           machineSizeType : machineSizeType,
                                                                                           enableUltraSSD : enableUltraSSD,
                                                                                           diskEncryptionSetId : diskEncryptionSetId,
                                                                                           automaticRepairsPolicy : automaticRepairsPolicy);

                var getResponse = await VirtualMachineScaleSetsOperations.GetAsync(rgName, vmssName);

                return(getResponse, createOrUpdateResponse.Item2);
            }
            catch
            {
                throw;
            }
        }
コード例 #4
0
 public VirtualMachineScaleSet CreateVMScaleSet_NoAsyncTracking(
     string rgName,
     string vmssName,
     StorageAccount storageAccount,
     ImageReference imageRef,
     out VirtualMachineScaleSet inputVMScaleSet,
     VirtualMachineScaleSetExtensionProfile extensionProfile = null,
     Action<VirtualMachineScaleSet> vmScaleSetCustomizer = null,
     bool createWithPublicIpAddress = false,
     bool createWithManagedDisks = false,
     bool hasDiffDisks = false,
     bool createWithHealthProbe = false,
     Subnet subnet = null,
     IList<string> zones = null,
     int? osDiskSizeInGB = null,
     string ppgId = null,
     string machineSizeType = null,
     bool? enableUltraSSD = false,
     string diskEncryptionSetId = null,
     AutomaticRepairsPolicy automaticRepairsPolicy = null,
     bool? encryptionAtHostEnabled = null,)
コード例 #5
0
 internal VirtualMachineScaleSetData(ResourceIdentifier id, string name, ResourceType type, IDictionary <string, string> tags, Location location, Models.Sku sku, Models.Plan plan, ResourceIdentity identity, IList <string> zones, ExtendedLocation extendedLocation, UpgradePolicy upgradePolicy, AutomaticRepairsPolicy automaticRepairsPolicy, VirtualMachineScaleSetVMProfile virtualMachineProfile, string provisioningState, bool?overprovision, bool?doNotRunExtensionsOnOverprovisionedVMs, string uniqueId, bool?singlePlacementGroup, bool?zoneBalance, int?platformFaultDomainCount, WritableSubResource proximityPlacementGroup, WritableSubResource hostGroup, AdditionalCapabilities additionalCapabilities, ScaleInPolicy scaleInPolicy, OrchestrationMode?orchestrationMode) : base(id, name, type, tags, location)
 {
     Sku                    = sku;
     Plan                   = plan;
     Identity               = identity;
     Zones                  = zones;
     ExtendedLocation       = extendedLocation;
     UpgradePolicy          = upgradePolicy;
     AutomaticRepairsPolicy = automaticRepairsPolicy;
     VirtualMachineProfile  = virtualMachineProfile;
     ProvisioningState      = provisioningState;
     Overprovision          = overprovision;
     DoNotRunExtensionsOnOverprovisionedVMs = doNotRunExtensionsOnOverprovisionedVMs;
     UniqueId                 = uniqueId;
     SinglePlacementGroup     = singlePlacementGroup;
     ZoneBalance              = zoneBalance;
     PlatformFaultDomainCount = platformFaultDomainCount;
     ProximityPlacementGroup  = proximityPlacementGroup;
     HostGroup                = hostGroup;
     AdditionalCapabilities   = additionalCapabilities;
     ScaleInPolicy            = scaleInPolicy;
     OrchestrationMode        = orchestrationMode;
 }
コード例 #6
0
        private async Task <(VirtualMachineScaleSet, VirtualMachineScaleSet)> CreateVMScaleSetAndGetOperationResponse(
            string rgName,
            string vmssName,
            StorageAccount storageAccount,
            ImageReference imageRef,
            VirtualMachineScaleSetExtensionProfile extensionProfile = null,
            Action <VirtualMachineScaleSet> vmScaleSetCustomizer    = null,
            bool createWithPublicIpAddress = false,
            bool createWithManagedDisks    = false,
            bool hasDiffDisks          = false,
            bool createWithHealthProbe = false,
            Subnet subnet              = null,
            IList <string> zones       = null,
            int?osDiskSizeInGB         = null,
            string ppgId               = null,
            string machineSizeType     = null,
            bool?enableUltraSSD        = false,
            string diskEncryptionSetId = null,
            AutomaticRepairsPolicy automaticRepairsPolicy = null)
        {
            // Create the resource Group, it might have been already created during StorageAccount creation.
            var resourceGroup = await ResourceGroupsOperations.CreateOrUpdateAsync(
                rgName,
                new ResourceGroup(m_location));

            var getPublicIpAddressResponse = createWithPublicIpAddress ? null : await CreatePublicIP(rgName);

            var subnetResponse = subnet ?? await CreateVNET(rgName);

            var nicResponse = await CreateNIC(
                rgName,
                subnetResponse,
                getPublicIpAddressResponse != null?getPublicIpAddressResponse.IpAddress : null);

            var loadBalancer = ((getPublicIpAddressResponse != null && createWithHealthProbe) ?
                                (await CreatePublicLoadBalancerWithProbe(rgName, getPublicIpAddressResponse)) : null);

            Assert.True(createWithManagedDisks || storageAccount != null);
            var inputVMScaleSet = CreateDefaultVMScaleSetInput(rgName, storageAccount?.Name, imageRef, subnetResponse.Id, hasManagedDisks: createWithManagedDisks,
                                                               healthProbeId: loadBalancer?.Probes?.FirstOrDefault()?.Id,
                                                               loadBalancerBackendPoolId: loadBalancer?.BackendAddressPools?.FirstOrDefault()?.Id, zones: zones, osDiskSizeInGB: osDiskSizeInGB,
                                                               machineSizeType: machineSizeType, enableUltraSSD: enableUltraSSD, diskEncryptionSetId: diskEncryptionSetId, automaticRepairsPolicy: automaticRepairsPolicy);

            if (vmScaleSetCustomizer != null)
            {
                vmScaleSetCustomizer(inputVMScaleSet);
            }

            if (hasDiffDisks)
            {
                VirtualMachineScaleSetOSDisk osDisk = new VirtualMachineScaleSetOSDisk(DiskCreateOptionTypes.FromImage);
                osDisk.Caching          = CachingTypes.ReadOnly;
                osDisk.DiffDiskSettings = new DiffDiskSettings
                {
                    Option = "Local",
                    //TODO the value of "Placement" may not be given
                    //Placement = DiffDiskPlacement.CacheDisk
                };
                inputVMScaleSet.VirtualMachineProfile.StorageProfile.OsDisk = osDisk;
            }

            inputVMScaleSet.VirtualMachineProfile.ExtensionProfile = extensionProfile;

            if (ppgId != null)
            {
                inputVMScaleSet.ProximityPlacementGroup = new Azure.ResourceManager.Compute.Models.SubResource()
                {
                    Id = ppgId
                };
            }

            VirtualMachineScaleSet createOrUpdateResponse = null;

            try
            {
                createOrUpdateResponse = await WaitForCompletionAsync(await VirtualMachineScaleSetsOperations.StartCreateOrUpdateAsync(rgName, vmssName, inputVMScaleSet));

                Assert.True(createOrUpdateResponse.Name == vmssName);
                Assert.True(createOrUpdateResponse.Location.ToLower() == inputVMScaleSet.Location.ToLower().Replace(" ", ""));
            }
            catch (Exception e)
            {
                if (e.Message.Contains("the allotted time"))
                {
                    createOrUpdateResponse = await VirtualMachineScaleSetsOperations.GetAsync(rgName, vmssName);
                }
                else
                {
                    throw;
                }
            }

            ValidateVMScaleSet(inputVMScaleSet, createOrUpdateResponse, createWithManagedDisks, ppgId: ppgId);

            return(createOrUpdateResponse, inputVMScaleSet);
        }
コード例 #7
0
        protected VirtualMachineScaleSet CreateDefaultVMScaleSetInput(
            string rgName,
            string storageAccountName,
            ImageReference imageRef,
            string subnetId,
            bool hasManagedDisks             = false,
            string healthProbeId             = null,
            string loadBalancerBackendPoolId = null,
            IList <string> zones             = null,
            int?osDiskSizeInGB         = null,
            string machineSizeType     = null,
            bool?enableUltraSSD        = false,
            string diskEncryptionSetId = null,
            AutomaticRepairsPolicy automaticRepairsPolicy = null)
        {
            // Generate Container name to hold disk VHds
            string containerName = Recording.GenerateAssetName(TestPrefix);
            var    vhdContainer  = "https://" + storageAccountName + ".blob.core.windows.net/" + containerName;
            var    vmssName      = Recording.GenerateAssetName("vmss");
            bool   createOSDisk  = !hasManagedDisks || osDiskSizeInGB != null;

            string vmSize = zones == null?VirtualMachineSizeTypes.StandardA0.ToString() : VirtualMachineSizeTypes.StandardA1V2.ToString();

            var test1      = Recording.GenerateAssetName("vmsstestnetconfig");
            var test2      = Recording.GenerateAssetName("vmsstestnetconfig");
            var vmScaleSet = new VirtualMachineScaleSet(m_location)
            {
                Location = m_location,
                Tags     = new Dictionary <string, string>()
                {
                    { "RG", "rg" }, { "testTag", "1" }
                },
                Sku = new CM.Sku()
                {
                    Capacity = 2,
                    Name     = machineSizeType == null ? vmSize : machineSizeType
                },
                Zones         = zones,
                Overprovision = false,
                UpgradePolicy = new UpgradePolicy()
                {
                    Mode = UpgradeMode.Automatic
                },
                VirtualMachineProfile = new VirtualMachineScaleSetVMProfile()
                {
                    StorageProfile = new VirtualMachineScaleSetStorageProfile()
                    {
                        ImageReference = imageRef,
                        OsDisk         = !createOSDisk ? null : new VirtualMachineScaleSetOSDisk(DiskCreateOptionTypes.FromImage)
                        {
                            Caching       = CachingTypes.None,
                            Name          = hasManagedDisks ? null : "test",
                            VhdContainers = hasManagedDisks ? null : new List <string> {
                                vhdContainer
                            },
                            DiskSizeGB  = osDiskSizeInGB,
                            ManagedDisk = diskEncryptionSetId == null ? null : new VirtualMachineScaleSetManagedDiskParameters()
                            {
                                StorageAccountType = StorageAccountTypes.StandardLRS,
                                DiskEncryptionSet  = new DiskEncryptionSetParameters()
                                {
                                    Id = diskEncryptionSetId
                                }
                            }
                        },
                        DataDisks = !hasManagedDisks ? null : new List <VirtualMachineScaleSetDataDisk>
                        {
                            new VirtualMachineScaleSetDataDisk(1, DiskCreateOptionTypes.Empty)
                            {
                                DiskSizeGB  = 128,
                                ManagedDisk = diskEncryptionSetId == null ? null: new VirtualMachineScaleSetManagedDiskParameters()
                                {
                                    StorageAccountType = StorageAccountTypes.StandardLRS,
                                    DiskEncryptionSet  = new DiskEncryptionSetParameters()
                                    {
                                        Id = diskEncryptionSetId
                                    }
                                }
                            }
                        }
                    },
                    OsProfile = new VirtualMachineScaleSetOSProfile()
                    {
                        ComputerNamePrefix = "test",
                        AdminUsername      = "******",
                        AdminPassword      = PLACEHOLDER,
                        CustomData         = Convert.ToBase64String(Encoding.UTF8.GetBytes("Custom data"))
                    },
                    NetworkProfile = new VirtualMachineScaleSetNetworkProfile()
                    {
                        HealthProbe = healthProbeId == null ? null : new ApiEntityReference
                        {
                            Id = healthProbeId
                        },
                        NetworkInterfaceConfigurations = new List <VirtualMachineScaleSetNetworkConfiguration>()
                        {
                            new VirtualMachineScaleSetNetworkConfiguration(test1)
                            {
                                Primary          = true,
                                IpConfigurations = new List <VirtualMachineScaleSetIPConfiguration>
                                {
                                    new VirtualMachineScaleSetIPConfiguration(test2)
                                    {
                                        Subnet = new Azure.ResourceManager.Compute.Models.ApiEntityReference()
                                        {
                                            Id = subnetId
                                        },
                                        LoadBalancerBackendAddressPools = (loadBalancerBackendPoolId != null) ?
                                                                          new List <Azure.ResourceManager.Compute.Models.SubResource> {
                                            new Azure.ResourceManager.Compute.Models.SubResource(loadBalancerBackendPoolId)
                                        } : null,
                                        ApplicationGatewayBackendAddressPools = new List <Azure.ResourceManager.Compute.Models.SubResource>(),
                                    }
                                }
                            }
                        }
                    },
                    ExtensionProfile = new VirtualMachineScaleSetExtensionProfile(),
                },
                AutomaticRepairsPolicy = automaticRepairsPolicy
            };

            if (enableUltraSSD == true)
            {
                vmScaleSet.AdditionalCapabilities = new AdditionalCapabilities
                {
                    UltraSSDEnabled = true
                };

                VirtualMachineScaleSetOSDisk osDisk = vmScaleSet.VirtualMachineProfile.StorageProfile.OsDisk;
                osDisk.ManagedDisk = osDisk.ManagedDisk ?? new VirtualMachineScaleSetManagedDiskParameters();
                osDisk.ManagedDisk.StorageAccountType = StorageAccountTypes.PremiumLRS;

                foreach (VirtualMachineScaleSetDataDisk dataDisk in vmScaleSet.VirtualMachineProfile.StorageProfile.DataDisks)
                {
                    dataDisk.ManagedDisk = dataDisk.ManagedDisk ?? new VirtualMachineScaleSetManagedDiskParameters();
                    dataDisk.ManagedDisk.StorageAccountType = StorageAccountTypes.UltraSSDLRS;
                }
            }

            return(vmScaleSet);
        }
        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;

            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 (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.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());
                }
            }

            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,
                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,
            };

            WriteObject(vVirtualMachineScaleSet);
        }
コード例 #9
0
        //[Trait("Name", "TestVMScaleSetScenarioOperations_OrchestrationService")]
        public async Task TestVMScaleSetScenarioOperations_OrchestrationService()
        {
            EnsureClientsInitialized(LocationNorthEurope);

            ImageReference imageRef = await GetPlatformVMImage(useWindowsImage : true);

            // Create resource group
            var    rgName             = Recording.GenerateAssetName(TestPrefix);
            var    vmssName           = Recording.GenerateAssetName("vmss");
            string storageAccountName = Recording.GenerateAssetName(TestPrefix);
            VirtualMachineScaleSet inputVMScaleSet;
            var storageAccountOutput = await CreateStorageAccount(rgName, storageAccountName);

            await WaitForCompletionAsync(await VirtualMachineScaleSetsOperations.StartDeleteAsync(rgName, "VMScaleSetDoesNotExist"));

            AutomaticRepairsPolicy automaticRepairsPolicy = new AutomaticRepairsPolicy()
            {
                Enabled = true
            };
            var getTwoVirtualMachineScaleSet = await CreateVMScaleSet_NoAsyncTracking(
                rgName,
                vmssName,
                storageAccountOutput,
                imageRef,
                null,
                (vmScaleSet) =>
            {
                vmScaleSet.Overprovision = false;
            },
                createWithManagedDisks : true,
                createWithPublicIpAddress : false,
                createWithHealthProbe : true,
                automaticRepairsPolicy : automaticRepairsPolicy);

            VirtualMachineScaleSet getResponse = getTwoVirtualMachineScaleSet.Response;

            inputVMScaleSet = getTwoVirtualMachineScaleSet.Input;
            ValidateVMScaleSet(inputVMScaleSet, getResponse, hasManagedDisks: true);
            var getInstanceViewResponse = (await VirtualMachineScaleSetsOperations.GetInstanceViewAsync(rgName, vmssName)).Value;

            Assert.True(getInstanceViewResponse.OrchestrationServices.Count == 1);
            Assert.AreEqual("Running", getInstanceViewResponse.OrchestrationServices[0].ServiceState.ToString());
            Assert.AreEqual("AutomaticRepairs", getInstanceViewResponse.OrchestrationServices[0].ServiceName.ToString());

            ////TODO
            OrchestrationServiceStateInput orchestrationServiceStateInput = new OrchestrationServiceStateInput(OrchestrationServiceNames.AutomaticRepairs, OrchestrationServiceStateAction.Suspend);

            //OrchestrationServiceStateAction orchestrationServiceStateAction = new OrchestrationServiceStateAction();
            await WaitForCompletionAsync(await VirtualMachineScaleSetsOperations.StartSetOrchestrationServiceStateAsync(rgName, vmssName, orchestrationServiceStateInput));

            getInstanceViewResponse = await VirtualMachineScaleSetsOperations.GetInstanceViewAsync(rgName, vmssName);

            Assert.AreEqual(OrchestrationServiceState.Suspended.ToString(), getInstanceViewResponse.OrchestrationServices[0].ServiceState.ToString());

            orchestrationServiceStateInput = new OrchestrationServiceStateInput(OrchestrationServiceNames.AutomaticRepairs, OrchestrationServiceStateAction.Resume);
            await WaitForCompletionAsync(await VirtualMachineScaleSetsOperations.StartSetOrchestrationServiceStateAsync(rgName, vmssName, orchestrationServiceStateInput));

            getInstanceViewResponse = await VirtualMachineScaleSetsOperations.GetInstanceViewAsync(rgName, vmssName);

            Assert.AreEqual(OrchestrationServiceState.Running.ToString(), getInstanceViewResponse.OrchestrationServices[0].ServiceState.ToString());

            await WaitForCompletionAsync(await VirtualMachineScaleSetsOperations.StartDeleteAsync(rgName, vmssName));
        }
コード例 #10
0
        public void TestVMScaleSetScenarioOperations_OrchestrationService()
        {
            string environmentVariable = "AZURE_VM_TEST_LOCATION";
            string region = "northeurope";
            string originalTestLocation = Environment.GetEnvironmentVariable(environmentVariable);

            try
            {
                using (MockContext context = MockContext.Start(this.GetType()))
                {
                    Environment.SetEnvironmentVariable(environmentVariable, region);
                    EnsureClientsInitialized(context);

                    ImageReference imageRef = GetPlatformVMImage(useWindowsImage: true);

                    // Create resource group
                    var    rgName             = TestUtilities.GenerateName(TestPrefix);
                    var    vmssName           = TestUtilities.GenerateName("vmss");
                    string storageAccountName = TestUtilities.GenerateName(TestPrefix);
                    VirtualMachineScaleSet inputVMScaleSet;

                    try
                    {
                        var storageAccountOutput = CreateStorageAccount(rgName, storageAccountName);

                        m_CrpClient.VirtualMachineScaleSets.Delete(rgName, "VMScaleSetDoesNotExist");

                        AutomaticRepairsPolicy automaticRepairsPolicy = new AutomaticRepairsPolicy()
                        {
                            Enabled = true
                        };
                        var getResponse = CreateVMScaleSet_NoAsyncTracking(
                            rgName,
                            vmssName,
                            storageAccountOutput,
                            imageRef,
                            out inputVMScaleSet,
                            null,
                            (vmScaleSet) =>
                        {
                            vmScaleSet.Overprovision = false;
                        },
                            createWithManagedDisks: true,
                            createWithPublicIpAddress: false,
                            createWithHealthProbe: true,
                            automaticRepairsPolicy: automaticRepairsPolicy);

                        ValidateVMScaleSet(inputVMScaleSet, getResponse, hasManagedDisks: true);
                        var getInstanceViewResponse = m_CrpClient.VirtualMachineScaleSets.GetInstanceView(rgName, vmssName);

                        Assert.True(getInstanceViewResponse.OrchestrationServices.Count == 1);
                        Assert.Equal("Running", getInstanceViewResponse.OrchestrationServices[0].ServiceState);
                        Assert.Equal("AutomaticRepairs", getInstanceViewResponse.OrchestrationServices[0].ServiceName);

                        OrchestrationServiceStateInput orchestrationServiceStateInput = new OrchestrationServiceStateInput()
                        {
                            ServiceName = OrchestrationServiceNames.AutomaticRepairs,
                            Action      = OrchestrationServiceStateAction.Suspend
                        };

                        m_CrpClient.VirtualMachineScaleSets.SetOrchestrationServiceState(rgName, vmssName, orchestrationServiceStateInput);

                        getInstanceViewResponse = m_CrpClient.VirtualMachineScaleSets.GetInstanceView(rgName, vmssName);
                        Assert.Equal(OrchestrationServiceState.Suspended.ToString(), getInstanceViewResponse.OrchestrationServices[0].ServiceState);

                        orchestrationServiceStateInput.Action = OrchestrationServiceStateAction.Resume;
                        m_CrpClient.VirtualMachineScaleSets.SetOrchestrationServiceState(rgName, vmssName, orchestrationServiceStateInput);
                        getInstanceViewResponse = m_CrpClient.VirtualMachineScaleSets.GetInstanceView(rgName, vmssName);
                        Assert.Equal(OrchestrationServiceState.Running.ToString(), getInstanceViewResponse.OrchestrationServices[0].ServiceState);

                        m_CrpClient.VirtualMachineScaleSets.Delete(rgName, vmssName);
                    }
                    finally
                    {
                        //Cleanup the created resources. But don't wait since it takes too long, and it's not the purpose
                        //of the test to cover deletion. CSM does persistent retrying over all RG resources.
                        m_ResourcesClient.ResourceGroups.Delete(rgName);
                    }
                }
            }
            finally
            {
                Environment.SetEnvironmentVariable("AZURE_VM_TEST_LOCATION", originalTestLocation);
            }
        }
        internal static VirtualMachineScaleSetData DeserializeVirtualMachineScaleSetData(JsonElement element)
        {
            Optional <Models.Sku>              sku                            = default;
            Optional <Models.Plan>             plan                           = default;
            Optional <ManagedServiceIdentity>  identity                       = default;
            Optional <IList <string> >         zones                          = default;
            Optional <Models.ExtendedLocation> extendedLocation               = default;
            IDictionary <string, string>       tags                           = default;
            AzureLocation                              location               = default;
            ResourceIdentifier                         id                     = default;
            string                                     name                   = default;
            ResourceType                               type                   = default;
            SystemData                                 systemData             = default;
            Optional <UpgradePolicy>                   upgradePolicy          = default;
            Optional <AutomaticRepairsPolicy>          automaticRepairsPolicy = default;
            Optional <VirtualMachineScaleSetVmProfile> virtualMachineProfile  = default;
            Optional <string>                          provisioningState      = default;
            Optional <bool>                            overprovision          = default;
            Optional <bool>                            doNotRunExtensionsOnOverprovisionedVMs = default;
            Optional <string>                          uniqueId                 = default;
            Optional <bool>                            singlePlacementGroup     = default;
            Optional <bool>                            zoneBalance              = default;
            Optional <int>                             platformFaultDomainCount = default;
            Optional <WritableSubResource>             proximityPlacementGroup  = default;
            Optional <WritableSubResource>             hostGroup                = default;
            Optional <AdditionalCapabilities>          additionalCapabilities   = default;
            Optional <ScaleInPolicy>                   scaleInPolicy            = default;
            Optional <OrchestrationMode>               orchestrationMode        = default;
            Optional <SpotRestorePolicy>               spotRestorePolicy        = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("sku"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    sku = Models.Sku.DeserializeSku(property.Value);
                    continue;
                }
                if (property.NameEquals("plan"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    plan = Models.Plan.DeserializePlan(property.Value);
                    continue;
                }
                if (property.NameEquals("identity"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    identity = JsonSerializer.Deserialize <ManagedServiceIdentity>(property.Value.ToString());
                    continue;
                }
                if (property.NameEquals("zones"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    List <string> array = new List <string>();
                    foreach (var item in property.Value.EnumerateArray())
                    {
                        array.Add(item.GetString());
                    }
                    zones = array;
                    continue;
                }
                if (property.NameEquals("extendedLocation"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    extendedLocation = Models.ExtendedLocation.DeserializeExtendedLocation(property.Value);
                    continue;
                }
                if (property.NameEquals("tags"))
                {
                    Dictionary <string, string> dictionary = new Dictionary <string, string>();
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        dictionary.Add(property0.Name, property0.Value.GetString());
                    }
                    tags = dictionary;
                    continue;
                }
                if (property.NameEquals("location"))
                {
                    location = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("id"))
                {
                    id = new ResourceIdentifier(property.Value.GetString());
                    continue;
                }
                if (property.NameEquals("name"))
                {
                    name = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("type"))
                {
                    type = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("systemData"))
                {
                    systemData = JsonSerializer.Deserialize <SystemData>(property.Value.ToString());
                    continue;
                }
                if (property.NameEquals("properties"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        if (property0.NameEquals("upgradePolicy"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            upgradePolicy = UpgradePolicy.DeserializeUpgradePolicy(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("automaticRepairsPolicy"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            automaticRepairsPolicy = AutomaticRepairsPolicy.DeserializeAutomaticRepairsPolicy(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("virtualMachineProfile"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            virtualMachineProfile = VirtualMachineScaleSetVmProfile.DeserializeVirtualMachineScaleSetVmProfile(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("provisioningState"))
                        {
                            provisioningState = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("overprovision"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            overprovision = property0.Value.GetBoolean();
                            continue;
                        }
                        if (property0.NameEquals("doNotRunExtensionsOnOverprovisionedVMs"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            doNotRunExtensionsOnOverprovisionedVMs = property0.Value.GetBoolean();
                            continue;
                        }
                        if (property0.NameEquals("uniqueId"))
                        {
                            uniqueId = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("singlePlacementGroup"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            singlePlacementGroup = property0.Value.GetBoolean();
                            continue;
                        }
                        if (property0.NameEquals("zoneBalance"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            zoneBalance = property0.Value.GetBoolean();
                            continue;
                        }
                        if (property0.NameEquals("platformFaultDomainCount"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            platformFaultDomainCount = property0.Value.GetInt32();
                            continue;
                        }
                        if (property0.NameEquals("proximityPlacementGroup"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            proximityPlacementGroup = JsonSerializer.Deserialize <WritableSubResource>(property0.Value.ToString());
                            continue;
                        }
                        if (property0.NameEquals("hostGroup"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            hostGroup = JsonSerializer.Deserialize <WritableSubResource>(property0.Value.ToString());
                            continue;
                        }
                        if (property0.NameEquals("additionalCapabilities"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            additionalCapabilities = AdditionalCapabilities.DeserializeAdditionalCapabilities(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("scaleInPolicy"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            scaleInPolicy = ScaleInPolicy.DeserializeScaleInPolicy(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("orchestrationMode"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            orchestrationMode = new OrchestrationMode(property0.Value.GetString());
                            continue;
                        }
                        if (property0.NameEquals("spotRestorePolicy"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            spotRestorePolicy = SpotRestorePolicy.DeserializeSpotRestorePolicy(property0.Value);
                            continue;
                        }
                    }
                    continue;
                }
            }
            return(new VirtualMachineScaleSetData(id, name, type, systemData, tags, location, sku.Value, plan.Value, identity, Optional.ToList(zones), extendedLocation.Value, upgradePolicy.Value, automaticRepairsPolicy.Value, virtualMachineProfile.Value, provisioningState.Value, Optional.ToNullable(overprovision), Optional.ToNullable(doNotRunExtensionsOnOverprovisionedVMs), uniqueId.Value, Optional.ToNullable(singlePlacementGroup), Optional.ToNullable(zoneBalance), Optional.ToNullable(platformFaultDomainCount), proximityPlacementGroup, hostGroup, additionalCapabilities.Value, scaleInPolicy.Value, Optional.ToNullable(orchestrationMode), spotRestorePolicy.Value));
        }
コード例 #12
0
        private VirtualMachineScaleSet CreateVMScaleSetAndGetOperationResponse(
            string rgName,
            string vmssName,
            StorageAccount storageAccount,
            ImageReference imageRef,
            out VirtualMachineScaleSet inputVMScaleSet,
            VirtualMachineScaleSetExtensionProfile extensionProfile = null,
            Action <VirtualMachineScaleSet> vmScaleSetCustomizer    = null,
            bool createWithPublicIpAddress = false,
            bool createWithManagedDisks    = false,
            bool hasDiffDisks          = false,
            bool createWithHealthProbe = false,
            Subnet subnet              = null,
            IList <string> zones       = null,
            int?osDiskSizeInGB         = null,
            string ppgId               = null,
            string machineSizeType     = null,
            bool?enableUltraSSD        = false,
            string diskEncryptionSetId = null,
            AutomaticRepairsPolicy automaticRepairsPolicy = null,
            bool?encryptionAtHostEnabled = null,
            bool singlePlacementGroup    = true,
            DiagnosticsProfile bootDiagnosticsProfile = null,
            int?faultDomainCount = null,
            int?capacity         = null,
            string dedicatedHostGroupReferenceId = null,
            string dedicatedHostGroupName        = null,
            string dedicatedHostName             = null,
            string userData = null,
            string capacityReservationGroupReferenceId = null)
        {
            // Create the resource Group, it might have been already created during StorageAccount creation.
            var resourceGroup = m_ResourcesClient.ResourceGroups.CreateOrUpdate(
                rgName,
                new ResourceGroup
            {
                Location = m_location
            });

            var getPublicIpAddressResponse = createWithPublicIpAddress ? null : CreatePublicIP(rgName);

            var subnetResponse = subnet ?? CreateVNET(rgName);

            var nicResponse = CreateNIC(
                rgName,
                subnetResponse,
                getPublicIpAddressResponse != null ? getPublicIpAddressResponse.IpAddress : null);

            var loadBalancer = (getPublicIpAddressResponse != null && createWithHealthProbe) ?
                               CreatePublicLoadBalancerWithProbe(rgName, getPublicIpAddressResponse) : null;

            Assert.True(createWithManagedDisks || storageAccount != null);
            inputVMScaleSet = CreateDefaultVMScaleSetInput(rgName, storageAccount?.Name, imageRef, subnetResponse.Id, hasManagedDisks: createWithManagedDisks,
                                                           healthProbeId: loadBalancer?.Probes?.FirstOrDefault()?.Id,
                                                           loadBalancerBackendPoolId: loadBalancer?.BackendAddressPools?.FirstOrDefault()?.Id, zones: zones, osDiskSizeInGB: osDiskSizeInGB,
                                                           machineSizeType: machineSizeType, enableUltraSSD: enableUltraSSD, diskEncryptionSetId: diskEncryptionSetId, automaticRepairsPolicy: automaticRepairsPolicy,
                                                           bootDiagnosticsProfile: bootDiagnosticsProfile, faultDomainCount: faultDomainCount, capacity: capacity);
            if (vmScaleSetCustomizer != null)
            {
                vmScaleSetCustomizer(inputVMScaleSet);
            }

            if (encryptionAtHostEnabled != null)
            {
                inputVMScaleSet.VirtualMachineProfile.SecurityProfile = new SecurityProfile
                {
                    EncryptionAtHost = encryptionAtHostEnabled.Value
                };
            }

            inputVMScaleSet.VirtualMachineProfile.UserData = userData;

            if (hasDiffDisks)
            {
                VirtualMachineScaleSetOSDisk osDisk = new VirtualMachineScaleSetOSDisk();
                osDisk.Caching          = CachingTypes.ReadOnly;
                osDisk.CreateOption     = DiskCreateOptionTypes.FromImage;
                osDisk.DiffDiskSettings = new DiffDiskSettings {
                    Option    = DiffDiskOptions.Local,
                    Placement = DiffDiskPlacement.CacheDisk
                };
                inputVMScaleSet.VirtualMachineProfile.StorageProfile.OsDisk = osDisk;
            }

            inputVMScaleSet.VirtualMachineProfile.ExtensionProfile = extensionProfile;

            if (ppgId != null)
            {
                inputVMScaleSet.ProximityPlacementGroup = new Microsoft.Azure.Management.Compute.Models.SubResource()
                {
                    Id = ppgId
                };
            }

            if (dedicatedHostGroupReferenceId != null)
            {
                CreateDedicatedHostGroup(rgName, dedicatedHostGroupName, availabilityZone: null);
                CreateDedicatedHost(rgName, dedicatedHostGroupName, dedicatedHostName, "DSv3-Type1");
                inputVMScaleSet.HostGroup = new CM.SubResource()
                {
                    Id = dedicatedHostGroupReferenceId
                };
            }

            if (!string.IsNullOrEmpty(capacityReservationGroupReferenceId))
            {
                inputVMScaleSet.VirtualMachineProfile.CapacityReservation = new CapacityReservationProfile
                {
                    CapacityReservationGroup = new CM.SubResource
                    {
                        Id = capacityReservationGroupReferenceId
                    }
                };
            }

            inputVMScaleSet.SinglePlacementGroup = singlePlacementGroup ? (bool?)null : false;

            VirtualMachineScaleSet createOrUpdateResponse = null;

            try
            {
                createOrUpdateResponse = m_CrpClient.VirtualMachineScaleSets.CreateOrUpdate(rgName, vmssName, inputVMScaleSet);

                Assert.True(createOrUpdateResponse.Name == vmssName);
                Assert.True(createOrUpdateResponse.Location.ToLower() == inputVMScaleSet.Location.ToLower().Replace(" ", ""));
            }
            catch (CloudException e)
            {
                if (e.Message.Contains("the allotted time"))
                {
                    createOrUpdateResponse = m_CrpClient.VirtualMachineScaleSets.Get(rgName, vmssName);
                }
                else
                {
                    throw;
                }
            }

            ValidateVMScaleSet(inputVMScaleSet, createOrUpdateResponse, createWithManagedDisks, ppgId: ppgId, dedicatedHostGroupReferenceId: dedicatedHostGroupReferenceId);

            return(createOrUpdateResponse);
        }
コード例 #13
0
        public VirtualMachineScaleSet CreateVMScaleSet_NoAsyncTracking(
            string rgName,
            string vmssName,
            StorageAccount storageAccount,
            ImageReference imageRef,
            out VirtualMachineScaleSet inputVMScaleSet,
            VirtualMachineScaleSetExtensionProfile extensionProfile = null,
            Action <VirtualMachineScaleSet> vmScaleSetCustomizer    = null,
            bool createWithPublicIpAddress = false,
            bool createWithManagedDisks    = false,
            bool hasDiffDisks          = false,
            bool createWithHealthProbe = false,
            Subnet subnet              = null,
            IList <string> zones       = null,
            int?osDiskSizeInGB         = null,
            string ppgId               = null,
            string machineSizeType     = null,
            bool?enableUltraSSD        = false,
            string diskEncryptionSetId = null,
            AutomaticRepairsPolicy automaticRepairsPolicy = null,
            bool?encryptionAtHostEnabled = null,
            bool singlePlacementGroup    = true,
            DiagnosticsProfile bootDiagnosticsProfile = null,
            int?faultDomainCount = null,
            int?capacity         = null,
            string dedicatedHostGroupReferenceId = null,
            string dedicatedHostGroupName        = null,
            string dedicatedHostName             = null,
            string userData = null,
            string capacityReservationGroupReferenceId            = null,
            VirtualMachineScaleSetHardwareProfile hardwareProfile = null)
        {
            try
            {
                var createOrUpdateResponse = CreateVMScaleSetAndGetOperationResponse(rgName,
                                                                                     vmssName,
                                                                                     storageAccount,
                                                                                     imageRef,
                                                                                     out inputVMScaleSet,
                                                                                     extensionProfile,
                                                                                     vmScaleSetCustomizer,
                                                                                     createWithPublicIpAddress,
                                                                                     createWithManagedDisks,
                                                                                     hasDiffDisks,
                                                                                     createWithHealthProbe,
                                                                                     subnet,
                                                                                     zones,
                                                                                     osDiskSizeInGB,
                                                                                     ppgId: ppgId,
                                                                                     machineSizeType: machineSizeType,
                                                                                     enableUltraSSD: enableUltraSSD,
                                                                                     diskEncryptionSetId: diskEncryptionSetId,
                                                                                     automaticRepairsPolicy: automaticRepairsPolicy,
                                                                                     encryptionAtHostEnabled: encryptionAtHostEnabled,
                                                                                     singlePlacementGroup: singlePlacementGroup,
                                                                                     bootDiagnosticsProfile: bootDiagnosticsProfile,
                                                                                     faultDomainCount: faultDomainCount,
                                                                                     capacity: capacity,
                                                                                     dedicatedHostGroupReferenceId: dedicatedHostGroupReferenceId,
                                                                                     dedicatedHostGroupName: dedicatedHostGroupName,
                                                                                     dedicatedHostName: dedicatedHostName,
                                                                                     userData: userData,
                                                                                     capacityReservationGroupReferenceId: capacityReservationGroupReferenceId,
                                                                                     hardwareProfile: hardwareProfile);

                var getResponse = m_CrpClient.VirtualMachineScaleSets.Get(rgName, vmssName);

                return(getResponse);
            }
            catch
            {
                // TODO: It is better to issue Delete and forget.
                m_ResourcesClient.ResourceGroups.Delete(rgName);
                throw;
            }
        }