
    Vh                         d dl mZmZmZ eZdZdZdZd dl	m
Z
 d dlmZmZmZ d Zd Zd	 Zd
 Zd Zd Zd Zedk(  r e        yy)    )absolute_importdivisionprint_functiona  
module: vexata_eg
short_description: Manage export groups on Vexata VX100 storage arrays
description:
  - Create or delete export groups on a Vexata VX100 array.
  - An export group is a tuple of a volume group, initiator group and port group that allows a set of volumes to be exposed
    to one or more hosts through specific array ports.
author:
  - Sandeep Kasargod (@vexata)
attributes:
  check_mode:
    support: full
  diff_mode:
    support: none
options:
  name:
    description:
      - Export group name.
    required: true
    type: str
  state:
    description:
      - Creates export group when present or delete when absent.
    default: present
    choices: [present, absent]
    type: str
  vg:
    description:
      - Volume group name.
    type: str
  ig:
    description:
      - Initiator group name.
    type: str
  pg:
    description:
      - Port group name.
    type: str
extends_documentation_fragment:
  - community.general.vexata.vx100
  - community.general.attributes
a  
- name: Create export group named db_export.
  community.general.vexata_eg:
    name: db_export
    vg: dbvols
    ig: dbhosts
    pg: pg1
    state: present
    array: vx100_ultra.test.com
    user: admin
    password: secret

- name: Delete export group named db_export
  community.general.vexata_eg:
    name: db_export
    state: absent
    array: vx100_ultra.test.com
    user: admin
    password: secret

)AnsibleModule)argument_spec	get_arrayrequired_togetherc                     | j                   d   	 |j                         }t        fd|      }t        |      dk(  r|d   S y# t        $ r | j                  d       Y yw xY w)z1Retrieve a named vg if it exists, None if absent.namec                     | d   k(  S Nr    )egr   s    o/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/modules/vexata_eg.py<lambda>zget_eg.<locals>.<lambda>Y       r&zT1        r   Nz1Error while attempting to retrieve export groups.msg)paramslist_egsfilterlen	Exception	fail_json)modulearrayegsr   r   s       @r   get_egr!   T   sj    == DRnn137r7a<a5L RPQRs   1A A#"A#c                    | j                   d   	 |j                         }t        fd|      }t        |      dk(  r|d   d   S | j	                  dj                               y	# t        $ r | j	                  d       Y y	w xY w)
z7Retrieve a named vg's id if it exists, error if absent.vgc                     | d   k(  S r   r   )r#   r   s    r   r   zget_vg_id.<locals>.<lambda>g   r   r   r   r   idzVolume group {0} was not found.r   z1Error while attempting to retrieve volume groups.N)r   list_vgsr   r   r   formatr   )r   r   vgsr#   r   s       @r   	get_vg_idr)   b   s    ==DRnn137r7a<a5;!B!I!I$!OP RPQR   4A) !A) )BBc                    | j                   d   	 |j                         }t        fd|      }t        |      dk(  r|d   d   S | j	                  dj                               y	# t        $ r | j	                  d       Y y	w xY w)
z7Retrieve a named ig's id if it exists, error if absent.igc                     | d   k(  S r   r   )r,   r   s    r   r   zget_ig_id.<locals>.<lambda>u   r   r   r   r   r%   z"Initiator group {0} was not found.r   z4Error while attempting to retrieve initiator groups.N)r   list_igsr   r   r   r'   r   )r   r   igsr,   r   s       @r   	get_ig_idr0   p   s    ==DUnn137r7a<a5;!E!L!LT!RS USTUr*   c                    | j                   d   	 |j                         }t        fd|      }t        |      dk(  r|d   d   S | j	                  dj                               y	# t        $ r | j	                  d       Y y	w xY w)
z7Retrieve a named pg's id if it exists, error if absent.pgc                     | d   k(  S r   r   )r2   r   s    r   r   zget_pg_id.<locals>.<lambda>   r   r   r   r   r%   zPort group {0} was not found.r   z/Error while attempting to retrieve port groups.N)r   list_pgsr   r   r   r'   r   )r   r   pgsr2   r   s       @r   	get_pg_idr6   ~   s    ==DPnn137r7a<a5;!@!G!G!MN PNOPr*   c                    d}| j                   d   }t        | |      }t        | |      }t        | |      }| j                  r| j                  |       	 |j                  |d|||f      }|r$| j                  dj                  |             d}nt        	 | j                  |       y	# t        $ r$ | j                  dj                  |             Y ?w xY w)
z"Create a new export group.Fr   changedzAnsible export groupzCreated export group {0}r   TzExport group {0} create failed.N)r   r)   r0   r6   
check_mode	exit_json	create_eglogr'   r   r   )r   r   r9   eg_namevg_idig_idpg_idr   s           r   r<   r<      s    GmmF#Gfe$Efe$Efe$E)P__"E5!# JJ5<<WEJFGO 
 W%  P>EEgNOPs   AB+ +*CCc                 V   d}|d   }| j                   r| j                  |       	 |j                  |d         }|r$| j                  dj	                  |             d}nt
        	 | j                  |       y # t
        $ r$ | j                  dj	                  |             Y ?w xY w)	NFr   r8   r%   zExport group {0} deleted.r   TzExport group {0} delete failed.)r:   r;   	delete_egr=   r'   r   r   )r   r   r   r9   r>   oks         r   rC   rC      s    GjG)	P__tHJJ6==gFJGGO 
 W%  P>EEgNOPs   A A; ;*B('B(c                     t               } | j                  t        t        dd      t        ddddg      t        d      t        d      t        d                   t        | dt	               	      }|j
                  d
   }t        |      }t        ||      }|dk(  r|st        ||       y |dk(  r|rt        |||       y |j                  d       y )NstrT)typerequiredpresentabsent)rG   defaultchoices)rG   )r   stater#   r,   r2   )supports_check_moder
   rM   Fr8   )r   updatedictr   r
   r   r	   r!   r<   rC   r;   )arg_specr   rM   r   r   s        r   mainrR      s    HOO540E9y(>ST	
 8/3->-@BF MM'"EfE		B	"&% 	(	r&%$'r   __main__N)
__future__r   r   r   rG   __metaclass__DOCUMENTATIONEXAMPLESRETURNansible.module_utils.basicr   Aansible_collections.community.general.plugins.module_utils.vexatar   r	   r
   r!   r)   r0   r6   r<   rC   rR   __name__r   r   r   <module>r\      ss    A @)V*
 51 1RRUP&2&&(8 zF r   