win_disk_facts: Prefix facts with ansible_ and use raw values (#35326)
* win_disk_facts: Prefix facts with ansible_ * Return raw values in bytes rather than formatted strings * Fix Fail-Json message * Improve examples
This commit is contained in:
parent
466e1b289b
commit
1c8a872648
2 changed files with 137 additions and 141 deletions
|
@ -8,15 +8,6 @@
|
|||
$ErrorActionPreference = "Stop"
|
||||
Set-StrictMode -Version 2.0
|
||||
|
||||
# Create a new result object
|
||||
$result = @{
|
||||
changed = $false
|
||||
ansible_facts = @{
|
||||
total_disks = 0
|
||||
disks = @()
|
||||
}
|
||||
}
|
||||
|
||||
# Functions
|
||||
function Test-Admin {
|
||||
$CurrentUser = New-Object Security.Principal.WindowsPrincipal $([Security.Principal.WindowsIdentity]::GetCurrent())
|
||||
|
@ -27,9 +18,15 @@ function Test-Admin {
|
|||
|
||||
# Check admin rights
|
||||
if (-not (Test-Admin)) {
|
||||
$result.Remove("total_disks")
|
||||
$result.Remove("disks")
|
||||
Fail-Json -obj $result -message "Cmdlet was not started with elevated rights"
|
||||
Fail-Json -obj @{} -message "Module was not started with elevated rights"
|
||||
}
|
||||
|
||||
# Create a new result object
|
||||
$result = @{
|
||||
changed = $false
|
||||
ansible_facts = @{
|
||||
ansible_disks = @()
|
||||
}
|
||||
}
|
||||
|
||||
# Search disks
|
||||
|
@ -39,7 +36,6 @@ try {
|
|||
Fail-Json -obj $result -message "Failed to search the disks on the target: $($_.Exception.Message)"
|
||||
}
|
||||
[int32]$diskcount = $disks | Measure-Object | Select-Object -ExpandProperty Count
|
||||
$result.ansible_facts.total_disks = $diskcount
|
||||
foreach ($disk in $disks) {
|
||||
$disk_info = @{}
|
||||
$pdisk = Get-PhysicalDisk -ErrorAction SilentlyContinue | Where-Object {
|
||||
|
@ -47,8 +43,8 @@ foreach ($disk in $disks) {
|
|||
}
|
||||
if ($pdisk) {
|
||||
$disk_info["physical_disk"] += @{
|
||||
size = "$($pSize = "{0:N3}" -f ($pdisk.Size / 1GB))$($pSize)GiB"
|
||||
allocated_size = "$($pAllocSize = "{0:N3}" -f ($pdisk.AllocatedSize / 1GB))$($pAllocSize)GiB"
|
||||
size = $pdisk.Size
|
||||
allocated_size = $pdisk.AllocatedSize
|
||||
device_id = $pdisk.DeviceId
|
||||
friendly_name = $pdisk.FriendlyName
|
||||
operational_status = $pdisk.OperationalStatus
|
||||
|
@ -56,7 +52,7 @@ foreach ($disk in $disks) {
|
|||
bus_type = $pdisk.BusType
|
||||
usage_type = $pdisk.Usage
|
||||
supported_usages = $pdisk.SupportedUsages
|
||||
spindle_speed = "$($pdisk.SpindleSpeed)rpm"
|
||||
spindle_speed = $pdisk.SpindleSpeed
|
||||
firmware_version = $pdisk.FirmwareVersion
|
||||
physical_location = $pdisk.PhysicalLocation
|
||||
manufacturer = $pdisk.Manufacturer
|
||||
|
@ -77,29 +73,29 @@ foreach ($disk in $disks) {
|
|||
$vdisk = Get-VirtualDisk -PhysicalDisk $pdisk -ErrorAction SilentlyContinue
|
||||
if ($vdisk) {
|
||||
$disk_info["virtual_disk"] += @{
|
||||
size = "$($vDSize = "{0:N3}" -f ($vdisk.Size / 1GB))$($vDSize)GiB"
|
||||
allocated_size = "$($vDAllocSize = "{0:N3}" -f ($vdisk.AllocatedSize / 1GB))$($vDAllocSize)GiB"
|
||||
footprint_on_pool = "$($vDPrint = "{0:N3}" -f ($vdisk.FootprintOnPool / 1GB))$($vDPrint)GiB"
|
||||
size = $vdisk.Size
|
||||
allocated_size = $vdisk.AllocatedSize
|
||||
footprint_on_pool = $vdisk.FootprintOnPool
|
||||
name = $vdisk.name
|
||||
friendly_name = $vdisk.FriendlyName
|
||||
operational_status = $vdisk.OperationalStatus
|
||||
health_status = $vdisk.HealthStatus
|
||||
provisioning_type = $vdisk.ProvisioningType
|
||||
allocation_unit_size = "$($vdisk.AllocationUnitSize / 1KB)KiB"
|
||||
allocation_unit_size = $vdisk.AllocationUnitSize
|
||||
media_type = $vdisk.MediaType
|
||||
parity_layout = $vdisk.ParityLayout
|
||||
access = $vdisk.Access
|
||||
detached_reason = $vdisk.DetachedReason
|
||||
write_cache_size = "$($vdisk.WriteCacheSize)s/byte/bytes/"
|
||||
write_cache_size = $vdisk.WriteCacheSize
|
||||
fault_domain_awareness = $vdisk.FaultDomainAwareness
|
||||
inter_leave = "$($vDLeave = "{0:N3}" -f ($vdisk.InterLeave / 1KB))$($vDLeave)KiB"
|
||||
inter_leave = $vdisk.InterLeave
|
||||
deduplication_enabled = $vdisk.IsDeduplicationEnabled
|
||||
enclosure_aware = $vdisk.IsEnclosureAware
|
||||
manual_attach = $vdisk.IsManualAttach
|
||||
snapshot = $vdisk.IsSnapshot
|
||||
tiered = $vdisk.IsTiered
|
||||
physical_sector_size = "$($vdisk.PhysicalSectorSize / 1KB)KiB"
|
||||
logical_sector_size = "$($vdisk.LogicalSectorSize)s/byte/bytes/"
|
||||
physical_sector_size = $vdisk.PhysicalSectorSize
|
||||
logical_sector_size = $vdisk.LogicalSectorSize
|
||||
available_copies = $vdisk.NumberOfAvailableCopies
|
||||
columns = $vdisk.NumberOfColumns
|
||||
groups = $vdisk.NumberOfGroups
|
||||
|
@ -114,13 +110,13 @@ foreach ($disk in $disks) {
|
|||
}
|
||||
}
|
||||
$disk_info.number = $disk.Number
|
||||
$disk_info.size = "$($disk.Size / 1GB)GiB"
|
||||
$disk_info.size = $disk.Size
|
||||
$disk_info.bus_type = $disk.BusType
|
||||
$disk_info.friendly_name = $disk.FriendlyName
|
||||
$disk_info.partition_style = $disk.PartitionStyle
|
||||
$disk_info.partition_count = $disk.NumberOfPartitions
|
||||
$disk_info.operational_status = $disk.OperationalStatus
|
||||
$disk_info.sector_size = "$($disk.PhysicalSectorSize)s/byte/bytes/"
|
||||
$disk_info.sector_size = $disk.PhysicalSectorSize
|
||||
$disk_info.read_only = $disk.IsReadOnly
|
||||
$disk_info.bootable = $disk.IsBoot
|
||||
$disk_info.system_disk = $disk.IsSystem
|
||||
|
@ -139,7 +135,7 @@ foreach ($disk in $disks) {
|
|||
foreach ($part in $parts) {
|
||||
$partition_info = @{
|
||||
number = $part.PartitionNumber
|
||||
size = "$($pSize = "{0:N3}" -f ($part.Size /1GB))$($pSize)GiB"
|
||||
size = $part.Size
|
||||
type = $part.Type
|
||||
drive_letter = $part.DriveLetter
|
||||
transition_state = $part.TransitionState
|
||||
|
@ -161,8 +157,8 @@ foreach ($disk in $disks) {
|
|||
$partition_info["volumes"] += @()
|
||||
foreach ($vol in $vols) {
|
||||
$volume_info = @{
|
||||
size = "$($vSize = "{0:N3}" -f ($vol.Size / 1GB))$($vSize)GiB"
|
||||
size_remaining = "$($vSizeRe = "{0:N3}" -f ($vol.SizeRemaining / 1GB))$($vSizeRe)GiB"
|
||||
size = $vol.Size
|
||||
size_remaining = $vol.SizeRemaining
|
||||
type = $vol.FileSystem
|
||||
label = $vol.FileSystemLabel
|
||||
health_status = $vol.HealthStatus
|
||||
|
@ -171,11 +167,11 @@ foreach ($disk in $disks) {
|
|||
path = $vol.Path
|
||||
}
|
||||
if ([System.Environment]::OSVersion.Version.Major -ge 10) {
|
||||
$volume_info.allocation_unit_size = "$($vol.AllocationUnitSize /1KB)KiB"
|
||||
$volume_info.allocation_unit_size = $vol.AllocationUnitSize
|
||||
} else {
|
||||
$volPath = ($vol.Path.TrimStart("\\?\")).TrimEnd("\")
|
||||
$BlockSize = (Get-CimInstance -Query "SELECT BlockSize FROM Win32_Volume WHERE DeviceID like '%$volPath%'" -ErrorAction SilentlyContinue | Select-Object BlockSize).BlockSize
|
||||
$volume_info.allocation_unit_size = "$($BlockSize / 1KB)KiB"
|
||||
$volume_info.allocation_unit_size = $BlockSize
|
||||
}
|
||||
$partition_info.volumes += $volume_info
|
||||
}
|
||||
|
@ -183,7 +179,7 @@ foreach ($disk in $disks) {
|
|||
$disk_info.partitions += $partition_info
|
||||
}
|
||||
}
|
||||
$result.ansible_facts.disks += $disk_info
|
||||
$result.ansible_facts.ansible_disks += $disk_info
|
||||
}
|
||||
|
||||
# Return result
|
||||
|
|
|
@ -16,7 +16,7 @@ version_added: '2.5'
|
|||
short_description: Show the attached disks and disk information of the target host
|
||||
description:
|
||||
- With the module you can retrieve and output detailed information about the attached disks of the target and
|
||||
it's volumes and partitions if existent.
|
||||
its volumes and partitions if existent.
|
||||
requirements:
|
||||
- Windows 8.1 / Windows 2012 (NT 6.2)
|
||||
author:
|
||||
|
@ -27,15 +27,29 @@ notes:
|
|||
'''
|
||||
|
||||
EXAMPLES = r'''
|
||||
- name: get disk facts
|
||||
- name: Get disk facts
|
||||
win_disk_facts:
|
||||
- name: output first disk size
|
||||
|
||||
- name: Output first disk size
|
||||
debug:
|
||||
var: ansible_facts.disks[0].size
|
||||
|
||||
- name: get disk facts
|
||||
win_disk_facts:
|
||||
- name: output second disk serial number
|
||||
- name: Convert first system disk into various formats
|
||||
debug:
|
||||
msg: '{{ disksize_gib }} vs {{ disksize_gib_human }}'
|
||||
vars:
|
||||
# Get first system disk
|
||||
disk: '{{ ansible_facts.disks|selectattr("system_disk")|first }}'
|
||||
|
||||
# Show disk size in Gibibytes
|
||||
disksize_gib_human: '{{ disk.size|filesizeformat(True) }}' # returns "223.6 GiB" (human readable)
|
||||
disksize_gib: '{{ (disk.size/1024|pow(3))|round|int }} GiB' # returns "224 GiB" (value in GiB)
|
||||
|
||||
# Show disk size in Gigabytes
|
||||
disksize_gb_human: '{{ disk.size|filesizeformat }}' # returns "240.1 GB" (human readable)
|
||||
disksize_gb: '{{ (disk.size/1000|pow(3))|round|int }} GB' # returns "240 GB" (value in GB)
|
||||
|
||||
- name: Output second disk serial number
|
||||
debug:
|
||||
var: ansible_facts.disks[0].serial_number
|
||||
'''
|
||||
|
@ -46,12 +60,7 @@ ansible_facts:
|
|||
returned: always
|
||||
type: complex
|
||||
contains:
|
||||
total_disks:
|
||||
description: Count of found disks on the target.
|
||||
returned: if disks were found
|
||||
type: int
|
||||
sample: 3
|
||||
disks:
|
||||
ansible_disks:
|
||||
description: Detailed information about one particular disk.
|
||||
returned: if disks were found
|
||||
type: list
|
||||
|
@ -62,10 +71,10 @@ ansible_facts:
|
|||
type: int
|
||||
sample: 0
|
||||
size:
|
||||
description: Size in Gibibyte of the particular disk.
|
||||
description: Size in bytes of the particular disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "100GiB"
|
||||
type: int
|
||||
sample: 227727638528
|
||||
bus_type:
|
||||
description: Bus type of the particular disk.
|
||||
returned: always
|
||||
|
@ -92,30 +101,30 @@ ansible_facts:
|
|||
type: string
|
||||
sample: "Online"
|
||||
sector_size:
|
||||
description: Sector size in byte of the particular disk.
|
||||
description: Sector size in bytes of the particular disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "512s/byte/bytes/"
|
||||
type: int
|
||||
sample: 4096
|
||||
read_only:
|
||||
description: Read only status of the particular disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "true"
|
||||
type: bool
|
||||
sample: True
|
||||
bootable:
|
||||
description: Information whether the particular disk is a bootable disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "false"
|
||||
type: bool
|
||||
sample: False
|
||||
system_disk:
|
||||
description: Information whether the particular disk is a system disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "true"
|
||||
type: bool
|
||||
sample: True
|
||||
clustered:
|
||||
description: Information whether the particular disk is clustered (part of a failover cluster).
|
||||
returned: always
|
||||
type: string
|
||||
sample: "false"
|
||||
type: bool
|
||||
sample: False
|
||||
manufacturer:
|
||||
description: Manufacturer of the particular disk.
|
||||
returned: always
|
||||
|
@ -168,11 +177,10 @@ ansible_facts:
|
|||
sample: 1
|
||||
size:
|
||||
description:
|
||||
- Size in Gibibyte of the particular partition.
|
||||
- Accurate to three decimal places.
|
||||
- Size in bytes of the particular partition.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "0.031GiB"
|
||||
type: int
|
||||
sample: 838860800
|
||||
type:
|
||||
description: Type of the particular partition.
|
||||
returned: always
|
||||
|
@ -186,8 +194,8 @@ ansible_facts:
|
|||
no_default_driveletter:
|
||||
description: Information whether the particular partition has a default drive letter or not.
|
||||
returned: if partition_style property of the particular disk has value "GPT"
|
||||
type: string
|
||||
sample: "true"
|
||||
type: bool
|
||||
sample: True
|
||||
mbr_type:
|
||||
description: mbr type of the particular partition.
|
||||
returned: if partition_style property of the particular disk has value "MBR"
|
||||
|
@ -196,8 +204,8 @@ ansible_facts:
|
|||
active:
|
||||
description: Information whether the particular partition is an active partition or not.
|
||||
returned: if partition_style property of the particular disk has value "MBR"
|
||||
type: string
|
||||
sample: "true"
|
||||
type: bool
|
||||
sample: True
|
||||
drive_letter:
|
||||
description: Drive letter of the particular partition.
|
||||
returned: if existent
|
||||
|
@ -216,13 +224,13 @@ ansible_facts:
|
|||
hidden:
|
||||
description: Information whether the particular partition is hidden or not.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "true"
|
||||
type: bool
|
||||
sample: True
|
||||
shadow_copy:
|
||||
description: Information whether the particular partition is a shadow copy of another partition.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "false"
|
||||
type: bool
|
||||
sample: False
|
||||
guid:
|
||||
description: GUID of the particular partition.
|
||||
returned: if existent
|
||||
|
@ -240,18 +248,16 @@ ansible_facts:
|
|||
contains:
|
||||
size:
|
||||
description:
|
||||
- Size in Gibibyte of the particular volume.
|
||||
- Accurate to three decimal places.
|
||||
- Size in bytes of the particular volume.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "0,342GiB"
|
||||
type: int
|
||||
sample: 838856704
|
||||
size_remaining:
|
||||
description:
|
||||
- Remaining size in Gibibyte of the particular volume.
|
||||
- Accurate to three decimal places.
|
||||
- Remaining size in bytes of the particular volume.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "0,146GiB"
|
||||
type: int
|
||||
sample: 395620352
|
||||
type:
|
||||
description: File system type of the particular volume.
|
||||
returned: always
|
||||
|
@ -273,10 +279,10 @@ ansible_facts:
|
|||
type: string
|
||||
sample: "Fixed"
|
||||
allocation_unit_size:
|
||||
description: Allocation unit size in Kibibyte of the particular volume.
|
||||
description: Allocation unit size in bytes of the particular volume.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "64KiB"
|
||||
type: int
|
||||
sample: 4096
|
||||
object_id:
|
||||
description: Object ID of the particular volume.
|
||||
returned: always
|
||||
|
@ -299,18 +305,16 @@ ansible_facts:
|
|||
sample: "UnSpecified"
|
||||
size:
|
||||
description:
|
||||
- Size in Gibibyte of the particular physical disk.
|
||||
- Accurate to three decimal places.
|
||||
- Size in bytes of the particular physical disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "200GiB"
|
||||
type: int
|
||||
sample: 240057409536
|
||||
allocated_size:
|
||||
description:
|
||||
- Allocated size in Gibibyte of the particular physical disk.
|
||||
- Accurate to three decimal places.
|
||||
- Allocated size in bytes of the particular physical disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "100GiB"
|
||||
type: int
|
||||
sample: 240057409536
|
||||
device_id:
|
||||
description: Device ID of the particular physical disk.
|
||||
returned: always
|
||||
|
@ -359,8 +363,8 @@ ansible_facts:
|
|||
spindle_speed:
|
||||
description: Spindle speed in rpm of the particular physical disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "4294967295rpm"
|
||||
type: int
|
||||
sample: 4294967295
|
||||
physical_location:
|
||||
description: Physical location of the particular physical disk.
|
||||
returned: always
|
||||
|
@ -379,8 +383,8 @@ ansible_facts:
|
|||
can_pool:
|
||||
description: Information whether the particular physical disk can be added to a storage pool.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "false"
|
||||
type: bool
|
||||
sample: False
|
||||
cannot_pool_reason:
|
||||
description: Information why the particular physical disk can not be added to a storage pool.
|
||||
returned: if can_pool property has value false
|
||||
|
@ -389,13 +393,13 @@ ansible_facts:
|
|||
indication_enabled:
|
||||
description: Information whether indication is enabled for the particular physical disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "True"
|
||||
type: bool
|
||||
sample: True
|
||||
partial:
|
||||
description: Information whether the particular physical disk is partial.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "False"
|
||||
type: bool
|
||||
sample: False
|
||||
serial_number:
|
||||
description: Serial number of the particular physical disk.
|
||||
returned: always
|
||||
|
@ -418,25 +422,22 @@ ansible_facts:
|
|||
contains:
|
||||
size:
|
||||
description:
|
||||
- Size in Gibibyte of the particular virtual disk.
|
||||
- Accurate to three decimal places.
|
||||
- Size in bytes of the particular virtual disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "300GiB"
|
||||
type: int
|
||||
sample: 240057409536
|
||||
allocated_size:
|
||||
description:
|
||||
- Allocated size in Gibibyte of the particular virtual disk.
|
||||
- Accurate to three decimal places.
|
||||
- Allocated size in bytes of the particular virtual disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "100GiB"
|
||||
type: int
|
||||
sample: 240057409536
|
||||
footprint_on_pool:
|
||||
description:
|
||||
- Footprint on pool in Gibibyte of the particular virtual disk.
|
||||
- Accurate to three decimal places.
|
||||
- Footprint on pool in bytes of the particular virtual disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "100GiB"
|
||||
type: int
|
||||
sample: 240057409536
|
||||
name:
|
||||
description: Name of the particular virtual disk.
|
||||
returned: always
|
||||
|
@ -463,10 +464,10 @@ ansible_facts:
|
|||
type: string
|
||||
sample: "Thin"
|
||||
allocation_unit_size:
|
||||
description: Allocation unit size in Kibibyte of the particular virtual disk.
|
||||
description: Allocation unit size in bytes of the particular virtual disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "4KiB"
|
||||
type: int
|
||||
sample: 4096
|
||||
media_type:
|
||||
description: Media type of the particular virtual disk.
|
||||
returned: always
|
||||
|
@ -490,8 +491,8 @@ ansible_facts:
|
|||
write_cache_size:
|
||||
description: Write cache size in byte of the particular virtual disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "100s/byte/bytes/"
|
||||
type: int
|
||||
sample: 100
|
||||
fault_domain_awareness:
|
||||
description: Fault domain awareness of the particular virtual disk.
|
||||
returned: always
|
||||
|
@ -499,46 +500,45 @@ ansible_facts:
|
|||
sample: "PhysicalDisk"
|
||||
inter_leave:
|
||||
description:
|
||||
- Inter leave in Kibibyte of the particular virtual disk.
|
||||
- Accurate to three decimal places.
|
||||
- Inter leave in bytes of the particular virtual disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "100KiB"
|
||||
type: int
|
||||
sample: 102400
|
||||
deduplication_enabled:
|
||||
description: Information whether deduplication is enabled for the particular virtual disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "True"
|
||||
type: bool
|
||||
sample: True
|
||||
enclosure_aware:
|
||||
description: Information whether the particular virtual disk is enclosure aware.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "False"
|
||||
type: bool
|
||||
sample: False
|
||||
manual_attach:
|
||||
description: Information whether the particular virtual disk is manual attached.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "True"
|
||||
type: bool
|
||||
sample: True
|
||||
snapshot:
|
||||
description: Information whether the particular virtual disk is a snapshot.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "False"
|
||||
type: bool
|
||||
sample: False
|
||||
tiered:
|
||||
description: Information whether the particular virtual disk is tiered.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "True"
|
||||
type: bool
|
||||
sample: True
|
||||
physical_sector_size:
|
||||
description: Physical sector size in Kibibyte of the particular virtual disk.
|
||||
description: Physical sector size in bytes of the particular virtual disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "4KiB"
|
||||
type: int
|
||||
sample: 4096
|
||||
logical_sector_size:
|
||||
description: Logical sector size in byte of the particular virtual disk.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "512s/byte/bytes/"
|
||||
type: int
|
||||
sample: 512
|
||||
available_copies:
|
||||
description: Number of the available copies of the particular virtual disk.
|
||||
returned: if existent
|
||||
|
@ -567,8 +567,8 @@ ansible_facts:
|
|||
request_no_spof:
|
||||
description: Information whether the particular virtual disk requests no single point of failure.
|
||||
returned: always
|
||||
type: string
|
||||
sample: "True"
|
||||
type: bool
|
||||
sample: True
|
||||
resiliency_setting_name:
|
||||
description: Type of the physical disk redundancy of the particular virtual disk.
|
||||
returned: always
|
||||
|
|
Loading…
Reference in a new issue