Skip to content
This repository was archived by the owner on Oct 15, 2020. It is now read-only.

Commit 5ed378d

Browse files
authored
Merge pull request #383 from HewlettPackard/api600/storage_systems
Api600 support for storage systems
2 parents 2daa16a + 459eaea commit 5ed378d

File tree

4 files changed

+128
-125
lines changed

4 files changed

+128
-125
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# 4.6.0 (Unreleased)
22
#### Notes
33
Extends support of the SDK to OneView Rest API version 600 (OneView v4.0).
4+
Updated support for HPE Synergy Image Streamer REST API 500/600.
45

56
#### Features supported with current release:
67
- Deployment plan
@@ -10,6 +11,7 @@ Extends support of the SDK to OneView Rest API version 600 (OneView v4.0).
1011
- OS deployment plan
1112
- Plan script
1213
- Storage pool
14+
- Storage system
1315
- Storage volume
1416

1517
# 4.5.0

endpoints-support.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -472,17 +472,17 @@
472472
|<sub>/rest/storage-pools/{id}</sub> | PUT | :heavy_minus_sign: | :heavy_minus_sign: | :white_check_mark: | :white_check_mark:
473473
|<sub>/rest/storage-pools/{id}</sub> | DELETE | :white_check_mark: | :white_check_mark: | :heavy_minus_sign: | :heavy_minus_sign:
474474
| **Storage Systems** |
475-
|<sub>/rest/storage-systems</sub> | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: |
476-
|<sub>/rest/storage-systems</sub> | POST | :white_check_mark: | :white_check_mark: | :white_check_mark: |
477-
|<sub>/rest/storage-systems/host-types</sub> | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: |
478-
|<sub>/rest/storage-systems/{arrayId}/storage-pools</sub> | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: |
479-
|<sub>/rest/storage-systems/{id}</sub> | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: |
480-
|<sub>/rest/storage-systems/{id}</sub> | PUT | :white_check_mark: | :white_check_mark: | :white_check_mark: |
481-
|<sub>/rest/storage-systems/{id}</sub> | DELETE | :white_check_mark: | :white_check_mark: | :white_check_mark: |
482-
|<sub>/rest/storage-systems/{id}/managedPorts</sub> | GET | :white_check_mark: | :white_check_mark: | :heavy_minus_sign: |
483-
|<sub>/rest/storage-systems/{id}/managedPorts/{portId}</sub> | GET | :white_check_mark: | :white_check_mark: | :heavy_minus_sign: |
484-
|<sub>/rest/storage-systems/{id}/reachable-ports</sub> | GET | :heavy_minus_sign: | :heavy_minus_sign: | :white_check_mark: |
485-
|<sub>/rest/storage-systems/{id}/templates</sub> | GET | :heavy_minus_sign: | :heavy_minus_sign: | :white_check_mark: |
475+
|<sub>/rest/storage-systems</sub> | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
476+
|<sub>/rest/storage-systems</sub> | POST | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
477+
|<sub>/rest/storage-systems/host-types</sub> | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
478+
|<sub>/rest/storage-systems/{arrayId}/storage-pools</sub> | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
479+
|<sub>/rest/storage-systems/{id}</sub> | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
480+
|<sub>/rest/storage-systems/{id}</sub> | PUT | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
481+
|<sub>/rest/storage-systems/{id}</sub> | DELETE | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
482+
|<sub>/rest/storage-systems/{id}/managedPorts</sub> | GET | :white_check_mark: | :white_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
483+
|<sub>/rest/storage-systems/{id}/managedPorts/{portId}</sub> | GET | :white_check_mark: | :white_check_mark: | :heavy_minus_sign: | :heavy_minus_sign: |
484+
|<sub>/rest/storage-systems/{id}/reachable-ports</sub> | GET | :heavy_minus_sign: | :heavy_minus_sign: | :white_check_mark: | :white_check_mark: |
485+
|<sub>/rest/storage-systems/{id}/templates</sub> | GET | :heavy_minus_sign: | :heavy_minus_sign: | :white_check_mark: | :white_check_mark: |
486486
| **Storage Volume Attachments** |
487487
|<sub>/rest/storage-volume-attachments</sub> | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: |
488488
|<sub>/rest/storage-volume-attachments/{id}</sub> | GET | :white_check_mark: | :white_check_mark: | :white_check_mark: |

