/// <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); }
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); }
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); }
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; }
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; }
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); } } }
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))); }
private void ValidateVMExtensionInstanceView(VirtualMachineExtensionInstanceView vmExtInstanceView) { Assert.NotNull(vmExtInstanceView); ValidateInstanceViewStatus(vmExtInstanceView.Statuses[0]); }