/// <summary>
        /// Retrieves the encryption extension status from the extension instance view.
        /// An error observable will be returned if
        /// 1. extension is not installed
        /// 2. extension is not provisioned successfully
        /// 2. extension status could be retrieved (either not found or empty).
        /// </summary>
        /// <param name="statusEmptyErrorMessage">The error message to emit if unable to locate the status.</param>
        /// <return>An observable that emits status message.</return>
        ///GENMHASH:5D5D4450A8A3676D4AB254F68D0D6E6F:FD676570747D9407B4E5BA65CEA5012A
        private async Task <string> RetrieveEncryptionExtensionStatusStringAsync(string statusEmptyErrorMessage, CancellationToken cancellationToken = default(CancellationToken))
        {
            IVirtualMachineExtension encryptionExtension = await GetEncryptionExtensionInstalledInVMAsync(cancellationToken);

            if (encryptionExtension == null)
            {
                throw new Exception(ERROR_ENCRYPTION_EXTENSION_NOT_FOUND);
            }
            if (!encryptionExtension.ProvisioningState.Equals("Succeeded", StringComparison.OrdinalIgnoreCase))
            {
                throw new Exception(string.Format(ERROR_NON_SUCCESS_PROVISIONING_STATE, encryptionExtension.ProvisioningState));
            }
            VirtualMachineExtensionInstanceView instanceView = await encryptionExtension.GetInstanceViewAsync(cancellationToken);

            if (instanceView == null ||
                instanceView.Statuses == null ||
                instanceView.Statuses.Count == 0)
            {
                throw new Exception(ERROR_EXPECTED_ENCRYPTION_EXTENSION_STATUS_NOT_FOUND);
            }
            string extensionStatus = instanceView.Statuses[0].Message;

            if (string.IsNullOrEmpty(extensionStatus))
            {
                throw new Exception(statusEmptyErrorMessage);
            }
            return(extensionStatus);
        }
示例#2
0
 private void ValidateVMExtensionInstanceView(VirtualMachineExtensionInstanceView vmExtInstanceView)
 {
     Assert.NotNull(vmExtInstanceView);
     Assert.NotNull(vmExtInstanceView.Statuses[0].DisplayStatus);
     Assert.NotNull(vmExtInstanceView.Statuses[0].Code);
     Assert.NotNull(vmExtInstanceView.Statuses[0].Level);
     Assert.NotNull(vmExtInstanceView.Statuses[0].Message);
 }
 /// <summary>
 /// The instance view status collection associated with the provided encryption extension.
 /// </summary>
 /// <param name="instanceView">The extension instance view.</param>
 /// <return>Status collection.</return>
 internal static IList <InstanceViewStatus> InstanceViewStatuses(VirtualMachineExtensionInstanceView instanceView)
 {
     if (instanceView == null ||
         instanceView.Statuses == null)
     {
         return(new List <InstanceViewStatus>());
     }
     return(instanceView.Statuses);
 }
        /// <summary>
        /// Gets the encryption progress message.
        /// </summary>
        /// <param name="instanceView">Encryption extension instance view.</param>
        /// <return>The encryption progress message.</return>
        internal static string ProgressMessage(VirtualMachineExtensionInstanceView instanceView)
        {
            IList <InstanceViewStatus> statuses = InstanceViewStatuses(instanceView);

            if (statuses.Count == 0)
            {
                return(null);
            }
            return(statuses[0].Message);
        }
示例#5
0
 internal VirtualMachineExtensionData(ResourceIdentifier id, string name, ResourceType type, IDictionary <string, string> tags, AzureLocation location, string forceUpdateTag, string publisher, string typePropertiesType, string typeHandlerVersion, bool?autoUpgradeMinorVersion, bool?enableAutomaticUpgrade, object settings, object protectedSettings, string provisioningState, VirtualMachineExtensionInstanceView instanceView) : base(id, name, type, tags, location)
 {
     ForceUpdateTag          = forceUpdateTag;
     Publisher               = publisher;
     TypePropertiesType      = typePropertiesType;
     TypeHandlerVersion      = typeHandlerVersion;
     AutoUpgradeMinorVersion = autoUpgradeMinorVersion;
     EnableAutomaticUpgrade  = enableAutomaticUpgrade;
     Settings          = settings;
     ProtectedSettings = protectedSettings;
     ProvisioningState = provisioningState;
     InstanceView      = instanceView;
 }
        /// <return>The instance view status collection associated with the encryption extension.</return>
        ///GENMHASH:DF6D090576A3266E52582EE3F48781B1:FE003BD6635A94757D4D94620D2271C0
        private IList <Models.InstanceViewStatus> InstanceViewStatuses()
        {
            if (!HasEncryptionExtension())
            {
                return(new List <InstanceViewStatus>());
            }
            VirtualMachineExtensionInstanceView instanceView = this.encryptionExtension.InstanceView;

            if (instanceView == null ||
                instanceView.Statuses == null)
            {
                return(new List <InstanceViewStatus>());
            }
            return(instanceView.Statuses);
        }
