Skip to content
 
 

Repository files navigation

PyPowerFlex

Python SDK for Dell PowerFlex.

Supports PowerFlex (VxFlex OS) version 3.0 and later.

Installation and usage

Installation

python setup.py install

Usage

Configuration options

Option Description
gateway_address (str) PowerFlex API address.
gateway_port (int) PowerFlex API port. Default: 443.
username (str) PowerFlex API username.
password (str) PowerFlex API password.
verify_certificate (bool) Verify server's certificate. Default: False.
certificate_path (str) Path to server's certificate. Default: None.
timeout (int) Timeout for PowerFlex API request Default: 120.
log_level (int) Logging level (e. g. logging.DEBUG). Default: logging.ERROR.

Available resources

  • Device
  • ProtectionDomain
  • Sds
  • Sdt
  • SnapshotPolicy
  • ReplicationConsistencyGroup
  • ReplicationPair
  • System
  • StoragePool
  • AccelerationPool
  • Sdc
  • NvmeHost
  • FaultSet
  • Volume
  • ManagedDevice
  • Deployment
  • ServiceTemplate
  • FirmwareRepository
  • Credential (requires PowerFlex Manager 4.0+)

Initialize PowerFlex client

from PyPowerFlex import PowerFlexClient

client = PowerFlexClient(gateway_address='1.2.3.4', 
                         gateway_port=443, 
                         username='admin', 
                         password='admin')
client.initialize()

Filtering and fields querying

SDK supports flat filtering and fields querying.

from PyPowerFlex.objects.device import MediaType

client.device.get(filter_fields={'mediaType': MediaType.ssd, 
                                 'name': ['/dev/sdd', '/dev/sde']}, 
                  fields=['id', 'name', 'mediaType'])

[{'id': '3eddd9dd00010003', 'mediaType': 'SSD', 'name': '/dev/sde'},
 {'id': '3edcd9d800000002', 'mediaType': 'SSD', 'name': '/dev/sdd'},
 {'id': '3edcd9d900000003', 'mediaType': 'SSD', 'name': '/dev/sde'},
 {'id': '3edd00e900010002', 'mediaType': 'SSD', 'name': '/dev/sdd'},
 {'id': '3eded9e000020002', 'mediaType': 'SSD', 'name': '/dev/sdd'},
 {'id': '3eded9e100020003', 'mediaType': 'SSD', 'name': '/dev/sde'}]

Examples

# Create device
from PyPowerFlex.objects.device import MediaType
client.device.create('/dev/sdd', 
                     sds_id='63471cdd00000001', 
                     media_type=MediaType.ssd, 
                     storage_pool_id='889dd7b900000000',
                     name='/dev/sdd')

# Rename device
client.device.get(filter_fields={'name': '/dev/sdd', 'id': '3eddd9dc00010002'}, 
                  fields=['name', 'id'])      
[{'name': '/dev/sdd', 'id': '3eddd9dc00010002'}]

client.device.rename('3eddd9dc00010002', '/dev/sdd-renamed') 
client.device.get(filter_fields={'id': '3eddd9dc00010002'}, 
                  fields=['name', 'id'])  
[{'name': '/dev/sdd-renamed', 'id': '3eddd9dc00010002'}]

# Remove device
client.device.delete('3eddd9dc00010002')
{}

# Get Protection Domain related SDSs
client.protection_domain.get_sdss('b922fb3700000000', fields=['ipList', 'name'])
[{'ipList': [{'ip': '192.100.xxx.xxx', 'role': 'all'},
             {'ip': '172.160.xxx.xxx', 'role': 'sdcOnly'}]},
 {'ipList': [{'ip': '192.101.xxx.xxx', 'role': 'all'},
             {'ip': '172.161.xxx.xxx', 'role': 'sdcOnly'}]},
 {'ipList': [{'ip': '192.102.xxx.xxx', 'role': 'all'},
             {'ip': '172.162.xxx.xxx', 'role': 'sdcOnly'}]}]

# Delete protection domain
client.protection_domain.delete('9300c1f900000000')
{}

# Add SDS IP-address
from PyPowerFlex.objects.sds import SdsIp
from PyPowerFlex.objects.sds import SdsIpRoles

client.sds.add_ip('63471cdc00000000', SdsIp('172.17.xxx.xxx', SdsIpRoles.sdc_only))
client.sds.get(filter_fields={'id': '63471cdc00000000'}, fields=['id', 'ipList'])
[{'id': '63471cdc00000000',
  'ipList': [{'ip': '192.168.xxx.xxx', 'role': 'all'},
             {'ip': '172.16.xxx.xxx', 'role': 'sdcOnly'},
             {'ip': '172.17.xxx.xxx', 'role': 'sdcOnly'}]}]

# Set SDS IP-address role
client.sds.set_ip_role('63471cdc00000000', '172.17.xxx.xxx', SdsIpRoles.sds_only, force=True)
[{'id': '63471cdc00000000',
  'ipList': [{'ip': '192.168.xxx.xxx', 'role': 'all'},
             {'ip': '172.16.xxx.xxx', 'role': 'sdcOnly'},
             {'ip': '172.17.xxx.xxx', 'role': 'sdsOnly'}]}]

