Skip to main content

Documentation Index

Fetch the complete documentation index at: https://mintlify.com/HewlettPackard/POSH-HPEOneView/llms.txt

Use this file to discover all available pages before exploring further.

HPE OneView integrates with HPE block storage arrays to provide centralized storage lifecycle management. The workflow is: add the array, then add storage pools, then provision volumes from those pools.

Supported storage families

Add-OVStorageSystem supports the following -Family values:
ValueArray family
StoreServHPE 3PAR StoreServ (default)
PrimeraHPE Primera
Alletra9000HPE Alletra 9000
Alletra6000HPE Alletra 6000
Alletra5000HPE Alletra 5000
NimbleHPE Nimble Storage

Adding a storage system

1

Gather the storage system credentials

$StorageCreds = Get-Credential -Username 3paradm -Message "3PAR/Primera admin password"
2

Build the parameter hashtable with port-to-fabric mappings

The -Ports hashtable maps physical host ports on the array to the FC networks in OneView. The -PortGroups hashtable groups ports together for load balancing.
$params = @{
    Hostname   = "HPEStoreServ_1-array.contoso.com"
    Credential = $StorageCreds
    Domain     = "NODOMAIN"
    Ports = @{
        "0:1:1" = "3PAR SAN DA A"
        "0:1:2" = "3PAR SAN Fabric A"
        "1:1:1" = "3PAR SAN Fabric B"
        "1:1:2" = "3PAR SAN DA B"
    }
    PortGroups = @{
        "0:1:1" = "PG_1"
        "0:1:2" = "PG_2"
        "1:1:1" = "PG_1"
        "1:1:2" = "PG_2"
    }
}
3

Add the storage system and wait for the task to complete

Add-OVStorageSystem @params | Wait-OVTaskComplete

Adding a system with a virtual domain

For arrays configured with virtual domains (common in multi-tenant environments), specify the domain name. The value is case-sensitive.
$params = @{
    Hostname   = "HP3Par_2-array.contoso.com"
    Username   = "3paradm"
    Password   = "3pardata"
    Domain     = "VirtualDomain1"   # Case-sensitive
    Ports      = @{
        "1:1:1" = "Fabric A"
        "2:1:1" = "FabricA"
        "1:1:2" = "Fabric B"
        "2:1:2" = "Fabric B"
    }
    PortGroups = @{
        "0:1:1" = "PG_1"
        "0:1:2" = "PG_2"
        "1:1:1" = "PG_1"
        "1:1:2" = "PG_2"
    }
}

Add-OVStorageSystem @params | Wait-OVTaskComplete

Adding storage pools

After the array is registered, add storage pools (CPGs on 3PAR/Primera/Alletra) to make them available for volume provisioning.
$StorageSystem = Get-OVStorageSystem -Name "HP3Par_1"

$StorageSystem | New-OVStoragePool -PoolName "FST_CPG1"
$StorageSystem | New-OVStoragePool -PoolName "FST_CPG2"
Storage pools are imported, not created. The CPG must already exist on the array. OneView discovers and manages it.

Creating storage volumes

Volumes are provisioned from a storage pool. Capacity is specified in gigabytes.

Private (non-shared) volumes

$Pool = Get-OVStoragePool -Name "FST_CPG1"

# Create 10 private volumes named Vol1 through Vol10
1..10 | ForEach-Object {
    New-OVStorageVolume -Name "Vol$_" -StoragePool $Pool -Capacity 60
}

Shared volumes

Shared volumes can be presented to multiple server profiles simultaneously (required for clustered workloads).
# Create 5 shared volumes of 250 GB each
1..5 | ForEach-Object {
    New-OVStorageVolume -Name "SharedVol$_" -StoragePool "FST_CPG2" -Capacity 250 -Shared
}

Thin-provisioned volume

$Pool = Get-OVStoragePool -Name "FST_CPG1"

New-OVStorageVolume -Name "ThinVol01" -StoragePool $Pool -Capacity 500 -ProvisioningType Thin

Volume templates

Volume templates define a standard configuration that enforces consistent provisioning across your environment. Administrators create templates; end users provision volumes from them.
$Pool = Get-OVStoragePool -Name "FST_CPG1" -ErrorAction Stop

$Template = New-OVStorageVolumeTemplate `
    -Name "Standard 100GB Thin" `
    -Description "Corporate standard 100 GB thin-provisioned volume" `
    -StoragePool $Pool `
    -Capacity 100 `
    -ProvisioningType Thin `
    -LockProvisionType `
    -LockCapacity
The -LockProvisionType and -LockCapacity switches prevent users from overriding those values when they provision from the template.

Provisioning from a template

$Template = Get-OVStorageVolumeTemplate -Name "Standard 100GB Thin" -ErrorAction Stop

New-OVStorageVolume -Name "AppVol01" -VolumeTemplate $Template

Attaching volumes to server profiles

Volumes are attached through server profile connections. Create a volume attachment object and include it in the profile’s -StorageVolume parameter.
$Volume  = Get-OVStorageVolume -Name "Vol1" -ErrorAction Stop
$Profile = Get-OVServerProfile -Name "WebServer-01" -ErrorAction Stop

# Add the volume attachment to the existing profile
$VolumeAttachment = New-OVServerProfileAttachVolume -Volume $Volume

Set-OVServerProfile -InputObject $Profile -StorageVolume $VolumeAttachment | Wait-OVTaskComplete

Including volumes in a new server profile template

When building a server profile template that includes storage, add the attachment during template creation:
$Volume     = Get-OVStorageVolume -Name "SharedVol1" -ErrorAction Stop
$Attachment = New-OVServerProfileAttachVolume -Volume $Volume -LunIdType Auto

New-OVServerProfileTemplate `
    -Name "SQL Cluster Node v1" `
    -ServerHardwareType $SHT `
    -EnclosureGroup $EG `
    -StorageVolume $Attachment

Listing storage resources

# All registered storage systems
Get-OVStorageSystem

# Storage pools on a specific system
Get-OVStoragePool -StorageSystem "HP3Par_1"

# All pools
Get-OVStoragePool

# All volumes
Get-OVStorageVolume

# A specific volume
Get-OVStorageVolume -Name "Vol1"

Build docs developers (and LLMs) love