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);
            }
        }