# Remove SDS IP-address
client.sds.remove_ip('63471cdc00000000', '172.16.xxx.xxx')
[{'id': '63471cdc00000000',
  'ipList': [{'ip': '192.168.xxx.xxx', 'role': 'all'},
             {'ip': '172.17.xxx.xxx', 'role': 'sdcOnly'}]}]

# Create snapshot policy
client.snapshot_policy.create(15, [3, 4, 5, 6])

# Rename snapshot policy
client.snapshot_policy.rename('f047913500000000', 'SnapshotPolicy_sp2')

# Snapshot volumes
from PyPowerFlex.objects.system import SnapshotDef

system_id = client.system.get(fields=['id'])[0]['id']
client.system.snapshot_volumes(system_id,
                               [SnapshotDef('afa52f0c00000003', 'snap1'),
                                SnapshotDef('afa52f0c00000003', 'snap2')])
{'snapshotGroupId': '5aaf81e800000002', 'volumeIdList': ['afa5561900000007', 'afa5561a00000008']}

# Remove ConsistencyGroup snapshot
client.system.remove_cg_snapshots(system_id, '5aaf81e800000002')
{'numberOfVolumes': 2}

# Rename storage pool
client.storage_pool.rename('dbd4dbcd00000000', 'StoragePool_sp2')
client.storage_pool.get(filter_fields={'id': 'dbd4dbcd00000000'},
                        fields=['name', 'id'])
[{'name': 'StoragePool_sp2', 'id': 'dbd4dbcd00000000'}]

# Set media tye for storage pool
from PyPowerFlex.objects.storage_pool import MediaType
client.storage_pool.set_media_type(storage_pool_id='dbd4dbcd00000000',
                                   media_type=MediaType.ssd,
                                   override_device_configuration=None)

# Create acceleration pool
from PyPowerFlex.objects.acceleration_pool import MediaType
client.acceleration_pool.create(media_type=MediaType.ssd,
                                protection_domain_id='1caf743100000000',
                                name='ACP_SSD',
                                is_rfcache=True)
client.acceleration_pool.get(filter_fields={'id': '9c8c5c7800000001'}, 
                             fields=['name', 'id'])
[{'name': 'ACP_SSD', 'id': '9c8c5c7800000001'}]

# Delete acceleration pool
client.acceleration_pool.delete('9c8c5c7800000001')
{}

# Rename SDC
client.sdc.rename('a7e798d100000000', 'SDC_2')
client.sdc.get(filter_fields={'id': 'a7e798d100000000'},
               fields=['name', 'id'])
[{'name': 'SDC_2', 'id': 'a7e798d100000000'}]

# Set performance profile for SDC
client.sdc.set_performance_profile('a7e798d100000000', 'HighPerformance')

# Add a fault set to a protection domain
client.fault_set.create(protection_domain_id='dc65bd9900000000',
                        name='sio-fs1')
client.fault_set.get(filter_fields={'id': 'fba27fae00000001'},
                     fields=['name', 'id'])
[{'name': 'sio-fs1', 'id': 'fba27fae00000001'}]

# Clear fault set
client.fault_set.clear('fba27fae00000001')
{}

# Create volume
from PyPowerFlex.objects.volume import VolumeType
from PyPowerFlex.objects.volume import CompressionMethod
client.volume.create(storage_pool_id='76f2b2fd00000000',
                     size_in_gb=40,
                     name='new_thin_vol',
                     volume_type=VolumeType.thin,
                     use_rmcache=True,
                     compression_method=CompressionMethod.normal)

# Extend volume size
client.volume.extend(volume_id='4a3a153e00000000',
                     size_in_gb=48)
client.volume.get(filter_fields={'id': '4a3a153e00000000'},
                  fields=['name', 'id'])
[{'name': 'sio-new_thin_vol', 'id': '4a3a153e00000000'}]

Credential Management (4.0+ PowerFlex Manager)

PowerFlex 4.0 and later provides credential management capabilities through the PyPowerFlex SDK. This feature allows you to manage credentials for various components in your PowerFlex environment.

# Create a server credential
from PyPowerFlex.objects.credential import ServerCredential

# Create credential object
server_cred = ServerCredential(
    label="Web Server Admin",
    username="admin",
    password="secure_password"
)

# Add the credential to PowerFlex
result = client.credential.create(server_cred)
print(f"Created credential with ID: {result['id']}")

# Create a vCenter credential with domain
from PyPowerFlex.objects.credential import VCenterCredential

vcenter_cred = VCenterCredential(
    label="vCenter Admin",
    username="administrator",
    password="secure_password",
    domain="vsphere.local"  # Domain parameter for supported credential types
)

# Add the credential to PowerFlex
result = client.credential.create(vcenter_cred)

# Retrieve all credentials
all_credentials = client.credential.get()

# Get a specific credential by ID
credential_id = "1234567890"
credential = client.credential.get(entity_id=credential_id)

# Update a credential
updated_cred = ServerCredential(
    label="Updated Server Credential",
    username="admin",
    password="new_secure_password"
)
result = client.credential.update(credential_id, updated_cred)

# Delete a credential
client.credential.delete(credential_id)

For detailed documentation on credential management, see Credential Management

About

Python library for PowerFlex

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages