summaryrefslogtreecommitdiff
path: root/system
diff options
context:
space:
mode:
authorAaron Brady <aaron@iweb.co.uk>2016-07-28 16:31:51 +0100
committerBrian Coca <bcoca@users.noreply.github.com>2016-07-28 11:31:51 -0400
commit3533ae2647d59a7e19e6bf372e448472f8567665 (patch)
tree186e4e06f47e457da1429e36e28dca5cb430536a /system
parentbe367cc2de2ebb88ea3ca18b33db4b0dfc65cb30 (diff)
downloadansible-modules-extras-3533ae2647d59a7e19e6bf372e448472f8567665.tar.gz
Add `active` and `inactive` states to the lvol module (#1974)
* Add `active` and `inactive` states to the lvol module * Honor the previous state of the changed variable * Move active/inactive states to active boolean parameter * Bump version_added to make Travis happy * Avoid bailing early is size isn't specified * Add invocation examples * Move "no size" up for code clarity
Diffstat (limited to 'system')
-rw-r--r--system/lvol.py45
1 files changed, 39 insertions, 6 deletions
diff --git a/system/lvol.py b/system/lvol.py
index 75d8c56a..817a4e66 100644
--- a/system/lvol.py
+++ b/system/lvol.py
@@ -48,8 +48,15 @@ options:
choices: [ "present", "absent" ]
default: present
description:
- - Control if the logical volume exists. If C(present) the C(size) option
- is required.
+ - Control if the logical volume exists. If C(present) and the
+ volume does not already exist then the C(size) option is required.
+ required: false
+ active:
+ version_added: "2.2"
+ choices: [ "yes", "no" ]
+ default: "yes"
+ description:
+ - Whether the volume is activate and visible to the host.
required: false
force:
version_added: "1.5"
@@ -125,6 +132,12 @@ EXAMPLES = '''
# Create a snapshot volume of the test logical volume.
- lvol: vg=firefly lv=test snapshot=snap1 size=100m
+
+# Deactivate a logical volume
+- lvol: vg=firefly lv=test active=false
+
+# Create a deactivated logical volume
+- lvol: vg=firefly lv=test size=512g active=false
'''
import re
@@ -140,7 +153,8 @@ def parse_lvs(data):
parts = line.strip().split(';')
lvs.append({
'name': parts[0].replace('[','').replace(']',''),
- 'size': int(decimal_point.match(parts[1]).group(1))
+ 'size': int(decimal_point.match(parts[1]).group(1)),
+ 'active': (parts[2][4] == 'a')
})
return lvs
@@ -178,6 +192,7 @@ def main():
state=dict(choices=["absent", "present"], default='present'),
force=dict(type='bool', default='no'),
shrink=dict(type='bool', default='yes'),
+ active=dict(type='bool', default='yes'),
snapshot=dict(type='str', default=None),
pvs=dict(type='str')
),
@@ -201,6 +216,7 @@ def main():
state = module.params['state']
force = module.boolean(module.params['force'])
shrink = module.boolean(module.params['shrink'])
+ active = module.boolean(module.params['active'])
size_opt = 'L'
size_unit = 'm'
snapshot = module.params['snapshot']
@@ -270,7 +286,7 @@ def main():
# Get information on logical volume requested
lvs_cmd = module.get_bin_path("lvs", required=True)
rc, current_lvs, err = module.run_command(
- "%s -a --noheadings --nosuffix -o lv_name,size --units %s --separator ';' %s" % (lvs_cmd, unit, vg))
+ "%s -a --noheadings --nosuffix -o lv_name,size,lv_attr --units %s --separator ';' %s" % (lvs_cmd, unit, vg))
if rc != 0:
if state == 'absent':
@@ -296,8 +312,6 @@ def main():
if state == 'present' and not size:
if this_lv is None:
module.fail_json(msg="No size given.")
- else:
- module.exit_json(changed=False, vg=vg, lv=this_lv['name'], size=this_lv['size'])
msg = ''
if this_lv is None:
@@ -325,6 +339,9 @@ def main():
else:
module.fail_json(msg="Failed to remove logical volume %s" % (lv), rc=rc, err=err)
+ elif not size:
+ pass
+
elif size_opt == 'l':
### Resize LV based on % value
tool = None
@@ -392,6 +409,22 @@ def main():
else:
module.fail_json(msg="Unable to resize %s to %s%s" % (lv, size, size_unit), rc=rc, err=err)
+ if this_lv is not None:
+ if active:
+ lvchange_cmd = module.get_bin_path("lvchange", required=True)
+ rc, _, err = module.run_command("%s -ay %s/%s" % (lvchange_cmd, vg, this_lv['name']))
+ if rc == 0:
+ module.exit_json(changed=((not this_lv['active']) or changed), vg=vg, lv=this_lv['name'], size=this_lv['size'])
+ else:
+ module.fail_json(msg="Failed to activate logical volume %s" % (lv), rc=rc, err=err)
+ else:
+ lvchange_cmd = module.get_bin_path("lvchange", required=True)
+ rc, _, err = module.run_command("%s -an %s/%s" % (lvchange_cmd, vg, this_lv['name']))
+ if rc == 0:
+ module.exit_json(changed=(this_lv['active'] or changed), vg=vg, lv=this_lv['name'], size=this_lv['size'])
+ else:
+ module.fail_json(msg="Failed to deactivate logical volume %s" % (lv), rc=rc, err=err)
+
module.exit_json(changed=changed, msg=msg)
# import module snippets