From 26ad33bd8ac71e381b7ca48e1ccbab0023846235 Mon Sep 17 00:00:00 2001 From: Simon Dodsley Date: Mon, 5 Nov 2018 11:58:04 -0500 Subject: [PATCH] New Pure Storage FlashArray module to enable/disable Remote Assist (#47592) --- .../modules/storage/purestorage/purefa_ra.py | 111 ++++++++++++++++++ 1 file changed, 111 insertions(+) create mode 100644 lib/ansible/modules/storage/purestorage/purefa_ra.py diff --git a/lib/ansible/modules/storage/purestorage/purefa_ra.py b/lib/ansible/modules/storage/purestorage/purefa_ra.py new file mode 100644 index 00000000000..d13d6b44de5 --- /dev/null +++ b/lib/ansible/modules/storage/purestorage/purefa_ra.py @@ -0,0 +1,111 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# (c) 2018, Simon Dodsley (simon@purestorage.com) +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + +ANSIBLE_METADATA = {'metadata_version': '1.1', + 'status': ['preview'], + 'supported_by': 'community'} + +DOCUMENTATION = r''' +--- +module: purefa_ra +version_added: '2.8' +short_description: Enable or Disable Pure Storage FlashArray Remote Assist +description: +- Enablke or Disable Remote Assist for a Pure Storage FlashArray. +author: +- Simon Dodsley (@sdodsley) +options: + state: + description: + - Define state of remote assist + - When set to I(enable) the RA port can be exposed using the + I(debug) module. + default: enable + choices: [ enable, disable ] +extends_documentation_fragment: +- purestorage.fa +''' + +EXAMPLES = r''' +- name: Enable Remote Assist port + purefa_ra: + fa_url: 10.10.10.2 + api_token: e31060a7-21fc-e277-6240-25983c6c4592 + + debug: + var: ansible_facts.fa_ra + +- name: Disable Remote Assist port + purefa_ra: + state: disable + fa_url: 10.10.10.2 + api_token: e31060a7-21fc-e277-6240-25983c6c4592 +''' + +RETURN = r''' +''' + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.pure import get_system, purefa_argument_spec + + +def enable_ra(module, array): + """Enable Remote Assist""" + changed = False + ra_facts = {} + if array.get_remote_assist_status()['status'] != 'enabled': + try: + ra_data = array.enable_remote_assist() + ra_facts['fa_ra'] = {'name': ra_data['name'], + 'port': ra_data['port']} + changed = True + except: + module.fail_json(msg='Enabling Remote Assist failed') + else: + try: + ra_data = array.get_remote_assist_status() + ra_facts['fa_ra'] = {'name': ra_data['name'], + 'port': ra_data['port']} + except: + module.fail_json(msg='Getting Remote Assist failed') + module.exit_json(changed=changed, ansible_facts=ra_facts) + + +def disable_ra(module, array): + """Disable Remote Assist""" + changed = False + if array.get_remote_assist_status()['status'] == 'enabled': + try: + array.disable_remote_assist() + changed = True + except: + module.fail_json(msg='Disabling Remote Assist failed') + module.exit_json(changed=changed) + + +def main(): + argument_spec = purefa_argument_spec() + argument_spec.update(dict( + state=dict(type='str', default='enable', choices=['enable', 'disable']), + )) + + module = AnsibleModule(argument_spec, + supports_check_mode=False) + + array = get_system(module) + + if module.params['state'] == 'enable': + enable_ra(module, array) + else: + disable_ra(module, array) + module.exit_json(changed=False) + + +if __name__ == '__main__': + main()