예제 #1
0
        private VirtualMachineScaleSetStorageProfile GetStorageProfile(VirtualMachineScaleSetStorageProfile existingProfile)
        {
            var osDisk = new VirtualMachineScaleSetOSDisk()
            {
                Caching      = existingProfile.OsDisk.Caching,
                OsType       = existingProfile.OsDisk.OsType,
                CreateOption = existingProfile.OsDisk.CreateOption
            };

            if (existingProfile.OsDisk.ManagedDisk != null)
            {
                osDisk.ManagedDisk = existingProfile.OsDisk.ManagedDisk;
            }
            else
            {
                osDisk.Image         = existingProfile.OsDisk.Image;
                osDisk.Name          = existingProfile.OsDisk.Name;
                osDisk.VhdContainers = CreateStorageAccount().Select(a => string.Concat(a.PrimaryEndpoints.Blob, "vhd")).ToList();
            }

            return(new VirtualMachineScaleSetStorageProfile()
            {
                ImageReference = existingProfile.ImageReference,
                OsDisk = osDisk
            });
        }
        private VirtualMachineScaleSetStorageProfile GetStorageProfile(VirtualMachineScaleSetStorageProfile existingProfile)
        {
            var storageType = existingProfile.OsDisk.ManagedDisk != null
                ? existingProfile.OsDisk.ManagedDisk.StorageAccountType
                : StorageAccountTypes.StandardLRS;

            var osDisk = new VirtualMachineScaleSetOSDisk()
            {
                Caching      = existingProfile.OsDisk.Caching,
                OsType       = existingProfile.OsDisk.OsType,
                CreateOption = existingProfile.OsDisk.CreateOption,
                ManagedDisk  = new VirtualMachineScaleSetManagedDiskParameters()
                {
                    StorageAccountType = storageType
                }
            };

            var targetImageReference = (!string.IsNullOrEmpty(this.VMImagePublisher) ||
                                        !string.IsNullOrEmpty(this.VMImageOffer) ||
                                        !string.IsNullOrEmpty(this.VMImageSku) ||
                                        !string.IsNullOrEmpty(this.VMImageVersion))
                ? new ImageReference(
                null,
                this.VMImagePublisher ?? existingProfile.ImageReference.Publisher,
                this.VMImageOffer ?? existingProfile.ImageReference.Offer,
                this.VMImageSku ?? existingProfile.ImageReference.Sku,
                this.VMImageVersion ?? existingProfile.ImageReference.Version)
                : existingProfile.ImageReference;

            return(new VirtualMachineScaleSetStorageProfile()
            {
                ImageReference = targetImageReference,
                OsDisk = osDisk
            });
        }
 protected string GetVolumeType(string VolumeType, VirtualMachineScaleSetStorageProfile storageProfile)
 {
     if (string.IsNullOrWhiteSpace(VolumeType))
     {
         return(this.CurrentOSType == OperatingSystemTypes.Windows ? "All" : "Data");
     }
     else
     {
         return(VolumeType);
     }
 }
 protected string GetVolumeType(string VolumeType, VirtualMachineScaleSetStorageProfile storageProfile)
 {
     if (string.IsNullOrWhiteSpace(VolumeType))
     {
         return(this.CurrentOSType == OperatingSystemTypes.Windows
             ? AzureVmssDiskEncryptionExtensionContext.VolumeTypeAll
             : AzureVmssDiskEncryptionExtensionContext.VolumeTypeData);
     }
     else
     {
         return(VolumeType);
     }
 }
 internal VirtualMachineScaleSetVMProfile(VirtualMachineScaleSetOSProfile osProfile, VirtualMachineScaleSetStorageProfile storageProfile, VirtualMachineScaleSetNetworkProfile networkProfile, DiagnosticsProfile diagnosticsProfile, VirtualMachineScaleSetExtensionProfile extensionProfile, string licenseType, VirtualMachinePriorityTypes?priority, VirtualMachineEvictionPolicyTypes?evictionPolicy, BillingProfile billingProfile, ScheduledEventsProfile scheduledEventsProfile)
 {
     OsProfile              = osProfile;
     StorageProfile         = storageProfile;
     NetworkProfile         = networkProfile;
     DiagnosticsProfile     = diagnosticsProfile;
     ExtensionProfile       = extensionProfile;
     LicenseType            = licenseType;
     Priority               = priority;
     EvictionPolicy         = evictionPolicy;
     BillingProfile         = billingProfile;
     ScheduledEventsProfile = scheduledEventsProfile;
 }