示例#7
0
 internal VirtualMachineExtensionData(ResourceIdentifier id, string name, ResourceType resourceType, SystemData systemData, IDictionary <string, string> tags, AzureLocation location, string forceUpdateTag, string publisher, string extensionType, string typeHandlerVersion, bool?autoUpgradeMinorVersion, bool?enableAutomaticUpgrade, BinaryData settings, BinaryData protectedSettings, string provisioningState, VirtualMachineExtensionInstanceView instanceView, bool?suppressFailures, BinaryData protectedSettingsFromKeyVault) : base(id, name, resourceType, systemData, tags, location)
 {
     ForceUpdateTag          = forceUpdateTag;
     Publisher               = publisher;
     ExtensionType           = extensionType;
     TypeHandlerVersion      = typeHandlerVersion;
     AutoUpgradeMinorVersion = autoUpgradeMinorVersion;
     EnableAutomaticUpgrade  = enableAutomaticUpgrade;
     Settings                      = settings;
     ProtectedSettings             = protectedSettings;
     ProvisioningState             = provisioningState;
     InstanceView                  = instanceView;
     SuppressFailures              = suppressFailures;
     ProtectedSettingsFromKeyVault = protectedSettingsFromKeyVault;
 }
示例#8
0
 internal VirtualMachineScaleSetVMExtensionData(string id, string name, string type, string forceUpdateTag, string publisher, string typePropertiesType, string typeHandlerVersion, bool?autoUpgradeMinorVersion, bool?enableAutomaticUpgrade, object settings, object protectedSettings, string provisioningState, VirtualMachineExtensionInstanceView instanceView) : base(id)
 {
     Name                    = name;
     Type                    = type;
     ForceUpdateTag          = forceUpdateTag;
     Publisher               = publisher;
     TypePropertiesType      = typePropertiesType;
     TypeHandlerVersion      = typeHandlerVersion;
     AutoUpgradeMinorVersion = autoUpgradeMinorVersion;
     EnableAutomaticUpgrade  = enableAutomaticUpgrade;
     Settings                = settings;
     ProtectedSettings       = protectedSettings;
     ProvisioningState       = provisioningState;
     InstanceView            = instanceView;
 }
