diff --git a/lib/ansible/modules/storage/purestorage/purefb_fs.py b/lib/ansible/modules/storage/purestorage/purefb_fs.py index c4fd124d01..f377889ff6 100644 --- a/lib/ansible/modules/storage/purestorage/purefb_fs.py +++ b/lib/ansible/modules/storage/purestorage/purefb_fs.py @@ -78,6 +78,15 @@ options: required: false type: bool default: false + hard_limit: + description: + - Define whether the capacity for a filesystem is a hard limit. + - CAUTION This will cause the filesystem to go Read-Only if the + capacity has already exceeded the logical size of the filesystem. + required: false + type: bool + default: false + version_added: 2.8 extends_documentation_fragment: - purestorage.fb ''' @@ -122,6 +131,7 @@ EXAMPLES = ''' nfs_rules: '*(ro)' snapshot: true fastremove: true + hard_limit: true smb: true state: present fb_url: 10.10.10.2 @@ -140,6 +150,9 @@ from ansible.module_utils.basic import AnsibleModule, human_to_bytes from ansible.module_utils.pure import get_blade, purefb_argument_spec +HARD_LIMIT_API_VERSION = '1.4' + + def get_fs(module, blade): """Return Filesystem or None""" fs = [] @@ -161,14 +174,26 @@ def create_fs(module, blade): if not module.check_mode: try: - fs_obj = FileSystem(name=module.params['name'], - provisioned=size, - fast_remove_directory_enabled=module.params['fastremove'], - snapshot_directory_enabled=module.params['snapshot'], - nfs=NfsRule(enabled=module.params['nfs'], rules=module.params['nfs_rules']), - smb=ProtocolRule(enabled=module.params['smb']), - http=ProtocolRule(enabled=module.params['http']) - ) + api_version = blade.api_version.list_versions().versions + if HARD_LIMIT_API_VERSION in api_version: + fs_obj = FileSystem(name=module.params['name'], + provisioned=size, + fast_remove_directory_enabled=module.params['fastremove'], + hard_limit_enabled=module.params['hard_limit'], + snapshot_directory_enabled=module.params['snapshot'], + nfs=NfsRule(enabled=module.params['nfs'], rules=module.params['nfs_rules']), + smb=ProtocolRule(enabled=module.params['smb']), + http=ProtocolRule(enabled=module.params['http']) + ) + else: + fs_obj = FileSystem(name=module.params['name'], + provisioned=size, + fast_remove_directory_enabled=module.params['fastremove'], + snapshot_directory_enabled=module.params['snapshot'], + nfs=NfsRule(enabled=module.params['nfs'], rules=module.params['nfs_rules']), + smb=ProtocolRule(enabled=module.params['smb']), + http=ProtocolRule(enabled=module.params['http']) + ) blade.file_systems.create_file_systems(fs_obj) changed = True except: @@ -223,6 +248,11 @@ def modify_fs(module, blade): if not module.params['fastremove'] and fs.fast_remove_directory_enabled: attr['fast_remove_directory_enabled'] = module.params['fastremove'] changed = True + api_version = blade.api_version.list_versions().versions + if HARD_LIMIT_API_VERSION in api_version: + if not module.params['hard_limit'] and fs.hard_limit_enabled: + attr['hard_limit_enabled'] = module.params['hard_limit'] + changed = True if changed: n_attr = FileSystem(**attr) try: @@ -277,6 +307,7 @@ def main(): http=dict(default='false', type='bool'), snapshot=dict(default='false', type='bool'), fastremove=dict(default='false', type='bool'), + hard_limit=dict(default='false', type='bool'), state=dict(default='present', choices=['present', 'absent']), size=dict() )