public IDictionary <string, InstanceViewStatus> DiskInstanceViewEncryptionStatuses() { if (virtualMachine.InstanceView == null || virtualMachine.InstanceView.Disks == null) { return(new Dictionary <string, InstanceViewStatus>()); } // var div = new Dictionary <string, InstanceViewStatus>(); foreach (DiskInstanceView diskInstanceView in virtualMachine.InstanceView.Disks) { foreach (InstanceViewStatus status in diskInstanceView.Statuses) { if (EncryptionExtensionIdentifier.GetEncryptionStatusFromCode(status.Code) != null) { div.Add(diskInstanceView.Name, status); break; } } } return(div); }
public EncryptionStatus OSDiskStatus() { if (virtualMachine.InstanceView == null || virtualMachine.InstanceView.Disks == null) { return(EncryptionStatus.Unknown); } foreach (DiskInstanceView diskInstanceView in virtualMachine.InstanceView.Disks) { // encryptionSettings will be set only for OSDisk if (diskInstanceView.EncryptionSettings != null) { foreach (InstanceViewStatus status in diskInstanceView.Statuses) { EncryptionStatus encryptionStatus = EncryptionExtensionIdentifier.GetEncryptionStatusFromCode(status.Code); if (encryptionStatus != null) { return(encryptionStatus); } } break; } } return(EncryptionStatus.Unknown); }
public EncryptionStatus DataDiskStatus() { if (virtualMachine.InstanceView == null || virtualMachine.InstanceView.Disks == null) { return(EncryptionStatus.Unknown); } var encryptStatuses = new HashSet <EncryptionStatus>(); foreach (DiskInstanceView diskInstanceView in virtualMachine.InstanceView.Disks) { // encryptionSettings will be null for data disks and non-null for os disk. if (diskInstanceView.EncryptionSettings != null) { continue; } foreach (InstanceViewStatus status in diskInstanceView.Statuses) { EncryptionStatus encryptionStatus = EncryptionExtensionIdentifier.GetEncryptionStatusFromCode(status.Code); if (encryptionStatus != null) { encryptStatuses.Add(encryptionStatus); break; } } } // Derive an overall encryption status for all data disks. // -------------- if (encryptStatuses.Count == 0) { // Zero disks or disks without encryption state status. return(EncryptionStatus.Unknown); } else if (encryptStatuses.Count == 1) { // Single item indicate all disks are of the same encryption state. // return(encryptStatuses.First()); } // // More than one encryptStatuses indicates multiple disks with different encryption states. // The precedence is UNKNOWN > NOT_MOUNTED > ENCRYPTION_INPROGRESS > VM_RESTART_PENDING if (encryptStatuses.Contains(EncryptionStatus.Unknown)) { return(EncryptionStatus.Unknown); } else if (encryptStatuses.Contains(EncryptionStatus.NotMounted)) { return(EncryptionStatus.NotMounted); } else if (encryptStatuses.Contains(EncryptionStatus.EncryptionInProgress)) { return(EncryptionStatus.EncryptionInProgress); } else if (encryptStatuses.Contains(EncryptionStatus.VMRestartPending)) { return(EncryptionStatus.VMRestartPending); } else { return(EncryptionStatus.Unknown); } }