Fix idempotency issue when updating host object in FlashArray (#55347)
This commit is contained in:
parent
c50a75a41e
commit
30c9322e99
1 changed files with 48 additions and 28 deletions
|
@ -68,7 +68,7 @@ options:
|
|||
personality:
|
||||
type: str
|
||||
description:
|
||||
- Define which operating system the host is. Recommend for
|
||||
- Define which operating system the host is. Recommended for
|
||||
ActiveCluster integration.
|
||||
default: ''
|
||||
choices: ['hpux', 'vms', 'aix', 'esxi', 'solaris', 'hitachi-vsp', 'oracle-vm-server', 'delete', '']
|
||||
|
@ -186,29 +186,41 @@ def _set_host_initiators(module, array):
|
|||
module.fail_json(msg='Setting of FC WWNs failed.')
|
||||
|
||||
|
||||
def _update_host_initiators(module, array):
|
||||
def _update_host_initiators(module, array, answer=False):
|
||||
"""Change host initiator if iscsi or nvme or add new FC WWNs"""
|
||||
if module.params['protocol'] in ['nvme', 'mixed']:
|
||||
if module.params['nqn']:
|
||||
try:
|
||||
array.set_host(module.params['host'],
|
||||
nqnlist=module.params['nqn'])
|
||||
except Exception:
|
||||
module.fail_json(msg='Change of NVMe NQN failed.')
|
||||
current_nqn = array.get_host(module.params['host'])['nqn']
|
||||
if current_nqn != module.params['nqn']:
|
||||
try:
|
||||
array.set_host(module.params['host'],
|
||||
nqnlist=module.params['nqn'])
|
||||
answer = True
|
||||
except Exception:
|
||||
module.fail_json(msg='Change of NVMe NQN failed.')
|
||||
if module.params['protocol'] in ['iscsi', 'mixed']:
|
||||
if module.params['iqn']:
|
||||
try:
|
||||
array.set_host(module.params['host'],
|
||||
iqnlist=module.params['iqn'])
|
||||
except Exception:
|
||||
module.fail_json(msg='Change of iSCSI IQN failed.')
|
||||
current_iqn = array.get_host(module.params['host'])['iqn']
|
||||
if current_iqn != module.params['iqn']:
|
||||
try:
|
||||
array.set_host(module.params['host'],
|
||||
iqnlist=module.params['iqn'])
|
||||
answer = True
|
||||
except Exception:
|
||||
module.fail_json(msg='Change of iSCSI IQN failed.')
|
||||
if module.params['protocol'] in ['fc', 'mixed']:
|
||||
if module.params['wwns']:
|
||||
try:
|
||||
array.set_host(module.params['host'],
|
||||
addwwnlist=module.params['wwns'])
|
||||
except Exception:
|
||||
module.fail_json(msg='FC WWN additiona failed.')
|
||||
module.params['wwns'] = [wwn.replace(':', '') for wwn in module.params['wwns']]
|
||||
module.params['wwns'] = [wwn.upper() for wwn in module.params['wwns']]
|
||||
current_wwn = array.get_host(module.params['host'])['wwn']
|
||||
if current_wwn != module.params['wwns']:
|
||||
try:
|
||||
array.set_host(module.params['host'],
|
||||
wwnlist=module.params['wwns'])
|
||||
answer = True
|
||||
except Exception:
|
||||
module.fail_json(msg='FC WWN change failed.')
|
||||
return answer
|
||||
|
||||
|
||||
def _connect_new_volume(module, array, answer=False):
|
||||
|
@ -241,17 +253,26 @@ def _update_host_personality(module, array, answer=False):
|
|||
"""Change host personality. Only called when supported"""
|
||||
personality = array.get_host(module.params['host'], personality=True)['personality']
|
||||
if personality is None and module.params['personality'] != 'delete':
|
||||
array.set_host(module.params['host'],
|
||||
personality=module.params['personality'])
|
||||
answer = True
|
||||
if personality is not None:
|
||||
if module.params['personality'] == 'delete':
|
||||
array.set_host(module.params['host'], personality='')
|
||||
answer = True
|
||||
elif personality != module.params['personality']:
|
||||
try:
|
||||
array.set_host(module.params['host'],
|
||||
personality=module.params['personality'])
|
||||
answer = True
|
||||
except Exception:
|
||||
module.fail_json(msg='Personality setting failed.')
|
||||
if personality is not None:
|
||||
if module.params['personality'] == 'delete':
|
||||
try:
|
||||
array.set_host(module.params['host'], personality='')
|
||||
answer = True
|
||||
except Exception:
|
||||
module.fail_json(msg='Personality deletion failed.')
|
||||
elif personality != module.params['personality']:
|
||||
try:
|
||||
array.set_host(module.params['host'],
|
||||
personality=module.params['personality'])
|
||||
answer = True
|
||||
except Exception:
|
||||
module.fail_json(msg='Personality change failed.')
|
||||
return answer
|
||||
|
||||
|
||||
|
@ -291,9 +312,8 @@ def make_host(module, array):
|
|||
def update_host(module, array):
|
||||
changed = False
|
||||
volumes = array.list_host_connections(module.params['host'])
|
||||
if module.params['iqn'] or module.params['wwns']:
|
||||
_update_host_initiators(module, array)
|
||||
changed = True
|
||||
if module.params['iqn'] or module.params['wwns'] or module.params['nqn']:
|
||||
changed = _update_host_initiators(module, array)
|
||||
if module.params['volume']:
|
||||
current_vols = [vol['vol'] for vol in volumes]
|
||||
if not module.params['volume'] in current_vols:
|
||||
|
|
Loading…
Reference in a new issue