776 lines
27 KiB
YAML
776 lines
27 KiB
YAML
|
# Test code for the netapp_e_iscsi_interface module
|
||
|
# (c) 2018, NetApp, Inc
|
||
|
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
|
||
|
|
||
|
- name: NetApp Test ASUP module
|
||
|
fail:
|
||
|
msg: 'Please define netapp_e_api_username, netapp_e_api_password, netapp_e_api_host, and netapp_e_ssid.'
|
||
|
when: netapp_e_api_username is undefined or netapp_e_api_password is undefined
|
||
|
or netapp_e_api_host is undefined or netapp_e_ssid is undefined
|
||
|
vars:
|
||
|
credentials: &creds
|
||
|
api_url: "https://{{ netapp_e_api_host }}:8443/devmgr/v2"
|
||
|
api_username: "{{ netapp_e_api_username }}"
|
||
|
api_password: "{{ netapp_e_api_password }}"
|
||
|
ssid: "{{ netapp_e_ssid }}"
|
||
|
validate_certs: no
|
||
|
|
||
|
- set_fact:
|
||
|
credentials: *creds
|
||
|
|
||
|
# test setup
|
||
|
- name: Delete raid 0 storage pool
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: "{{ item }}"
|
||
|
loop:
|
||
|
- storage_pool
|
||
|
- storage_pool2
|
||
|
- storage_pool3
|
||
|
|
||
|
# Thick volume testing: create, delete, expand, change properties (read/write cache), expand and change properties,
|
||
|
- name: Create raid 0 storage pool
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: storage_pool
|
||
|
criteria_min_usable_capacity: 5
|
||
|
criteria_size_unit: tb
|
||
|
erase_secured_drives: yes
|
||
|
raid_level: raid0
|
||
|
|
||
|
- name: Delete volume in raid 0 storage pool
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: volume
|
||
|
|
||
|
- name: Create volume in raid 0 storage pool
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 100
|
||
|
size_unit: gb
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '107374182400' and item.segmentSize == 131072}}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
|
||
|
- name: Re-execute volume creation in raid 0 storage pool
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 100
|
||
|
size_unit: gb
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ not results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '107374182400' and item.segmentSize == 131072}}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
|
||
|
- name: Update volume size
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 200
|
||
|
size_unit: gb
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '214748364800' and item.segmentSize == 131072}}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
|
||
|
- pause: seconds=15
|
||
|
|
||
|
- name: Update volume properties
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 200
|
||
|
size_unit: gb
|
||
|
write_cache_enable: true
|
||
|
read_cache_enable: false
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '214748364800' and item.segmentSize == 131072 and
|
||
|
not item.cacheSettings.readCacheEnable and item.cacheSettings.writeCacheEnable}}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
|
||
|
- name: Update volume properties and expand storage capabilities
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 300
|
||
|
size_unit: gb
|
||
|
write_cache_enable: false
|
||
|
read_cache_enable: true
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '322122547200' and item.segmentSize == 131072 and
|
||
|
item.cacheSettings.readCacheEnable and not item.cacheSettings.writeCacheEnable}}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
|
||
|
# Workload tagging testing: create, utilize existing (name only, name with same attributes), modify attributes
|
||
|
- name: Add workload tag (change, new workload tag)
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 300
|
||
|
size_unit: gb
|
||
|
write_cache_enable: false
|
||
|
read_cache_enable: true
|
||
|
workload_name: volume_tag
|
||
|
metadata:
|
||
|
volume_tag_key: volume_tag_value
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- name: Validate volume workload changes
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '322122547200' and item.segmentSize == 131072 and
|
||
|
item.cacheSettings.readCacheEnable and not item.cacheSettings.writeCacheEnable and
|
||
|
{'key': 'volumeTypeId', 'value': 'volume'} in item.metadata }}"
|
||
|
msg: "Failed to modify volume metadata!"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/workloads"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: workload_tags
|
||
|
- assert:
|
||
|
that: "{{ item.name == 'volume_tag' and
|
||
|
{'key': 'volume_tag_key', 'value': 'volume_tag_value'} in item.workloadAttributes }}"
|
||
|
msg: "Workload tag failed to be created!"
|
||
|
loop: "{{ lookup('list', volume_tag_id, wantList=True) }}"
|
||
|
vars:
|
||
|
volume_tag_id: "{{ workload_tags | json_query('json[?name==`volume_tag`]') }}"
|
||
|
|
||
|
- name: Repeat add workload tag (no change)
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 300
|
||
|
size_unit: gb
|
||
|
write_cache_enable: false
|
||
|
read_cache_enable: true
|
||
|
workload_name: volume_tag
|
||
|
metadata:
|
||
|
volume_tag_key: volume_tag_value
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- name: Validate volume workload changes
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ not results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '322122547200' and item.segmentSize == 131072 and
|
||
|
item.cacheSettings.readCacheEnable and not item.cacheSettings.writeCacheEnable and
|
||
|
{'key': 'volumeTypeId', 'value': 'volume'} in item.metadata }}"
|
||
|
msg: "Failed to not modify volume metadata!"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/workloads"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: workload_tags
|
||
|
- assert:
|
||
|
that: "{{ item.name == 'volume_tag' and
|
||
|
{'key': 'volume_tag_key', 'value': 'volume_tag_value'} in item.workloadAttributes }}"
|
||
|
msg: "Workload tag failed not to be changed"
|
||
|
loop: "{{ lookup('list', volume_tag_id, wantList=True) }}"
|
||
|
vars:
|
||
|
volume_tag_id: "{{ workload_tags | json_query('json[?name==`volume_tag`]') }}"
|
||
|
|
||
|
- name: Workload tag (no change, just using workload_name)
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 300
|
||
|
size_unit: gb
|
||
|
write_cache_enable: false
|
||
|
read_cache_enable: true
|
||
|
workload_name: volume_tag
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- name: Validate volume workload changes
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ not results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '322122547200' and item.segmentSize == 131072 and
|
||
|
item.cacheSettings.readCacheEnable and not item.cacheSettings.writeCacheEnable and
|
||
|
{'key': 'volumeTypeId', 'value': 'volume'} in item.metadata }}"
|
||
|
msg: "Failed to not modify volume metadata!"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/workloads"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: workload_tags
|
||
|
- assert:
|
||
|
that: "{{ item.name == 'volume_tag' and
|
||
|
{'key': 'volume_tag_key', 'value': 'volume_tag_value'} in item.workloadAttributes }}"
|
||
|
msg: "Workload tag failed to not be modified!"
|
||
|
loop: "{{ lookup('list', volume_tag_id, wantList=True) }}"
|
||
|
vars:
|
||
|
volume_tag_id: "{{ workload_tags | json_query('json[?name==`volume_tag`]') }}"
|
||
|
|
||
|
- name: Add workload tag (change, new attributes)
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 300
|
||
|
size_unit: gb
|
||
|
write_cache_enable: false
|
||
|
read_cache_enable: true
|
||
|
workload_name: volume_tag
|
||
|
metadata:
|
||
|
volume_tag_key2: volume_tag_value2
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- name: Validate volume workload changes
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '322122547200' and item.segmentSize == 131072 and
|
||
|
item.cacheSettings.readCacheEnable and not item.cacheSettings.writeCacheEnable and
|
||
|
{'key': 'volumeTypeId', 'value': 'volume'} in item.metadata }}"
|
||
|
msg: "Failed to not modify volume metadata!"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/workloads"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: workload_tags
|
||
|
- assert:
|
||
|
that: "{{ item.name == 'volume_tag' and
|
||
|
{'key': 'volume_tag_key2', 'value': 'volume_tag_value2'} in item.workloadAttributes }}"
|
||
|
msg: "Workload tag failed to be updated!"
|
||
|
loop: "{{ lookup('list', volume_tag_id, wantList=True) }}"
|
||
|
vars:
|
||
|
volume_tag_id: "{{ workload_tags | json_query('json[?name==`volume_tag`]') }}"
|
||
|
|
||
|
- name: Remove workload tag from volume (change)
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 300
|
||
|
size_unit: gb
|
||
|
write_cache_enable: false
|
||
|
read_cache_enable: true
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- name: Validate volume workload changes
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '322122547200' and item.segmentSize == 131072 and
|
||
|
item.cacheSettings.readCacheEnable and not item.cacheSettings.writeCacheEnable and
|
||
|
item.metadata == []}}"
|
||
|
msg: "Failed to not modify volume metadata!"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/workloads"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: workload_tags
|
||
|
- assert:
|
||
|
that: "{{ item.name == 'volume_tag' and
|
||
|
{'key': 'volume_tag_key2', 'value': 'volume_tag_value2'} in item.workloadAttributes }}"
|
||
|
msg: "Workload tag failed to be updated!"
|
||
|
loop: "{{ lookup('list', volume_tag_id, wantList=True) }}"
|
||
|
vars:
|
||
|
volume_tag_id: "{{ workload_tags | json_query('json[?name==`volume_tag`]') }}"
|
||
|
|
||
|
- name: Delete workload tag
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/workloads"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: workload_tags
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/workloads/{{ item }}"
|
||
|
method: DELETE
|
||
|
status_code: 204
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
loop: "{{ lookup('list', volume_tag_id, wantList=True) }}"
|
||
|
vars:
|
||
|
volume_tag_id: "{{ workload_tags | json_query('json[?name==`volume_tag`].id') }}"
|
||
|
|
||
|
- name: Delete raid 0 storage pool
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: storage_pool
|
||
|
|
||
|
|
||
|
# *** Thin volume testing (May not work with simulator) ***
|
||
|
- name: Create dynamic disk pool
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: storage_pool
|
||
|
criteria_min_usable_capacity: 2
|
||
|
criteria_size_unit: tb
|
||
|
|
||
|
- name: Create thin volume
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: thin_volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 131072
|
||
|
size_unit: gb
|
||
|
thin_provision: true
|
||
|
thin_volume_repo_size: 32
|
||
|
thin_volume_max_repo_size: 1024
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/thin-volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'thin_volume' and item.thinProvisioned and
|
||
|
item.capacity == '140737488355328' and item.initialProvisionedCapacity == '34359738368' and
|
||
|
item.provisionedCapacityQuota == '1099511627776' and item.expansionPolicy == 'automatic' }}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`thin_volume`]') }}"
|
||
|
|
||
|
- name: (Rerun) Create thin volume
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: thin_volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 131072
|
||
|
size_unit: gb
|
||
|
thin_provision: true
|
||
|
thin_volume_repo_size: 32
|
||
|
thin_volume_max_repo_size: 1024
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/thin-volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ not results.changed and item.name == 'thin_volume' and item.thinProvisioned and
|
||
|
item.capacity == '140737488355328' and item.initialProvisionedCapacity == '34359738368' and
|
||
|
item.provisionedCapacityQuota == '1099511627776' and item.expansionPolicy == 'automatic' }}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`thin_volume`]') }}"
|
||
|
|
||
|
|
||
|
- name: Expand thin volume's virtual size
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: thin_volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 262144
|
||
|
size_unit: gb
|
||
|
thin_provision: true
|
||
|
thin_volume_repo_size: 32
|
||
|
thin_volume_max_repo_size: 1024
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/thin-volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'thin_volume' and item.thinProvisioned and
|
||
|
item.capacity == '281474976710656' and item.initialProvisionedCapacity == '34359738368' and
|
||
|
item.provisionedCapacityQuota == '1099511627776' and item.expansionPolicy == 'automatic' }}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`thin_volume`]') }}"
|
||
|
|
||
|
|
||
|
- name: Expand thin volume's maximum repository size
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: thin_volume
|
||
|
storage_pool_name: storage_pool
|
||
|
size: 262144
|
||
|
size_unit: gb
|
||
|
thin_provision: true
|
||
|
thin_volume_repo_size: 32
|
||
|
thin_volume_max_repo_size: 2048
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/thin-volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'thin_volume' and item.thinProvisioned and
|
||
|
item.capacity == '281474976710656' and item.initialProvisionedCapacity == '34359738368' and
|
||
|
item.provisionedCapacityQuota == '2199023255552' and item.expansionPolicy == 'automatic' }}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`thin_volume`]') }}"
|
||
|
|
||
|
- name: Create dynamic disk pool
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: storage_pool2
|
||
|
criteria_min_usable_capacity: 2
|
||
|
criteria_size_unit: tb
|
||
|
- pause: seconds=15
|
||
|
|
||
|
- name: Create second thin volume with manual expansion policy
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: thin_volume2
|
||
|
storage_pool_name: storage_pool2
|
||
|
size_unit: gb
|
||
|
size: 131072
|
||
|
thin_provision: true
|
||
|
thin_volume_repo_size: 32
|
||
|
thin_volume_max_repo_size: 32
|
||
|
thin_volume_expansion_policy: manual
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/thin-volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'thin_volume2' and item.thinProvisioned and
|
||
|
item.capacity == '140737488355328' and item.initialProvisionedCapacity == '34359738368' and
|
||
|
item.currentProvisionedCapacity == '34359738368' and item.expansionPolicy == 'manual' }}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`thin_volume2`]') }}"
|
||
|
|
||
|
|
||
|
- name: Create second thin volume with manual expansion policy
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: thin_volume2
|
||
|
storage_pool_name: storage_pool2
|
||
|
size_unit: gb
|
||
|
size: 131072
|
||
|
thin_provision: true
|
||
|
thin_volume_repo_size: 288
|
||
|
thin_volume_max_repo_size: 288
|
||
|
thin_volume_expansion_policy: manual
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/thin-volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'thin_volume2' and item.thinProvisioned and
|
||
|
item.capacity == '140737488355328' and item.initialProvisionedCapacity == '34359738368' and
|
||
|
item.currentProvisionedCapacity == '309237645312' and item.expansionPolicy == 'manual' }}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`thin_volume2`]') }}"
|
||
|
|
||
|
- name: Modify second thin volume to use automatic expansion policy
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: thin_volume2
|
||
|
storage_pool_name: storage_pool2
|
||
|
size_unit: gb
|
||
|
size: 131072
|
||
|
thin_provision: true
|
||
|
thin_volume_repo_size: 288
|
||
|
thin_volume_max_repo_size: 288
|
||
|
thin_volume_expansion_policy: automatic
|
||
|
register: results
|
||
|
- pause: seconds=15
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/thin-volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'thin_volume2' and item.thinProvisioned and
|
||
|
item.capacity == '140737488355328' and item.initialProvisionedCapacity == '34359738368' and
|
||
|
item.currentProvisionedCapacity == '309237645312' and item.expansionPolicy == 'automatic' }}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`thin_volume2`]') }}"
|
||
|
|
||
|
- name: Delete raid 0 storage pool
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: "{{ item }}"
|
||
|
loop:
|
||
|
- storage_pool
|
||
|
- storage_pool2
|
||
|
|
||
|
- name: Create raid 0 storage pool
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: storage_pool
|
||
|
criteria_min_usable_capacity: 5
|
||
|
criteria_size_unit: tb
|
||
|
erase_secured_drives: yes
|
||
|
raid_level: raid0
|
||
|
|
||
|
# Thick volume expansion testing: wait and don't wait for operation to complete
|
||
|
- name: Create raid 6 storage pool
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: storage_pool3
|
||
|
criteria_min_usable_capacity: 5
|
||
|
criteria_size_unit: tb
|
||
|
erase_secured_drives: yes
|
||
|
raid_level: raid6
|
||
|
|
||
|
- name: Delete volume in raid 6 storage pool
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: volume
|
||
|
|
||
|
- name: Create volume in raid 0 storage pool for expansion testing
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool3
|
||
|
size: 1
|
||
|
size_unit: gb
|
||
|
register: results
|
||
|
- pause: seconds=10
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '1073741824' and item.segmentSize == 131072}}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
|
||
|
- name: Modify volume in raid 0 storage pool and wait for expansion testing
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool3
|
||
|
size: 10
|
||
|
size_unit: gb
|
||
|
wait_for_initialization: True
|
||
|
register: results
|
||
|
- pause: seconds=10
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes/{{ volume[0]['id'] }}/expand"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: expansion_state
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '10737418240' and item.segmentSize == 131072 and
|
||
|
expansion_state['json']['action'] == 'none'}}"
|
||
|
msg: "Volume expansion test failed."
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
|
||
|
- name: Modify volume in raid 0 storage pool and don't wait for expansion testing
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: volume
|
||
|
storage_pool_name: storage_pool3
|
||
|
size: 100
|
||
|
size_unit: gb
|
||
|
wait_for_initialization: False
|
||
|
register: results
|
||
|
- pause: seconds=10
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
- uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ credentials.ssid }}/volumes/{{ volume[0]['id'] }}/expand"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
validate_certs: no
|
||
|
register: expansion_state
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
- assert:
|
||
|
that: "{{ results.changed and item.name == 'volume' and not item.thinProvisioned and
|
||
|
item.capacity == '107374182400' and item.segmentSize == 131072 and expansion_state['json']['action'] != 'none'}}"
|
||
|
msg: "Failed to create volume"
|
||
|
loop: "{{ lookup('list', volume, wantList=True) }}"
|
||
|
vars:
|
||
|
volume: "{{ current | json_query('json[?name==`volume`]') }}"
|
||
|
|
||
|
- name: Delete raid 0 storage pool
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: "{{ item }}"
|
||
|
loop:
|
||
|
- storage_pool3
|