예제 #6
0
 internal VirtualMachineScaleSetVmProfile(VirtualMachineScaleSetOSProfile osProfile, VirtualMachineScaleSetStorageProfile storageProfile, VirtualMachineScaleSetNetworkProfile networkProfile, SecurityProfile securityProfile, DiagnosticsProfile diagnosticsProfile, VirtualMachineScaleSetExtensionProfile extensionProfile, string licenseType, VirtualMachinePriorityTypes?priority, VirtualMachineEvictionPolicyTypes?evictionPolicy, BillingProfile billingProfile, ScheduledEventsProfile scheduledEventsProfile, string userData, CapacityReservationProfile capacityReservation, ApplicationProfile applicationProfile)
 {
     OsProfile              = osProfile;
     StorageProfile         = storageProfile;
     NetworkProfile         = networkProfile;
     SecurityProfile        = securityProfile;
     DiagnosticsProfile     = diagnosticsProfile;
     ExtensionProfile       = extensionProfile;
     LicenseType            = licenseType;
     Priority               = priority;
     EvictionPolicy         = evictionPolicy;
     BillingProfile         = billingProfile;
     ScheduledEventsProfile = scheduledEventsProfile;
     UserData               = userData;
     CapacityReservation    = capacityReservation;
     ApplicationProfile     = applicationProfile;
 }
예제 #7
0
        private VirtualMachineScaleSetStorageProfile GetStorageProfile(VirtualMachineScaleSetStorageProfile existingProfile)
        {
            var vhds = CreateStorageAccount().Select(a => string.Concat(a.PrimaryEndpoints.Blob, "vhd")).ToList();

            return(new VirtualMachineScaleSetStorageProfile()
            {
                ImageReference = existingProfile.ImageReference,
                OsDisk = new VirtualMachineScaleSetOSDisk()
                {
                    Caching = existingProfile.OsDisk.Caching,
                    OsType = existingProfile.OsDisk.OsType,
                    Image = existingProfile.OsDisk.Image,
                    Name = existingProfile.OsDisk.Name,
                    CreateOption = existingProfile.OsDisk.CreateOption,
                    VhdContainers = vhds
                }
            });
        }
예제 #8
0
        private VirtualMachineScaleSetStorageProfile GetStorageProfile(VirtualMachineScaleSetStorageProfile existingProfile)
        {
            var storageType = existingProfile.OsDisk.ManagedDisk != null
                ? existingProfile.OsDisk.ManagedDisk.StorageAccountType
                : StorageAccountTypes.StandardLRS;

            var osDisk = new VirtualMachineScaleSetOSDisk()
            {
                Caching      = existingProfile.OsDisk.Caching,
                OsType       = existingProfile.OsDisk.OsType,
                CreateOption = existingProfile.OsDisk.CreateOption,
                ManagedDisk  = new VirtualMachineScaleSetManagedDiskParameters()
                {
                    StorageAccountType = storageType
                }
            };

            return(new VirtualMachineScaleSetStorageProfile()
            {
                ImageReference = existingProfile.ImageReference,
                OsDisk = osDisk
            });
        }
