326 lines
9.8 KiB
YAML
326 lines
9.8 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 }}/devmgr/v2"
|
||
|
api_username: "{{ netapp_e_api_username }}"
|
||
|
api_password: "{{ netapp_e_api_password }}"
|
||
|
ssid: "{{ netapp_e_ssid }}"
|
||
|
validate_certs: no
|
||
|
|
||
|
- name: set credentials
|
||
|
set_fact:
|
||
|
credentials: *creds
|
||
|
# ****************************************************
|
||
|
# *** Setup test hosts, storage pools, and volumes ***
|
||
|
# ****************************************************
|
||
|
- name: Create host for host mapping
|
||
|
netapp_e_host:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: test_host_mapping_host
|
||
|
host_type: 27
|
||
|
- netapp_e_host:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: test_host1
|
||
|
host_type: 27
|
||
|
- netapp_e_host:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: test_host2
|
||
|
host_type: 27
|
||
|
- name: Create storage pool for host mapping
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: test_host_mapping_storage_pool
|
||
|
raid_level: raid0
|
||
|
criteria_min_usable_capacity: 1
|
||
|
- name: Create volume for host mapping
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: test_host_mapping_volume
|
||
|
storage_pool_name: test_host_mapping_storage_pool
|
||
|
size: 1
|
||
|
- name: Create volume for host mapping
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
name: test_host_mapping_volume2
|
||
|
storage_pool_name: test_host_mapping_storage_pool
|
||
|
size: 1
|
||
|
|
||
|
# **********************************************
|
||
|
# *** Create new lun between host and volume ***
|
||
|
# **********************************************
|
||
|
- name: Create netapp_e_lun_mapping
|
||
|
netapp_e_lun_mapping:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
target: test_host_mapping_host
|
||
|
volume: test_host_mapping_volume
|
||
|
register: result
|
||
|
|
||
|
- name: Verify lun mapping
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ netapp_e_ssid }}/graph/xpath-filter?query=//volume[name='test_host_mapping_volume']"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
body_format: json
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
|
||
|
- assert:
|
||
|
that: "{{ item['mapped'] }}"
|
||
|
msg: "Lun failed to be created."
|
||
|
loop: "{{ lookup('list', current.json)}}"
|
||
|
|
||
|
# QUICK VERIFICATION OF MISMATCHING TARGET/TARGET_TYPE - GOOD
|
||
|
#- name: Create netapp_e_lun_mapping
|
||
|
# netapp_e_lun_mapping:
|
||
|
# <<: *creds
|
||
|
# state: present
|
||
|
# target: test_host_mapping_host
|
||
|
# volume: test_host_mapping_volume
|
||
|
# lun: 100
|
||
|
# target_type: group
|
||
|
# register: result
|
||
|
#
|
||
|
#- pause: seconds=30
|
||
|
# **************************************************************
|
||
|
# *** Repeat previous lun creation play and verify unchanged ***
|
||
|
# **************************************************************
|
||
|
- name: Repeat lun creation
|
||
|
netapp_e_lun_mapping:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
target: test_host_mapping_host
|
||
|
volume: test_host_mapping_volume
|
||
|
register: result
|
||
|
|
||
|
- name: Verify lun mapping
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ netapp_e_ssid }}/graph/xpath-filter?query=//volume[name='test_host_mapping_volume']"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
body_format: json
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
|
||
|
- assert:
|
||
|
that: "{{ item['mapped'] and result.changed==False }}"
|
||
|
msg: "Lun failed to be unchanged."
|
||
|
loop: "{{ lookup('list', current.json)}}"
|
||
|
|
||
|
# ****************************************************************
|
||
|
# *** Move existing lun to default target and verify unchanged ***
|
||
|
# ****************************************************************
|
||
|
- name: Move lun to default target
|
||
|
netapp_e_lun_mapping:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
volume: test_host_mapping_volume
|
||
|
register: result
|
||
|
|
||
|
- name: Verify lun mapping
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ netapp_e_ssid }}/graph/xpath-filter?query=//volume[name='test_host_mapping_volume']"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
body_format: json
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
|
||
|
- assert:
|
||
|
that: "{{ item['mapped'] }}"
|
||
|
msg: "Lun failed to be created."
|
||
|
loop: "{{ lookup('list', current.json)}}"
|
||
|
|
||
|
# *****************************************************************
|
||
|
# *** Move existing lun to specific target and verify unchanged ***
|
||
|
# *****************************************************************
|
||
|
- name: Move lun to default target
|
||
|
netapp_e_lun_mapping:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
target: test_host_mapping_host
|
||
|
volume: test_host_mapping_volume
|
||
|
register: result
|
||
|
|
||
|
- name: Verify lun mapping
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ netapp_e_ssid }}/graph/xpath-filter?query=//volume[name='test_host_mapping_volume']"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
body_format: json
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
|
||
|
- assert:
|
||
|
that: "{{ item['mapped'] }}"
|
||
|
msg: "Lun failed to be created."
|
||
|
loop: "{{ lookup('list', current.json)}}"
|
||
|
|
||
|
# *******************************************
|
||
|
# *** Modify a volume mapping's lun value ***
|
||
|
# *******************************************
|
||
|
- name: Change volume mapping's lun value
|
||
|
netapp_e_lun_mapping:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
target: test_host_mapping_host
|
||
|
volume: test_host_mapping_volume
|
||
|
lun: 100
|
||
|
register: result
|
||
|
|
||
|
- pause: seconds=15
|
||
|
|
||
|
- name: Verify lun mapping
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ netapp_e_ssid }}/graph/xpath-filter?query=//volume[name='test_host_mapping_volume']"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
body_format: json
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
|
||
|
- assert:
|
||
|
that: "{{ result.changed }}"
|
||
|
msg: "Lun failed to be unchanged."
|
||
|
loop: "{{ lookup('list', current.json)}}"
|
||
|
|
||
|
- name: Verify mapping fails when lun already in use on existing host object
|
||
|
netapp_e_lun_mapping:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
target: test_host_mapping_host
|
||
|
volume: test_host_mapping_volume2
|
||
|
lun: 100
|
||
|
register: result
|
||
|
ignore_errors: True
|
||
|
|
||
|
- pause: seconds=15
|
||
|
|
||
|
- assert:
|
||
|
that: "{{ not result.changed }}"
|
||
|
msg: "Lun succeeded when it should have failed."
|
||
|
loop: "{{ lookup('list', current.json)}}"
|
||
|
|
||
|
- name: Verify mapping succeeds when the same lun is used on multiple host objects.
|
||
|
netapp_e_lun_mapping:
|
||
|
<<: *creds
|
||
|
state: present
|
||
|
target: test_host1
|
||
|
volume: test_host_mapping_volume2
|
||
|
lun: 100
|
||
|
register: result
|
||
|
|
||
|
- pause: seconds=15
|
||
|
|
||
|
- assert:
|
||
|
that: "{{ result.changed }}"
|
||
|
msg: "Lun failed to be unchanged."
|
||
|
loop: "{{ lookup('list', current.json)}}"
|
||
|
|
||
|
# *************************************************************************************************
|
||
|
# *** Verify that exact mapping details but different lun results in an unchanged configuration ***
|
||
|
# *************************************************************************************************
|
||
|
- name: Verify that exact mapping details but different lun results in an unchanged configuration
|
||
|
netapp_e_lun_mapping:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
target: test_host_mapping_host
|
||
|
volume: test_host_mapping_volume
|
||
|
lun: 99
|
||
|
register: result
|
||
|
|
||
|
- name: Verify lun mapping
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ netapp_e_ssid }}/graph/xpath-filter?query=//volume[name='test_host_mapping_volume']"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
body_format: json
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
|
||
|
- assert:
|
||
|
that: "{{ item['mapped'] and not result.changed }}"
|
||
|
msg: "Lun failed to be unchanged."
|
||
|
loop: "{{ lookup('list', current.json)}}"
|
||
|
|
||
|
# ********************************
|
||
|
# *** Delete newly created lun ***
|
||
|
# ********************************
|
||
|
- name: Delete lun creation
|
||
|
netapp_e_lun_mapping:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
target: test_host_mapping_host
|
||
|
volume: test_host_mapping_volume
|
||
|
register: result
|
||
|
|
||
|
- name: Verify lun mapping
|
||
|
uri:
|
||
|
url: "{{ credentials.api_url }}/storage-systems/{{ netapp_e_ssid }}/graph/xpath-filter?query=//volume[name='test_host_mapping_volume']"
|
||
|
user: "{{ credentials.api_username }}"
|
||
|
password: "{{ credentials.api_password }}"
|
||
|
body_format: json
|
||
|
validate_certs: no
|
||
|
register: current
|
||
|
|
||
|
- assert:
|
||
|
that: "{{ not item['mapped'] }}"
|
||
|
msg: "Lun failed to be created."
|
||
|
loop: "{{ lookup('list', current.json)}}"
|
||
|
|
||
|
# ********************************************************
|
||
|
# *** Tear down test hosts, storage pools, and volumes ***
|
||
|
# ********************************************************
|
||
|
- name: Delete volume for host mapping
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: test_host_mapping_volume
|
||
|
storage_pool_name: test_host_mapping_storage_pool
|
||
|
size: 1
|
||
|
- name: Delete volume for host mapping
|
||
|
netapp_e_volume:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: test_host_mapping_volume2
|
||
|
storage_pool_name: test_host_mapping_storage_pool
|
||
|
size: 1
|
||
|
- name: Delete storage pool for host mapping
|
||
|
netapp_e_storagepool:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: test_host_mapping_storage_pool
|
||
|
raid_level: raid0
|
||
|
criteria_min_usable_capacity: 1
|
||
|
- name: Delete host for host mapping
|
||
|
netapp_e_host:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: test_host_mapping_host
|
||
|
host_type_index: 27
|
||
|
- name: Delete host for host mapping
|
||
|
netapp_e_host:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: test_host2
|
||
|
host_type_index: 27
|
||
|
- name: Delete host for host mapping
|
||
|
netapp_e_host:
|
||
|
<<: *creds
|
||
|
state: absent
|
||
|
name: test_host1
|
||
|
host_type_index: 27
|