New lvol option: shrink. (#2135)

If shrink is set to false and size is lower than current lv size, dont try to shrink logical volume.
pull/18777/head
Yannig 8 years ago committed by Matt Clay
parent b8aa2ff9a7
commit daefbdad5c

@ -73,6 +73,12 @@ options:
description: description:
- Comma separated list of physical volumes e.g. /dev/sda,/dev/sdb - Comma separated list of physical volumes e.g. /dev/sda,/dev/sdb
required: false required: false
shrink:
version_added: "2.2"
description:
- shrink if current size is higher than size requested
required: false
default: yes
notes: notes:
- Filesystems on top of the volume are not resized. - Filesystems on top of the volume are not resized.
''' '''
@ -111,6 +117,9 @@ EXAMPLES = '''
# Reduce the logical volume to 512m # Reduce the logical volume to 512m
- lvol: vg=firefly lv=test size=512 force=yes - lvol: vg=firefly lv=test size=512 force=yes
# Set the logical volume to 512m and do not try to shrink if size is lower than current one
- lvol: vg=firefly lv=test size=512 shrink=no
# Remove the logical volume. # Remove the logical volume.
- lvol: vg=firefly lv=test state=absent force=yes - lvol: vg=firefly lv=test state=absent force=yes
@ -168,6 +177,7 @@ def main():
opts=dict(type='str'), opts=dict(type='str'),
state=dict(choices=["absent", "present"], default='present'), state=dict(choices=["absent", "present"], default='present'),
force=dict(type='bool', default='no'), force=dict(type='bool', default='no'),
shrink=dict(type='bool', default='yes'),
snapshot=dict(type='str', default=None), snapshot=dict(type='str', default=None),
pvs=dict(type='str') pvs=dict(type='str')
), ),
@ -190,6 +200,7 @@ def main():
opts = module.params['opts'] opts = module.params['opts']
state = module.params['state'] state = module.params['state']
force = module.boolean(module.params['force']) force = module.boolean(module.params['force'])
shrink = module.boolean(module.params['shrink'])
size_opt = 'L' size_opt = 'L'
size_unit = 'm' size_unit = 'm'
snapshot = module.params['snapshot'] snapshot = module.params['snapshot']
@ -328,7 +339,7 @@ def main():
tool = module.get_bin_path("lvextend", required=True) tool = module.get_bin_path("lvextend", required=True)
else: else:
module.fail_json(msg="Logical Volume %s could not be extended. Not enough free space left (%s%s required / %s%s available)" % (this_lv['name'], (size_requested - this_lv['size']), unit, size_free, unit)) module.fail_json(msg="Logical Volume %s could not be extended. Not enough free space left (%s%s required / %s%s available)" % (this_lv['name'], (size_requested - this_lv['size']), unit, size_free, unit))
elif this_lv['size'] > size_requested + this_vg['ext_size']: # more than an extent too large elif shrink and this_lv['size'] > size_requested + this_vg['ext_size']: # more than an extent too large
if size_requested == 0: if size_requested == 0:
module.fail_json(msg="Sorry, no shrinking of %s to 0 permitted." % (this_lv['name'])) module.fail_json(msg="Sorry, no shrinking of %s to 0 permitted." % (this_lv['name']))
elif not force: elif not force:
@ -358,7 +369,7 @@ def main():
tool = None tool = None
if int(size) > this_lv['size']: if int(size) > this_lv['size']:
tool = module.get_bin_path("lvextend", required=True) tool = module.get_bin_path("lvextend", required=True)
elif int(size) < this_lv['size']: elif shrink and int(size) < this_lv['size']:
if int(size) == 0: if int(size) == 0:
module.fail_json(msg="Sorry, no shrinking of %s to 0 permitted." % (this_lv['name'])) module.fail_json(msg="Sorry, no shrinking of %s to 0 permitted." % (this_lv['name']))
if not force: if not force:

Loading…
Cancel
Save