examples/storage_systems.py

Lines changed: 41 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,8 @@
2222
###
2323

2424
from pprint import pprint
25-
import re
26-
from hpOneView.oneview_client import OneViewClient
2725
from hpOneView.exceptions import HPOneViewException
26+
from hpOneView.oneview_client import OneViewClient
2827
from config_loader import try_load_from_file
2928

3029
config = {
@@ -39,57 +38,59 @@
3938
config = try_load_from_file(config)
4039

4140
options = {
42-
"ip_hostname": config['storage_system_hostname'],
41+
"hostname": config['storage_system_hostname'],
4342
"username": config['storage_system_username'],
44-
"password": config['storage_system_password']
43+
"password": config['storage_system_password'],
44+
"family": config['storage_system_family']
4545
}
4646

4747
oneview_client = OneViewClient(config)
4848

4949
# Add and update storage system for management
50-
storage_system = oneview_client.storage_systems.add(options)
51-
print("\nAdded storage system '%s'.\n uri = '%s'" %
52-
(storage_system['name'], storage_system['uri']))
53-
storage_system['managedDomain'] = storage_system['unmanagedDomains'][0]
54-
storage_system = oneview_client.storage_systems.update(storage_system)
55-
print("\nUpdated 'managedDomain' to '{}' so storage system can be managed".format(
56-
storage_system['managedDomain']))
57-
58-
59-
# Add storage pool to be managed
6050
try:
61-
print("\nAdd first storage pool from unmanaged storage pools to be managed")
62-
for pool in storage_system['unmanagedPools']:
63-
if pool['domain'] == storage_system['managedDomain']:
51+
storage_system = oneview_client.storage_systems.add(options)
52+
print("\nAdded storage system '%s'.\n uri = '%s'" %
53+
(storage_system['name'], storage_system['uri']))
54+
except HPOneViewException as e:
55+
storage_system = oneview_client.storage_systems.get_by_hostname(options['hostname'])
56+
if storage_system:
57+
print("\nStorage system '%s' was already added.\n uri = '%s'" %
58+
(storage_system['name'], storage_system['uri']))
59+
else:
60+
print(e.msg)
61+
62+
# Adds managed domains and managed pools to StoreServ storage systems
63+
# This is a one-time only action, after this you cannot change the managed values
64+
if not storage_system['deviceSpecificAttributes']['managedDomain']:
65+
storage_system['deviceSpecificAttributes']['managedDomain'] = storage_system[
66+
'deviceSpecificAttributes']['discoveredDomains'][0]
67+
for pool in storage_system['deviceSpecificAttributes']['discoveredPools']:
68+
if pool['domain'] == storage_system['deviceSpecificAttributes']['managedDomain']:
6469
pool_to_manage = pool
70+
storage_system['deviceSpecificAttributes']['discoveredPools'].remove(pool)
71+
pprint(pool_to_manage)
6572
break
66-
storage_system['managedPools'] = [{
67-
"type": pool_to_manage['type'],
68-
"domain": pool_to_manage['type'],
69-
"name": pool_to_manage['name'],
70-
"deviceType": pool_to_manage['deviceType']
71-
}]
72-
storage_system = oneview_client.storage_systems.update(
73-
storage_system)
74-
print("\nManaged storage pool '{}' at uri: '{}'".format(storage_system[
75-
'managedPools'][0]['name'], storage_system['managedPools'][0]['uri']))
76-
except HPOneViewException as e:
77-
print(e.msg)
73+
storage_system['deviceSpecificAttributes']['managedPools'] = [pool_to_manage]
74+
oneview_client.storage_systems.update(storage_system)
75+
print("\nUpdated 'managedDomain' to '{}' so storage system can be managed".format(
76+
storage_system['deviceSpecificAttributes']['managedDomain']))
77+
print("\nManaged storage pool '{}' at uri: '{}'".format(storage_system['deviceSpecificAttributes'][
78+
'managedPools'][0]['name'], storage_system['deviceSpecificAttributes']['managedPools'][0]['uuid']))
7879

7980
# Get all managed storage systems
8081
print("\nGet all managed storage systems")
8182
storage_systems_all = oneview_client.storage_systems.get_all()
8283
for ss in storage_systems_all:
8384
print(" '{}' at uri: '{}'".format(ss['name'], ss['uri']))
8485

85-
# Get maximum of 5 storage systems which belong to model of type 'HP_3PAR
86-
# 7200', sorted by freeCapacity in descending order.
86+
# Get maximum of 5 storage systems which belong to family of type 'StoreServ',
87+
# sorted by freeCapacity in descending order.
8788
print(
88-
"Get maximum of 5 storage systems which belong to model of type 'HP_3PAR 7200,' sorted by freeCapacity in "
89+
"Get maximum of 5 storage systems which belong to family of type StoreServ, sorted by freeCapacity in "
8990
"descending order.")
90-
filter = 'model=HP_3PAR 7200'
91+
filter = 'family=StoreServ'
9192
storage_systems_filtered = oneview_client.storage_systems.get_all(
92-
0, 5, filter="\"'name'='ThreePAR7200-5718'\"", sort='freeCapacity:desc')
93+
0, 5, filter="\"'family'='StoreServ'\"", sort='freeCapacity:desc')
9394
for ss in storage_systems_filtered:
9495
print(" '{}' at uri: '{}'".format(ss['name'], ss['uri']))
9596
if not storage_systems_filtered:
@@ -114,53 +115,13 @@
114115
except HPOneViewException as e:
115116
print(e.msg)
116117

