From 284660ee4e52eab92cf9ec4b5a751219def07140 Mon Sep 17 00:00:00 2001 From: Tzur Eliyahu Date: Mon, 5 Nov 2018 12:13:22 +0200 Subject: [PATCH] =?UTF-8?q?IBM=5FStorage:=20Added=20a=20module=20to=20defi?= =?UTF-8?q?ne=20domains=20on=20Spectrum=20Accelerate=20=E2=80=A6=20(#47873?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * IBM_Storage: Added a module to define domains on Spectrum Accelerate storage array --- .../modules/storage/ibm/ibm_sa_domain.py | 161 ++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 lib/ansible/modules/storage/ibm/ibm_sa_domain.py diff --git a/lib/ansible/modules/storage/ibm/ibm_sa_domain.py b/lib/ansible/modules/storage/ibm/ibm_sa_domain.py new file mode 100644 index 00000000000..19a37e00fc3 --- /dev/null +++ b/lib/ansible/modules/storage/ibm/ibm_sa_domain.py @@ -0,0 +1,161 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +# Copyright: (c) 2018, IBM CORPORATION +# Author(s): Tzur Eliyahu +# +# 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 = {'status': ['preview'], + 'supported_by': 'community', + 'metadata_version': '1.1'} + +DOCUMENTATION = ''' +--- +module: ibm_sa_domain +short_description: Manages domains in IBM Spectrum Accelerate storage systems. +version_added: "2.8" + +description: + - "This module can be used to adds domains to or removes them from IBM Spectrum Accelerate storage systems" + +options: + domain: + description: + - Name of the domain to be managed. + required: true + state: + description: + - The desired state of the domain. + required: true + default: "present" + choices: [ "present", "absent" ] + ldap_id: + description: + - ldap id to add to the domain. + required: false + size: + description: + - Size of the domain. + required: false + hard_capacity: + description: + - Hard capacity of the domain. + required: false + soft_capacity: + description: + - Soft capacity of the domain. + required: false + max_cgs: + description: + - Number of max cgs. + required: false + max_dms: + description: + - Number of max dms. + required: false + max_mirrors: + description: + - Number of max_mirrors. + required: false + max_pools: + description: + - Number of max_pools. + required: false + max_volumes: + description: + - Number of max_volumes. + required: false + perf_class: + description: + - Add the domain to a performance class. + required: false + +extends_documentation_fragment: + - ibm_storage + +author: + - Tzur Eliyahu (@tzure) +''' + +EXAMPLES = ''' +- name: Define new domain. + ibm_sa_domain: + domain: domain_name + size: domain_size + state: present + username: admin + password: secret + endpoints: hostdev-system + +- name: Delete domain. + ibm_sa_domain: + domain: domain_name + state: absent + username: admin + password: secret + endpoints: hostdev-system +''' +RETURN = ''' +msg: + description: module return status. + returned: as needed + type: string + sample: "domain 'domain_name' created successfully." +''' + +from ansible.module_utils.basic import AnsibleModule +from ansible.module_utils.ibm_sa_utils import execute_pyxcli_command, \ + connect_ssl, spectrum_accelerate_spec, is_pyxcli_installed + + +def main(): + argument_spec = spectrum_accelerate_spec() + argument_spec.update( + dict( + state=dict(default='present', choices=['present', 'absent']), + domain=dict(required=True), + size=dict(), + max_dms=dict(), + max_cgs=dict(), + ldap_id=dict(), + max_mirrors=dict(), + max_pools=dict(), + max_volumes=dict(), + perf_class=dict(), + hard_capacity=dict(), + soft_capacity=dict() + ) + ) + + module = AnsibleModule(argument_spec) + + is_pyxcli_installed(module) + + xcli_client = connect_ssl(module) + domain = xcli_client.cmd.domain_list( + domain=module.params['domain']).as_single_element + state = module.params['state'] + + state_changed = False + msg = 'Domain \'{0}\''.format(module.params['domain']) + if state == 'present' and not domain: + state_changed = execute_pyxcli_command( + module, 'domain_create', xcli_client) + msg += " created successfully." + elif state == 'absent' and domain: + state_changed = execute_pyxcli_command( + module, 'domain_delete', xcli_client) + msg += " deleted successfully." + else: + msg += " state unchanged." + + module.exit_json(changed=state_changed, msg=msg) + + +if __name__ == '__main__': + main()