示例#9
0
 internal VirtualMachineScaleSetVmExtensionData(string id, string name, string resourceType, string forceUpdateTag, string publisher, string typePropertiesType, string typeHandlerVersion, bool?autoUpgradeMinorVersion, bool?enableAutomaticUpgrade, BinaryData settings, BinaryData protectedSettings, string provisioningState, VirtualMachineExtensionInstanceView instanceView, bool?suppressFailures) : base(id)
 {
     Name                    = name;
     ResourceType            = resourceType;
     ForceUpdateTag          = forceUpdateTag;
     Publisher               = publisher;
     TypePropertiesType      = typePropertiesType;
     TypeHandlerVersion      = typeHandlerVersion;
     AutoUpgradeMinorVersion = autoUpgradeMinorVersion;
     EnableAutomaticUpgrade  = enableAutomaticUpgrade;
     Settings                = settings;
     ProtectedSettings       = protectedSettings;
     ProvisioningState       = provisioningState;
     InstanceView            = instanceView;
     SuppressFailures        = suppressFailures;
 }
        /// <summary>
        /// The first sub-status from instance view sub-status collection associated with the provided
        /// encryption extension.
        /// </summary>
        /// <param name="instanceView">The extension instance view.</param>
        /// <return>The first sub-status.</return>
        internal static string InstanceViewFirstSubStatus(VirtualMachineExtensionInstanceView instanceView)
        {
            if (instanceView == null ||
                instanceView.Substatuses == null)
            {
                return(null);
            }
            IList <InstanceViewStatus> instanceViewSubStatuses = instanceView.Substatuses;

            if (instanceViewSubStatuses.Count == 0)
            {
                return(null);
            }

            return(instanceViewSubStatuses[0].Message);
        }
        /// <summary>
        /// Retrieves the operating system disk encryption status from the given instance view.
        /// </summary>
        /// <param name="instanceView">Encryption extension instance view.</param>
        /// <return>Os disk status.</return>
        internal static EncryptionStatus OSDiskStatus(VirtualMachineExtensionInstanceView instanceView)
        {
            string subStatusJson = InstanceViewFirstSubStatus(instanceView);

            if (subStatusJson == null)
            {
                return(EncryptionStatus.Unknown);
            }
            JObject jObject = JObject.Parse(subStatusJson);

            if (jObject["os"] == null)
            {
                return(EncryptionStatus.Unknown);
            }
            return(EncryptionStatus.Parse((string)jObject["os"]));
        }
        public async Task <Microsoft.Azure.Management.Compute.Fluent.IDiskVolumeEncryptionMonitor> RefreshAsync(CancellationToken cancellationToken = default(CancellationToken))
        {
            this.virtualMachine = await RetrieveVirtualMachineAsync(cancellationToken);

            if (virtualMachine.InstanceView != null && virtualMachine.InstanceView.Extensions != null)
            {
                foreach (var extension in virtualMachine.InstanceView.Extensions)
                {
                    if (extension.Type != null && extension.Type.ToLower().StartsWith(EncryptionExtensionIdentifier.GetPublisherName().ToLower()) &&
                        extension.Name != null && EncryptionExtensionIdentifier.IsEncryptionTypeName(extension.Name, this.OSType()))
                    {
                        this.extensionInstanceView = extension;
                        break;
                    }
                }
            }
            return(this);
        }
        /// <return>
        /// The first sub-status from instance view sub-status collection associated with the
        /// encryption extension.
        /// </return>
        ///GENMHASH:41E2F45F0E1CC7217B8CEF67918CFBD9:327967FA4D7F005F7016223268CC352F
        private string InstanceViewFirstSubStatus()
        {
            if (!HasEncryptionExtension())
            {
                return(null);
            }
            VirtualMachineExtensionInstanceView instanceView = this.encryptionExtension.InstanceView;

            if (instanceView == null ||
                instanceView.Substatuses == null)
            {
                return(null);
            }
            IList <InstanceViewStatus> instanceViewSubStatuses = instanceView.Substatuses;

            if (instanceViewSubStatuses.Count == 0)
            {
                return(null);
            }
            return(instanceViewSubStatuses[0].Message);
        }
        private string GetExtensionStatusMessage(VirtualMachine vm, bool returnSubstatusMessage = false)
        {
            VirtualMachineExtensionInstanceView extensionInstanceView = this.FindEncryptionExtensionInstanceView(vm);

            if (extensionInstanceView == null)
            {
                throw new KeyNotFoundException(string.Format(CultureInfo.CurrentUICulture, "Encryption extension not found on VM Instance View"));
            }
            if ((extensionInstanceView.Statuses == null) || (extensionInstanceView.Statuses.Count < 1))
            {
                throw new KeyNotFoundException(string.Format(CultureInfo.CurrentUICulture, "Invalid extension status"));
            }
            if (returnSubstatusMessage)
            {
                if ((extensionInstanceView == null) || (extensionInstanceView.Substatuses == null) || (extensionInstanceView.Substatuses.Count < 1))
                {
                    throw new KeyNotFoundException(string.Format(CultureInfo.CurrentUICulture, "Invalid extension substatus"));
                }
                else
                {
                    return(extensionInstanceView.Substatuses[0].Message);
                }
            }
            else
            {
                if (!string.IsNullOrWhiteSpace(extensionInstanceView.Statuses[0].Message))
                {
                    return(extensionInstanceView.Statuses[0].Message);
                }
                else
                {
                    // if message is empty, fall back to display status
                    return(extensionInstanceView.Statuses[0].DisplayStatus);
                }
            }
        }