117-
# Add managed ports
118-
ports_to_manage = []
119-
for port in storage_system['unmanagedPorts']:
120-
if port['actualNetworkSanUri'] != "unknown":
121-
port_to_manage = {
122-
"type": port['type'],
123-
"name": port['name'],
124-
"portName": port['portName'],
125-
"portWwn": port['portWwn'],
126-
"expectedNetworkUri": port['actualNetworkSanUri'],
127-
"actualNetworkUri": port['actualNetworkUri'],
128-
"actualNetworkSanUri": port['actualNetworkUri'],
129-
"groupName": port['groupName'],
130-
"protocolType": port['protocolType'],
131-
"label": port['label']
132-
}
133-
ports_to_manage.append(port_to_manage)
134-
storage_system['managedPorts'] = ports_to_manage
135-
storage_system = oneview_client.storage_systems.update(storage_system)
136-
print("\nSuccessfully added ports to be managed")
118+
print("\nGet all reachable storage ports which are managed by the storage system")
119+
reachable_ports = oneview_client.storage_systems.get_reachable_ports(storage_system['uri'])
120+
pprint(reachable_ports)
137121

138-
# Get managed ports for specified storage system
139-
print("\nGet all managed ports for storage system at uri '{}'".format(
140-
storage_system['uri']))
141-
managed_ports = oneview_client.storage_systems.get_managed_ports(
142-
storage_system['uri'])
143-
for port in managed_ports['members']:
144-
print(" '{}' at uri: {}".format(port['name'], port['uri']))
145-
146-
# Get managed target port for specified storage system
147-
print("\nGet managed port by uri")
148-
managed_port_by_uri = oneview_client.storage_systems.get_managed_ports(
149-
storage_system['uri'], storage_system['managedPorts'][0]['uri'])
150-
print(" '{}' at uri: {}".format(
151-
managed_port_by_uri['name'], managed_port_by_uri['uri']))
152-
153-
# Get managed target port for specified storage system by id
154-
try:
155-
port_id = re.sub("/rest/storage-systems/TXQ1010307/managedPorts/",
156-
'', storage_system['managedPorts'][0]['uri'])
157-
print("\nGet managed port by id: '{}'".format(port_id))
158-
managed_port_by_id = oneview_client.storage_systems.get_managed_ports(
159-
'TXQ1010307', port_id)
160-
print(" '{}' at uri: {}".format(
161-
managed_port_by_id['name'], managed_port_by_id['uri']))
162-
except HPOneViewException as e:
163-
print(e.msg)
122+
print("\nGet templates related to a storage system")
123+
templates = oneview_client.storage_systems.get_templates(storage_system['uri'])
124+
pprint(templates)
164125

