Пример #1
0
        private PSVmssDiskEncryptionStatusContext GetVmssDiskStatus(string rgName, string vmssName)
        {
            VirtualMachineScaleSetExtension           ext;
            VirtualMachineScaleSetVMExtensionsSummary extSummary;
            PSVmssDiskEncryptionStatusContext         psResult = new PSVmssDiskEncryptionStatusContext
            {
                ResourceGroupName            = rgName,
                VmScaleSetName               = vmssName,
                EncryptionEnabled            = false,
                EncryptionExtensionInstalled = false
            };

            var vmssResult = this.VirtualMachineScaleSetClient.Get(rgName, vmssName);

            if (vmssResult.VirtualMachineProfile == null ||
                vmssResult.VirtualMachineProfile.ExtensionProfile == null ||
                vmssResult.VirtualMachineProfile.ExtensionProfile.Extensions == null ||
                vmssResult.VirtualMachineProfile.ExtensionProfile.Extensions.Count == 0)
            {
                return(psResult);
            }

            SetOSType(vmssResult.VirtualMachineProfile);

            try
            {
                if (string.IsNullOrWhiteSpace(this.ExtensionName))
                {
                    if (this.CurrentOSType == OperatingSystemTypes.Windows)
                    {
                        this.ExtensionName = AzureVmssDiskEncryptionExtensionContext.ExtensionDefaultName;
                    }
                    else
                    {
                        this.ExtensionName = AzureVmssDiskEncryptionExtensionContext.LinuxExtensionDefaultName;
                    }
                }

                ext = vmssResult.VirtualMachineProfile.ExtensionProfile.Extensions.First(
                    e => e.Type.Equals(this.ExtensionName));
            }
            catch (InvalidOperationException)
            {
                return(psResult);
            }

            psResult.EncryptionExtensionInstalled = true;

            psResult.EncryptionSettings = JsonConvert.DeserializeObject <AzureVmssDiskEncryptionExtensionPublicSettings>(
                ext.Settings.ToString());

            if (psResult.EncryptionSettings.EncryptionOperation.Equals(AzureDiskEncryptionExtensionConstants.enableEncryptionOperation, StringComparison.OrdinalIgnoreCase))
            {
                psResult.EncryptionEnabled = true;
            }

            var vmssInstanceView = this.VirtualMachineScaleSetClient.GetInstanceView(rgName, vmssName);

            if (vmssInstanceView.Extensions == null ||
                vmssInstanceView.Extensions.Count == 0)
            {
                return(psResult);
            }

            try
            {
                extSummary = vmssInstanceView.Extensions.First(e => e.Name.Equals(this.ExtensionName));
            }
            catch (InvalidOperationException)
            {
                return(psResult);
            }

            psResult.EncryptionSummary = extSummary.StatusesSummary;

            return(psResult);
        }
        private PSVmssDiskEncryptionStatusContext GetVmssDiskStatus(string rgName, string vmssName)
        {
            VirtualMachineScaleSetExtension           ext;
            VirtualMachineScaleSetVMExtensionsSummary extSummary;
            PSVmssDiskEncryptionStatusContext         psResult = new PSVmssDiskEncryptionStatusContext
            {
                ResourceGroupName            = rgName,
                VmScaleSetName               = vmssName,
                EncryptionEnabled            = false,
                EncryptionExtensionInstalled = false
            };

            var vmssResult = this.VirtualMachineScaleSetClient.Get(rgName, vmssName);

            if (vmssResult.VirtualMachineProfile == null ||
                vmssResult.VirtualMachineProfile.ExtensionProfile == null ||
                vmssResult.VirtualMachineProfile.ExtensionProfile.Extensions == null ||
                vmssResult.VirtualMachineProfile.ExtensionProfile.Extensions.Count == 0)
            {
                return(psResult);
            }

            // retrieve installation status of the extension
            SetOSType(vmssResult.VirtualMachineProfile);
            try
            {
                if (string.IsNullOrWhiteSpace(this.ExtensionName))
                {
                    if (this.CurrentOSType == OperatingSystemTypes.Windows)
                    {
                        this.ExtensionName = AzureVmssDiskEncryptionExtensionContext.ExtensionDefaultName;
                    }
                    else
                    {
                        this.ExtensionName = AzureVmssDiskEncryptionExtensionContext.LinuxExtensionDefaultName;
                    }
                }

                ext = vmssResult.VirtualMachineProfile.ExtensionProfile.Extensions.First(
                    e => e.Type.Equals(this.ExtensionName));
            }
            catch (InvalidOperationException)
            {
                return(psResult);
            }
            psResult.EncryptionExtensionInstalled = true;

            // retrieve public configuration settings for the extension
            psResult.EncryptionSettings = JsonConvert.DeserializeObject <AzureVmssDiskEncryptionExtensionPublicSettings>(
                ext.Settings.ToString());

            // retrieve any status summary for the extension
            var vmssInstanceView = this.VirtualMachineScaleSetClient.GetInstanceView(rgName, vmssName);

            if (vmssInstanceView.Extensions == null ||
                vmssInstanceView.Extensions.Count == 0)
            {
                return(psResult);
            }
            try
            {
                extSummary = vmssInstanceView.Extensions.First(e => e.Name.Equals(this.ExtensionName));
            }
            catch (InvalidOperationException)
            {
                return(psResult);
            }
            psResult.EncryptionSummary = extSummary.StatusesSummary;

            // check if encryption is enabled on any disk in the scale set
            // stop evaluation at the first occurrence of an encrypted disk
            var page = this.VirtualMachineScaleSetVMsClient.List(rgName, vmssName);

            while (!psResult.EncryptionEnabled && page != null)
            {
                foreach (var pageItem in page)
                {
                    if (psResult.EncryptionEnabled)
                    {
                        break;
                    }
                    VirtualMachineScaleSetVMInstanceView vmiv = this.VirtualMachineScaleSetVMsClient.GetInstanceView(rgName, vmssName, pageItem.InstanceId);
                    if (vmiv != null && vmiv.Disks != null)
                    {
                        foreach (DiskInstanceView div in vmiv.Disks)
                        {
                            List <InstanceViewStatus> perDiskEncryptionStatuses = new List <InstanceViewStatus>();
                            bool isEncrypted = false;
                            foreach (InstanceViewStatus ivs in div.Statuses)
                            {
                                if (ivs != null && ivs.Code != null && ivs.Code.StartsWith("EncryptionState"))
                                {
                                    if (!psResult.EncryptionEnabled)
                                    {
                                        isEncrypted = ivs.Code.Equals("EncryptionState/encrypted");
                                    }
                                }
                            }
                            if (isEncrypted)
                            {
                                psResult.EncryptionEnabled = true;
                                break;
                            }
                        }
                    }
                }
                // advance to the next page as needed
                page = (page.NextPageLink != null) ? VirtualMachineScaleSetVMsClient.ListNext(page.NextPageLink) : null;
            }

            return(psResult);
        }