|
|
|
@ -108,6 +108,7 @@ import time
|
|
|
|
|
|
|
|
|
|
ISCSIADM = 'iscsiadm'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def compare_nodelists(l1, l2):
|
|
|
|
|
|
|
|
|
|
l1.sort()
|
|
|
|
@ -159,7 +160,7 @@ def target_loggedon(module, target):
|
|
|
|
|
|
|
|
|
|
cmd = '%s --mode session' % iscsiadm_cmd
|
|
|
|
|
(rc, out, err) = module.run_command(cmd)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if rc == 0:
|
|
|
|
|
return target in out
|
|
|
|
|
elif rc == 21:
|
|
|
|
@ -186,7 +187,7 @@ def target_login(module, target):
|
|
|
|
|
|
|
|
|
|
cmd = '%s --mode node --targetname %s --login' % (iscsiadm_cmd, target)
|
|
|
|
|
(rc, out, err) = module.run_command(cmd)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if rc > 0:
|
|
|
|
|
module.fail_json(cmd=cmd, rc=rc, msg=err)
|
|
|
|
|
|
|
|
|
@ -195,7 +196,7 @@ def target_logout(module, target):
|
|
|
|
|
|
|
|
|
|
cmd = '%s --mode node --targetname %s --logout' % (iscsiadm_cmd, target)
|
|
|
|
|
(rc, out, err) = module.run_command(cmd)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if rc > 0:
|
|
|
|
|
module.fail_json(cmd=cmd, rc=rc, msg=err)
|
|
|
|
|
|
|
|
|
@ -206,25 +207,22 @@ def target_device_node(module, target):
|
|
|
|
|
# a given target...
|
|
|
|
|
|
|
|
|
|
devices = glob.glob('/dev/disk/by-path/*%s*' % target)
|
|
|
|
|
if len(devices) == 0:
|
|
|
|
|
return None
|
|
|
|
|
else:
|
|
|
|
|
devdisks = []
|
|
|
|
|
for dev in devices:
|
|
|
|
|
# exclude partitions
|
|
|
|
|
if "-part" not in dev:
|
|
|
|
|
devdisk = os.path.realpath(dev)
|
|
|
|
|
# only add once (multi-path?)
|
|
|
|
|
if devdisk not in devdisks:
|
|
|
|
|
devdisks.append(devdisk)
|
|
|
|
|
return devdisks
|
|
|
|
|
devdisks = []
|
|
|
|
|
for dev in devices:
|
|
|
|
|
# exclude partitions
|
|
|
|
|
if "-part" not in dev:
|
|
|
|
|
devdisk = os.path.realpath(dev)
|
|
|
|
|
# only add once (multi-path?)
|
|
|
|
|
if devdisk not in devdisks:
|
|
|
|
|
devdisks.append(devdisk)
|
|
|
|
|
return devdisks
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def target_isauto(module, target):
|
|
|
|
|
|
|
|
|
|
cmd = '%s --mode node --targetname %s' % (iscsiadm_cmd, target)
|
|
|
|
|
(rc, out, err) = module.run_command(cmd)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if rc == 0:
|
|
|
|
|
lines = out.splitlines()
|
|
|
|
|
for line in lines:
|
|
|
|
@ -239,7 +237,7 @@ def target_setauto(module, target):
|
|
|
|
|
|
|
|
|
|
cmd = '%s --mode node --targetname %s --op=update --name node.startup --value automatic' % (iscsiadm_cmd, target)
|
|
|
|
|
(rc, out, err) = module.run_command(cmd)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if rc > 0:
|
|
|
|
|
module.fail_json(cmd=cmd, rc=rc, msg=err)
|
|
|
|
|
|
|
|
|
@ -248,7 +246,7 @@ def target_setmanual(module, target):
|
|
|
|
|
|
|
|
|
|
cmd = '%s --mode node --targetname %s --op=update --name node.startup --value manual' % (iscsiadm_cmd, target)
|
|
|
|
|
(rc, out, err) = module.run_command(cmd)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if rc > 0:
|
|
|
|
|
module.fail_json(cmd=cmd, rc=rc, msg=err)
|
|
|
|
|
|
|
|
|
@ -259,7 +257,7 @@ def main():
|
|
|
|
|
module = AnsibleModule(
|
|
|
|
|
argument_spec = dict(
|
|
|
|
|
|
|
|
|
|
# target
|
|
|
|
|
# target
|
|
|
|
|
portal = dict(required=False, aliases=['ip']),
|
|
|
|
|
port = dict(required=False, default=3260),
|
|
|
|
|
target = dict(required=False, aliases=['name', 'targetname']),
|
|
|
|
@ -272,14 +270,14 @@ def main():
|
|
|
|
|
auto_node_startup = dict(type='bool', aliases=['automatic']),
|
|
|
|
|
discover = dict(type='bool', default=False),
|
|
|
|
|
show_nodes = dict(type='bool', default=False)
|
|
|
|
|
),
|
|
|
|
|
),
|
|
|
|
|
|
|
|
|
|
required_together=[['discover_user', 'discover_pass'],
|
|
|
|
|
['node_user', 'node_pass']],
|
|
|
|
|
supports_check_mode=True
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
global iscsiadm_cmd
|
|
|
|
|
global iscsiadm_cmd
|
|
|
|
|
iscsiadm_cmd = module.get_bin_path('iscsiadm', required=True)
|
|
|
|
|
|
|
|
|
|
# parameters
|
|
|
|
@ -295,7 +293,7 @@ def main():
|
|
|
|
|
|
|
|
|
|
cached = iscsi_get_cached_nodes(module, portal)
|
|
|
|
|
|
|
|
|
|
# return json dict
|
|
|
|
|
# return json dict
|
|
|
|
|
result = {}
|
|
|
|
|
result['changed'] = False
|
|
|
|
|
|
|
|
|
@ -333,17 +331,17 @@ def main():
|
|
|
|
|
result['nodes'] = nodes
|
|
|
|
|
|
|
|
|
|
if login is not None:
|
|
|
|
|
loggedon = target_loggedon(module,target)
|
|
|
|
|
loggedon = target_loggedon(module, target)
|
|
|
|
|
if (login and loggedon) or (not login and not loggedon):
|
|
|
|
|
result['changed'] |= False
|
|
|
|
|
if login:
|
|
|
|
|
result['devicenodes'] = target_device_node(module,target)
|
|
|
|
|
result['devicenodes'] = target_device_node(module, target)
|
|
|
|
|
elif not check:
|
|
|
|
|
if login:
|
|
|
|
|
target_login(module, target)
|
|
|
|
|
# give udev some time
|
|
|
|
|
time.sleep(1)
|
|
|
|
|
result['devicenodes'] = target_device_node(module,target)
|
|
|
|
|
result['devicenodes'] = target_device_node(module, target)
|
|
|
|
|
else:
|
|
|
|
|
target_logout(module, target)
|
|
|
|
|
result['changed'] |= True
|
|
|
|
@ -371,7 +369,6 @@ def main():
|
|
|
|
|
module.exit_json(**result)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# import module snippets
|
|
|
|
|
from ansible.module_utils.basic import *
|
|
|
|
|
|
|
|
|
|