165126
# Remove storage system
166127
print("\nRemove storage system")
Lines changed: 74 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,9 @@
2222
###
2323

2424
from pprint import pprint
25-
from hpOneView.exceptions import HPOneViewException
25+
import re
2626
from hpOneView.oneview_client import OneViewClient
27+
from hpOneView.exceptions import HPOneViewException
2728
from config_loader import try_load_from_file
2829

2930
config = {
@@ -38,43 +39,42 @@
3839
config = try_load_from_file(config)
3940

4041
options = {
41-
"hostname": config['storage_system_hostname'],
42+
"ip_hostname": config['storage_system_hostname'],
4243
"username": config['storage_system_username'],
43-
"password": config['storage_system_password'],
44-
"family": config['storage_system_family']
44+
"password": config['storage_system_password']
4545
}
4646

4747
oneview_client = OneViewClient(config)
4848

4949
# Add and update storage system for management
50+
storage_system = oneview_client.storage_systems.add(options)
51+
print("\nAdded storage system '%s'.\n uri = '%s'" %
52+
(storage_system['name'], storage_system['uri']))
53+
storage_system['managedDomain'] = storage_system['unmanagedDomains'][0]
54+
storage_system = oneview_client.storage_systems.update(storage_system)
55+
print("\nUpdated 'managedDomain' to '{}' so storage system can be managed".format(
56+
storage_system['managedDomain']))
57+
58+
59+
# Add storage pool to be managed
5060
try:
51-
storage_system = oneview_client.storage_systems.add(options)
52-
print("\nAdded storage system '%s'.\n uri = '%s'" %
53-
(storage_system['name'], storage_system['uri']))
54-
except HPOneViewException as e:
55-
storage_system = oneview_client.storage_systems.get_by_hostname(options['hostname'])
56-
if storage_system:
57-
print("\nStorage system '%s' was already added.\n uri = '%s'" %
58-
(storage_system['name'], storage_system['uri']))
59-
else:
60-
print(e.msg)
61-
62-
# Adds managed domains and managed pools to StoreServ storage systems
63-
# This is a one-time only action, after this you cannot change the managed values
64-
if not storage_system['deviceSpecificAttributes']['managedDomain']:
65-
storage_system['deviceSpecificAttributes']['managedDomain'] = storage_system[
66-
'deviceSpecificAttributes']['discoveredDomains'][0]
67-
for pool in storage_system['deviceSpecificAttributes']['discoveredPools']:
68-
if pool['domain'] == storage_system['deviceSpecificAttributes']['managedDomain']:
61+
print("\nAdd first storage pool from unmanaged storage pools to be managed")
62+
for pool in storage_system['unmanagedPools']:
63+
if pool['domain'] == storage_system['managedDomain']:
6964
pool_to_manage = pool
70-
pprint(pool_to_manage)
7165
break
72-
storage_system['deviceSpecificAttributes']['managedPools'] = [pool_to_manage]
73-
oneview_client.storage_systems.update(storage_system)
74-
print("\nUpdated 'managedDomain' to '{}' so storage system can be managed".format(
75-
storage_system['deviceSpecificAttributes']['managedDomain']))
66+
storage_system['managedPools'] = [{
67+
"type": pool_to_manage['type'],
68+
"domain": pool_to_manage['domain'],
69+
"name": pool_to_manage['name'],
70+
"deviceType": pool_to_manage['deviceType']
71+
}]
72+
storage_system = oneview_client.storage_systems.update(
73+
storage_system)
7674
print("\nManaged storage pool '{}' at uri: '{}'".format(storage_system[
77-
'managedPools'][0]['name'], storage_system['deviceSpecificAttributes']['managedPools'][0]['uri']))
75+
'managedPools'][0]['name'], storage_system['managedPools'][0]['uri']))
76+
except HPOneViewException as e:
77+
print(e.msg)
7878