예제 #9
0
        private void GetProfiles(
            out VirtualMachineScaleSetExtensionProfile vmExtProfile,
            out VirtualMachineScaleSetOSProfile osProfile,
            out VirtualMachineScaleSetStorageProfile storageProfile,
            out VirtualMachineScaleSetNetworkProfile networkProfile)
        {
            vmExtProfile   = null;
            osProfile      = null;
            storageProfile = null;
            networkProfile = null;

            VirtualMachineScaleSetExtension existingFabricExtension = null;
            VirtualMachineScaleSetExtension diagnosticsVmExt        = null;

            VirtualMachineScaleSetStorageProfile existingStorageProfile = null;
            VirtualMachineScaleSetNetworkProfile existingNetworkProfile = null;
            var vmss = ComputeClient.VirtualMachineScaleSets.List(this.ResourceGroupName);

            if (vmss != null)
            {
                foreach (var vm in vmss)
                {
                    var ext = vm.VirtualMachineProfile.ExtensionProfile.Extensions.FirstOrDefault(
                        e =>
                        string.Equals(
                            e.Type,
                            Constants.ServiceFabricWindowsNodeExtName,
                            StringComparison.OrdinalIgnoreCase));

                    // Try to get Linux ext
                    if (ext == null)
                    {
                        ext = vm.VirtualMachineProfile.ExtensionProfile.Extensions.FirstOrDefault(
                            e =>
                            e.Type.Equals(
                                Constants.ServiceFabricLinuxNodeExtName,
                                StringComparison.OrdinalIgnoreCase));
                    }

                    if (ext != null)
                    {
                        existingFabricExtension = ext;
                        osProfile = vm.VirtualMachineProfile.OsProfile;
                        existingStorageProfile = vm.VirtualMachineProfile.StorageProfile;
                        existingNetworkProfile = vm.VirtualMachineProfile.NetworkProfile;
                    }

                    ext = vm.VirtualMachineProfile.ExtensionProfile.Extensions.FirstOrDefault(
                        e =>
                        e.Type.Equals(Constants.IaaSDiagnostics, StringComparison.OrdinalIgnoreCase));

                    if (ext != null)
                    {
                        diagnosticsVmExt = ext;
                        break;
                    }
                }
            }

            if (existingFabricExtension == null || existingStorageProfile == null || existingNetworkProfile == null)
            {
                throw new InvalidOperationException(ServiceFabricProperties.Resources.VmExtensionNotFound);
            }

            osProfile      = GetOsProfile(osProfile);
            storageProfile = GetStorageProfile(existingStorageProfile);
            networkProfile = CreateNetworkResource(existingNetworkProfile.NetworkInterfaceConfigurations.FirstOrDefault());

            existingFabricExtension.Name = string.Format("{0}_ServiceFabricNode", this.NodeType);
            existingFabricExtension      = GetFabricExtension(existingFabricExtension);

            if (diagnosticsVmExt != null)
            {
                diagnosticsVmExt.Name = string.Format("{0}_VMDiagnosticsVmExt", this.NodeType);
                diagnosticsVmExt      = GetDiagnosticsExtension(diagnosticsVmExt);
                vmExtProfile          = new VirtualMachineScaleSetExtensionProfile()
                {
                    Extensions = new[] { existingFabricExtension, diagnosticsVmExt }
                };
            }
            else
            {
                vmExtProfile = new VirtualMachineScaleSetExtensionProfile()
                {
                    Extensions = new[] { existingFabricExtension }
                };
            }
        }
        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 virtualMachineScaleSetIpConfiguration = new VirtualMachineScaleSetIPConfiguration(test2)
            {
                Subnet = new Azure.ResourceManager.Compute.Models.ApiEntityReference()
                {
                    Id = subnetId
                }
            };

            virtualMachineScaleSetIpConfiguration.ApplicationGatewayBackendAddressPools.Clear();
            if (loadBalancerBackendPoolId != null)
            {
                virtualMachineScaleSetIpConfiguration.LoadBalancerBackendAddressPools.Add(new Models.SubResource(loadBalancerBackendPoolId));
            }

            var virtualMachineScaleSetOsDisk = !createOSDisk ? null : new VirtualMachineScaleSetOSDisk(DiskCreateOptionTypes.FromImage)
            {
                Caching     = CachingTypes.None,
                Name        = hasManagedDisks ? null : "test",
                DiskSizeGB  = osDiskSizeInGB,
                ManagedDisk = diskEncryptionSetId == null ? null : new VirtualMachineScaleSetManagedDiskParameters()
                {
                    StorageAccountType = StorageAccountTypes.StandardLRS,
                    DiskEncryptionSet  = new DiskEncryptionSetParameters()
                    {
                        Id = diskEncryptionSetId
                    }
                }
            };

            if (!hasManagedDisks)
            {
                virtualMachineScaleSetOsDisk?.VhdContainers.Add(vhdContainer);
            }

            var virtualMachineScaleSetStorageProfile = new VirtualMachineScaleSetStorageProfile()
            {
                ImageReference = imageRef,
                OsDisk         = virtualMachineScaleSetOsDisk
            };

            if (hasManagedDisks)
            {
                virtualMachineScaleSetStorageProfile.DataDisks.Add(new VirtualMachineScaleSetDataDisk(1, DiskCreateOptionTypes.Empty)
                {
                    DiskSizeGB  = 128,
                    ManagedDisk = diskEncryptionSetId == null
                        ? null
                        : new VirtualMachineScaleSetManagedDiskParameters()
                    {
                        StorageAccountType = StorageAccountTypes.StandardLRS,
                        DiskEncryptionSet  = new DiskEncryptionSetParameters()
                        {
                            Id = diskEncryptionSetId
                        }
                    }
                });
            }

            var vmScaleSet = new VirtualMachineScaleSet(m_location)
            {
                Location = m_location,
                Tags     = { { "RG", "rg" }, { "testTag", "1" } },
                Sku      = new CM.Sku()
                {
                    Capacity = 2,
                    Name     = machineSizeType == null ? vmSize : machineSizeType
                },
                Overprovision = false,
                UpgradePolicy = new UpgradePolicy()
                {
                    Mode = UpgradeMode.Automatic
                },
                VirtualMachineProfile = new VirtualMachineScaleSetVMProfile()
                {
                    StorageProfile = virtualMachineScaleSetStorageProfile,
                    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 VirtualMachineScaleSetNetworkConfiguration(test1)
                            {
                                Primary          = true,
                                IpConfigurations =
                                {
                                    virtualMachineScaleSetIpConfiguration
                                }
                            }
                        }
                    },
                    ExtensionProfile = new VirtualMachineScaleSetExtensionProfile(),
                },
                AutomaticRepairsPolicy = automaticRepairsPolicy
            };

            vmScaleSet.Zones.InitializeFrom(zones);
            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);
        }
        internal void GetProfiles(
            string clusterId,
            out VirtualMachineScaleSetExtensionProfile vmExtProfile,
            out VirtualMachineScaleSetOSProfile osProfile,
            out VirtualMachineScaleSetStorageProfile storageProfile,
            out VirtualMachineScaleSetNetworkProfile networkProfile)
        {
            vmExtProfile   = null;
            osProfile      = null;
            storageProfile = null;
            networkProfile = null;

            VirtualMachineScaleSetExtension existingFabricExtension = null;
            VirtualMachineScaleSetExtension diagnosticsVmExt        = null;

            VirtualMachineScaleSetStorageProfile existingStorageProfile = null;
            VirtualMachineScaleSetNetworkProfile existingNetworkProfile = null;
            var vmssPages = ComputeClient.VirtualMachineScaleSets.List(this.ResourceGroupName);

            if (vmssPages == null || !vmssPages.Any())
            {
                throw new PSArgumentException(string.Format(
                                                  ServiceFabricProperties.Resources.NoVMSSFoundInRG,
                                                  this.ResourceGroupName));
            }

            do
            {
                if (!vmssPages.Any())
                {
                    break;
                }

                foreach (var vmss in vmssPages)
                {
                    VirtualMachineScaleSetExtension sfExtension;
                    if (TryGetFabricVmExt(vmss.VirtualMachineProfile.ExtensionProfile?.Extensions, out sfExtension))
                    {
                        if (string.Equals(GetClusterIdFromExtension(sfExtension), clusterId, StringComparison.OrdinalIgnoreCase))
                        {
                            WriteVerboseWithTimestamp(string.Format("GetProfiles: Found vmss {0} that corresponds to cluster id {1}", vmss.Id, clusterId));
                            osProfile = vmss.VirtualMachineProfile.OsProfile;
                            existingStorageProfile = vmss.VirtualMachineProfile.StorageProfile;
                            existingNetworkProfile = vmss.VirtualMachineProfile.NetworkProfile;

                            if (existingStorageProfile == null || existingNetworkProfile == null)
                            {
                                WriteVerboseWithTimestamp(string.Format("GetProfiles: Unable to get storageProfile and/or NetworkProfile from vmss id: {0}", vmss.Id));
                                continue;
                            }

                            existingFabricExtension = sfExtension;
                            diagnosticsVmExt        = vmss.VirtualMachineProfile.ExtensionProfile.Extensions.FirstOrDefault(
                                e =>
                                e.Type.Equals(Constants.IaaSDiagnostics, StringComparison.OrdinalIgnoreCase));
                            break;
                        }
                    }
                }
            } while (existingFabricExtension == null && !string.IsNullOrEmpty(vmssPages.NextPageLink) &&
                     (vmssPages = this.ComputeClient.VirtualMachineScaleSets.ListNext(vmssPages.NextPageLink)) != null);

            if (existingFabricExtension == null)
            {
                throw new InvalidOperationException(string.Format(ServiceFabricProperties.Resources.VmExtensionNotFound, ResourceGroupName, clusterId));
            }

            osProfile      = GetOsProfile(osProfile);
            storageProfile = GetStorageProfile(existingStorageProfile);
            networkProfile = CreateNetworkResource(existingNetworkProfile.NetworkInterfaceConfigurations.FirstOrDefault());

            existingFabricExtension.Name = string.Format("{0}_ServiceFabricNode", this.NodeType);
            existingFabricExtension      = GetFabricExtension(existingFabricExtension);

            if (diagnosticsVmExt != null)
            {
                diagnosticsVmExt.Name = string.Format("{0}_VMDiagnosticsVmExt", this.NodeType);
                diagnosticsVmExt      = GetDiagnosticsExtension(diagnosticsVmExt);
                vmExtProfile          = new VirtualMachineScaleSetExtensionProfile()
                {
                    Extensions = new[] { existingFabricExtension, diagnosticsVmExt }
                };
            }
            else
            {
                vmExtProfile = new VirtualMachineScaleSetExtensionProfile()
                {
                    Extensions = new[] { existingFabricExtension }
                };
            }
        }