示例#15
0
        internal static VirtualMachineExtensionData DeserializeVirtualMachineExtensionData(JsonElement element)
        {
            IDictionary <string, string> tags          = default;
            Location           location                = default;
            ResourceIdentifier id                      = default;
            string             name                    = default;
            ResourceType       type                    = default;
            Optional <string>  forceUpdateTag          = default;
            Optional <string>  publisher               = default;
            Optional <string>  type0                   = default;
            Optional <string>  typeHandlerVersion      = default;
            Optional <bool>    autoUpgradeMinorVersion = default;
            Optional <bool>    enableAutomaticUpgrade  = default;
            Optional <object>  settings                = default;
            Optional <object>  protectedSettings       = default;
            Optional <string>  provisioningState       = default;
            Optional <VirtualMachineExtensionInstanceView> instanceView = default;

            foreach (var property in element.EnumerateObject())
            {
                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("properties"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        if (property0.NameEquals("forceUpdateTag"))
                        {
                            forceUpdateTag = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("publisher"))
                        {
                            publisher = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("type"))
                        {
                            type0 = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("typeHandlerVersion"))
                        {
                            typeHandlerVersion = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("autoUpgradeMinorVersion"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            autoUpgradeMinorVersion = property0.Value.GetBoolean();
                            continue;
                        }
                        if (property0.NameEquals("enableAutomaticUpgrade"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            enableAutomaticUpgrade = property0.Value.GetBoolean();
                            continue;
                        }
                        if (property0.NameEquals("settings"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            settings = property0.Value.GetObject();
                            continue;
                        }
                        if (property0.NameEquals("protectedSettings"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            protectedSettings = property0.Value.GetObject();
                            continue;
                        }
                        if (property0.NameEquals("provisioningState"))
                        {
                            provisioningState = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("instanceView"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            instanceView = VirtualMachineExtensionInstanceView.DeserializeVirtualMachineExtensionInstanceView(property0.Value);
                            continue;
                        }
                    }
                    continue;
                }
            }
            return(new VirtualMachineExtensionData(id, name, type, tags, location, forceUpdateTag.Value, publisher.Value, type0.Value, typeHandlerVersion.Value, Optional.ToNullable(autoUpgradeMinorVersion), Optional.ToNullable(enableAutomaticUpgrade), settings.Value, protectedSettings.Value, provisioningState.Value, instanceView.Value));
        }
        internal static VirtualMachineScaleSetVmExtensionData DeserializeVirtualMachineScaleSetVmExtensionData(JsonElement element)
        {
            Optional <string>     name                    = default;
            Optional <string>     type                    = default;
            Optional <string>     id                      = default;
            Optional <string>     forceUpdateTag          = default;
            Optional <string>     publisher               = default;
            Optional <string>     type0                   = default;
            Optional <string>     typeHandlerVersion      = default;
            Optional <bool>       autoUpgradeMinorVersion = default;
            Optional <bool>       enableAutomaticUpgrade  = default;
            Optional <BinaryData> settings                = default;
            Optional <BinaryData> protectedSettings       = default;
            Optional <string>     provisioningState       = default;
            Optional <VirtualMachineExtensionInstanceView> instanceView = default;
            Optional <bool> suppressFailures = default;

            foreach (var property in element.EnumerateObject())
            {
                if (property.NameEquals("name"))
                {
                    name = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("type"))
                {
                    type = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("id"))
                {
                    id = property.Value.GetString();
                    continue;
                }
                if (property.NameEquals("properties"))
                {
                    if (property.Value.ValueKind == JsonValueKind.Null)
                    {
                        property.ThrowNonNullablePropertyIsNull();
                        continue;
                    }
                    foreach (var property0 in property.Value.EnumerateObject())
                    {
                        if (property0.NameEquals("forceUpdateTag"))
                        {
                            forceUpdateTag = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("publisher"))
                        {
                            publisher = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("type"))
                        {
                            type0 = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("typeHandlerVersion"))
                        {
                            typeHandlerVersion = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("autoUpgradeMinorVersion"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            autoUpgradeMinorVersion = property0.Value.GetBoolean();
                            continue;
                        }
                        if (property0.NameEquals("enableAutomaticUpgrade"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            enableAutomaticUpgrade = property0.Value.GetBoolean();
                            continue;
                        }
                        if (property0.NameEquals("settings"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            settings = BinaryData.FromString(property0.Value.GetRawText());
                            continue;
                        }
                        if (property0.NameEquals("protectedSettings"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            protectedSettings = BinaryData.FromString(property0.Value.GetRawText());
                            continue;
                        }
                        if (property0.NameEquals("provisioningState"))
                        {
                            provisioningState = property0.Value.GetString();
                            continue;
                        }
                        if (property0.NameEquals("instanceView"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            instanceView = VirtualMachineExtensionInstanceView.DeserializeVirtualMachineExtensionInstanceView(property0.Value);
                            continue;
                        }
                        if (property0.NameEquals("suppressFailures"))
                        {
                            if (property0.Value.ValueKind == JsonValueKind.Null)
                            {
                                property0.ThrowNonNullablePropertyIsNull();
                                continue;
                            }
                            suppressFailures = property0.Value.GetBoolean();
                            continue;
                        }
                    }
                    continue;
                }
            }
            return(new VirtualMachineScaleSetVmExtensionData(id.Value, name.Value, type.Value, forceUpdateTag.Value, publisher.Value, type0.Value, typeHandlerVersion.Value, Optional.ToNullable(autoUpgradeMinorVersion), Optional.ToNullable(enableAutomaticUpgrade), settings.Value, protectedSettings.Value, provisioningState.Value, instanceView.Value, Optional.ToNullable(suppressFailures)));
        }
示例#17
0
 private void ValidateVMExtensionInstanceView(VirtualMachineExtensionInstanceView vmExtInstanceView)
 {
     Assert.NotNull(vmExtInstanceView);
     ValidateInstanceViewStatus(vmExtInstanceView.Statuses[0]);
 }