text: #!/usr/bin/python
  # -*- coding: utf-8 -*-
  
  # (c) 2017, 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_pg
  version_added: '2.4'
  short_description: Manage protection groups on Pure Storage FlashArrays
  description:
  - Create, delete or modify protection groups on Pure Storage FlashArrays.
  author:
  - Simon Dodsley (@sdodsley)
  options:
    pgroup:
      description:
      - The name of the protection group.
      required: true
    state:
      description:
      - Define whether the protection group should exist or not.
      default: present
      choices: [ absent, present ]
    volume:
      description:
      - List of existing volumes to add to protection group.
    host:
      description:
      - List of existing hosts to add to protection group.
    hostgroup:
      description:
      - List of existing hostgroups to add to protection group.
    eradicate:
      description:
      - Define whether to eradicate the protection group on delete and leave in trash.
      type : bool
      default: 'no'
    enabled:
      description:
      - Define whether to enabled snapshots for the protection group.
      type : bool
      default: 'yes'
  extends_documentation_fragment:
  - purestorage.fa
  '''
  
  EXAMPLES = r'''
  - name: Create new protection group
    purefa_pg:
      pgroup: foo
      fa_url: 10.10.10.2
      api_token: e31060a7-21fc-e277-6240-25983c6c4592
  
  - name: Create new protection group with snapshots disabled
    purefa_pg:
      pgroup: foo
      enabled: false
      fa_url: 10.10.10.2
      api_token: e31060a7-21fc-e277-6240-25983c6c4592
  
  - name: Delete protection group
    purefa_pg:
      pgroup: foo
      eradicate: true
      fa_url: 10.10.10.2
      api_token: e31060a7-21fc-e277-6240-25983c6c4592
      state: absent
  
  - name: Create protection group for hostgroups
    purefa_pg:
      pgroup: bar
      hostgroup:
        - hg1
        - hg2
      fa_url: 10.10.10.2
      api_token: e31060a7-21fc-e277-6240-25983c6c4592
  
  - name: Create protection group for hosts
    purefa_pg:
      pgroup: bar
      host:
        - host1
        - host2
      fa_url: 10.10.10.2
      api_token: e31060a7-21fc-e277-6240-25983c6c4592
  
  - name: Create protection group for volumes
    purefa_pg:
      pgroup: bar
      volume:
        - vol1
        - vol2
      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
  
  
  try:
      from purestorage import purestorage
      HAS_PURESTORAGE = True
  except ImportError:
      HAS_PURESTORAGE = False
  
  
  def get_pgroup(module, array):
  
      pgroup = None
  
      for h in array.list_pgroups():
          if h["name"] == module.params['pgroup']:
              pgroup = h
              break
  
      return pgroup
  
  
  def make_pgroup(module, array):
  
      changed = True
  
      if not module.check_mode:
          host = array.create_pgroup(module.params['pgroup'])
          array.set_pgroup(module.params['pgroup'], snap_enabled=module.params['enabled'])
          if module.params['volume']:
              array.set_pgroup(module.params['pgroup'], vollist=module.params['volume'])
          if module.params['host']:
              array.set_pgroup(module.params['pgroup'], hostlist=module.params['host'])
          if module.params['hostgroup']:
              array.set_pgroup(module.params['pgroup'], hgrouplist=module.params['hostgroup'])
      module.exit_json(changed=changed)
  
  
  def update_pgroup(module, array):
      changed = False
      pgroup = module.params['pgroup']
      module.exit_json(changed=changed)
  
  
  def delete_pgroup(module, array):
      changed = True
      if not module.check_mode:
          array.destroy_pgroup(module.params['pgroup'])
          if module.params['eradicate']:
              array.eradicate_pgroup(module.params['pgroup'])
      module.exit_json(changed=changed)
  
  
  def main():
      argument_spec = purefa_argument_spec()
      argument_spec.update(dict(
          pgroup=dict(type='str', required=True),
          state=dict(type='str', default='present', choices=['absent', 'present']),
          volume=dict(type='list'),
          host=dict(type='list'),
          hostgroup=dict(type='list'),
          eradicate=dict(type='bool', default=False),
          enabled=dict(type='bool', default=True),
      ))
  
      module = AnsibleModule(argument_spec, supports_check_mode=True)
  
      if not HAS_PURESTORAGE:
          module.fail_json(msg='purestorage sdk is required for this module in host')
  
      state = module.params['state']
      array = get_system(module)
      pgroup = get_pgroup(module, array)
  
      if module.params['host']:
          try:
              for h in module.params['host']:
                  array.get_host(h)
          except:
              module.fail_json(msg='Host {} not found'.format(h))
  
      if module.params['hostgroup']:
          try:
              for hg in module.params['hostgroup']:
                  array.get_hgroup(hg)
          except:
              module.fail_json(msg='Hostgroup {} not found'.format(hg))
  
      if pgroup and state == 'present':
          update_pgroup(module, array)
      elif pgroup and state == 'absent':
          delete_pgroup(module, array)
      elif pgroup is None and state == 'absent':
          module.exit_json(changed=False)
      else:
          make_pgroup(module, array)
  
  
  if __name__ == '__main__':
      main()
  