7979
# Get all managed storage systems
8080
print("\nGet all managed storage systems")
@@ -114,13 +114,53 @@
114114
except HPOneViewException as e:
115115
print(e.msg)
116116

117-
print("\nGet all reachable storage ports which are managed by the storage system")
118-
reachable_ports = oneview_client.storage_systems.get_reachable_ports(storage_system['uri'])
119-
pprint(reachable_ports)
117+
# Add managed ports
118+
ports_to_manage = []
119+
for port in storage_system['unmanagedPorts']:
120+
if port['actualNetworkSanUri'] != "unknown":
121+
port_to_manage = {
122+
"type": port['type'],
123+
"name": port['name'],
124+
"portName": port['portName'],
125+
"portWwn": port['portWwn'],
126+
"expectedNetworkUri": port['actualNetworkSanUri'],
127+
"actualNetworkUri": port['actualNetworkUri'],
128+
"actualNetworkSanUri": port['actualNetworkUri'],
129+
"groupName": port['groupName'],
130+
"protocolType": port['protocolType'],
131+
"label": port['label']
132+
}
133+
ports_to_manage.append(port_to_manage)
134+
storage_system['managedPorts'] = ports_to_manage
135+
storage_system = oneview_client.storage_systems.update(storage_system)
136+
print("\nSuccessfully added ports to be managed")
120137

121-
print("\nGet templates related to a storage system")
122-
templates = oneview_client.storage_systems.get_templates(storage_system['uri'])
123-
pprint(templates)
138+
# Get managed ports for specified storage system
139+
print("\nGet all managed ports for storage system at uri '{}'".format(
140+
storage_system['uri']))
141+
managed_ports = oneview_client.storage_systems.get_managed_ports(
142+
storage_system['uri'])
143+
for port in managed_ports['members']:
144+
print(" '{}' at uri: {}".format(port['name'], port['uri']))
145+
146+
# Get managed target port for specified storage system
147+
print("\nGet managed port by uri")
148+
managed_port_by_uri = oneview_client.storage_systems.get_managed_ports(
149+
storage_system['uri'], storage_system['managedPorts'][0]['uri'])
150+
print(" '{}' at uri: {}".format(
151+
managed_port_by_uri['name'], managed_port_by_uri['uri']))
152+
153+
# Get managed target port for specified storage system by id
154+
try:
155+
port_id = re.sub("/rest/storage-systems/TXQ1010307/managedPorts/",
156+
'', storage_system['managedPorts'][0]['uri'])
157+
print("\nGet managed port by id: '{}'".format(port_id))
158+
managed_port_by_id = oneview_client.storage_systems.get_managed_ports(
159+
'TXQ1010307', port_id)
160+
print(" '{}' at uri: {}".format(
161+
managed_port_by_id['name'], managed_port_by_id['uri']))
162+
except HPOneViewException as e:
163+
print(e.msg)
124164

125165
# Remove storage system
126166
print("\nRemove storage system")

0 commit comments

Comments
 (0)