
    Vh                         d dl mZmZmZ eZdZdZdZd dl	Z	d dl
mZ d dlmZmZ d dlmZ  G d	 d
e      ZddZd Zd Zd Zedk(  r e        yy)    )absolute_importdivisionprint_functiona  
module: ipa_sudocmdgroup
author: Thomas Krahn (@Nosmoht)
short_description: Manage FreeIPA sudo command group
description:
  - Add, modify or delete sudo command group within IPA server using IPA API.
attributes:
  check_mode:
    support: full
  diff_mode:
    support: none
options:
  cn:
    description:
      - Sudo Command Group.
    aliases: ['name']
    required: true
    type: str
  description:
    description:
      - Group description.
    type: str
  state:
    description: State to ensure.
    default: present
    choices: ['absent', 'disabled', 'enabled', 'present']
    type: str
  sudocmd:
    description:
      - List of sudo commands to assign to the group.
      - If an empty list is passed all assigned commands will be removed from the group.
      - If option is omitted sudo commands will not be checked or changed.
    type: list
    elements: str
extends_documentation_fragment:
  - community.general.ipa.documentation
  - community.general.attributes
a  
- name: Ensure sudo command group exists
  community.general.ipa_sudocmdgroup:
    name: group01
    description: Group of important commands
    sudocmd:
      - su
    ipa_host: ipa.example.com
    ipa_user: admin
    ipa_pass: topsecret

- name: Ensure sudo command group does not exist
  community.general.ipa_sudocmdgroup:
    name: group01
    state: absent
    ipa_host: ipa.example.com
    ipa_user: admin
    ipa_pass: topsecret
zi
sudocmdgroup:
  description: Sudo command group as returned by IPA API.
  returned: always
  type: dict
N)AnsibleModule)	IPAClientipa_argument_spec)	to_nativec                   N     e Zd Z fdZd Zd Zd Zd Zd Zd Z	d Z
d	 Z xZS )
SudoCmdGroupIPAClientc                 2    t         t        |   ||||       y N)superr   __init__)selfmodulehostportprotocol	__class__s        v/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/modules/ipa_sudocmdgroup.pyr   zSudoCmdGroupIPAClient.__init__T   s    #T3FD$Q    c                 0    | j                  dd d|d      S )Nsudocmdgroup_findT)allcnmethodnameitem
_post_jsonr   r   s     r   r   z'SudoCmdGroupIPAClient.sudocmdgroup_findW   s    &9SW_cKdeer   c                 *    | j                  d||      S )Nsudocmdgroup_addr   r    r   r   r   s      r   r$   z&SudoCmdGroupIPAClient.sudocmdgroup_addZ       &8t$OOr   c                 *    | j                  d||      S )Nsudocmdgroup_modr   r    r%   s      r   r(   z&SudoCmdGroupIPAClient.sudocmdgroup_mod]   r&   r   c                 (    | j                  d|      S )Nsudocmdgroup_del)r   r   r    r"   s     r   r*   z&SudoCmdGroupIPAClient.sudocmdgroup_del`   s    &8tDDr   c                 *    | j                  d||      S )Nsudocmdgroup_add_memberr   r    r%   s      r   r,   z-SudoCmdGroupIPAClient.sudocmdgroup_add_memberc   s    &?dQUVVr   c                 ,    | j                  |d|i      S Nsudocmdr   r   )r,   r%   s      r   sudocmdgroup_add_member_sudocmdz5SudoCmdGroupIPAClient.sudocmdgroup_add_member_sudocmdf   s    ++Y<M+NNr   c                 *    | j                  d||      S )Nsudocmdgroup_remove_memberr   r    r%   s      r   r3   z0SudoCmdGroupIPAClient.sudocmdgroup_remove_memberi   s    &BTXYYr   c                 ,    | j                  |d|i      S r.   )r3   r%   s      r   "sudocmdgroup_remove_member_sudocmdz8SudoCmdGroupIPAClient.sudocmdgroup_remove_member_sudocmdl   s    ..D	4?P.QQr   )__name__
__module____qualname__r   r   r$   r(   r*   r,   r1   r3   r5   __classcell__)r   s   @r   r   r   S   s9    RfPPEWOZRr   r   c                     i }| | |d<   |S )Ndescription )r;   datas     r   get_sudocmdgroup_dictr>   p   s    D)]Kr   c                 (    | j                  ||      S )N)ipa_datamodule_data)get_diff)clientipa_sudocmdgroupmodule_sudocmdgroups      r   get_sudocmdgroup_diffrF   w   s    ??$4BU?VVr   c                    | j                   d   }| j                   d   }| j                   d   }t        | j                   d         }|j                  |      }d}|dk(  r|s"d	}| j                  sm|j	                  ||
      }nYt        |||      }t        |      dkD  r>d	}| j                  s0i }	|D ]  }
|j                  |
      |	|
<    |j                  ||	
       |\|j                  ||j                  dg       ||j                  |j                        }n"|r d	}| j                  s|j                  |       ||j                  |      fS )Nr   stater/   r;   )r;   )r   FpresentTr0   r   member_sudocmd)paramsr>   r   
check_moder$   rF   lengetr(   modify_if_diffr1   r5   r*   )r   rC   r   rH   r/   rE   rD   changeddiffr=   keys              r   ensurerS   {   sl   ==DMM'"EmmI&G/FMM-<XY//T/:G	G$$#)#:#:K^#:#_ (1ACVWD4y1}((D# A$7$;$;C$@S	A++D+A++D2B2F2FGWY[2\^e,2,R,R,2,U,UWG G$$''T'2F,,$,777r   c            
      P   t               } | j                  t        dddg      t        d      t        ddg d      t        d	d
             t        | d      }t	        ||j
                  d   |j
                  d   |j
                  d         }	 |j                  |j
                  d   |j
                  d          t        ||      \  }}|j                  ||       y # t        $ r8}|j                  t        |      t        j                                Y d }~y d }~ww xY w)NstrTr   )typerequiredaliases)rV   rI   )rI   absentenableddisabled)rV   defaultchoiceslist)rV   elements)r   r;   rH   r/   )argument_specsupports_check_modeipa_hostipa_portipa_prot)r   r   r   r   ipa_useripa_pass)usernamepassword)rP   sudorule)msg	exception)r   updatedictr   r   rK   loginrS   	exit_json	Exception	fail_jsonr	   	traceback
format_exc)r`   r   rC   rP   sudocmdgroupes         r   mainrv      s   %'MDedVHM%)u%5#	Kwx!%6E!B  D
 /35F #&(.j(A(.j(A,2MM*,EGFMfmmJ7$mmJ7 	 	9 &vv 6<@ MYq\Y5I5I5KLLMs   AC$ $	D%-.D  D%__main__r   )
__future__r   r   r   rV   __metaclass__DOCUMENTATIONEXAMPLESRETURNrr   ansible.module_utils.basicr   >ansible_collections.community.general.plugins.module_utils.ipar   r   +ansible.module_utils.common.text.convertersr	   r   r>   rF   rS   rv   r6   r<   r   r   <module>r      sp    A @%N(
  4 g ARI R:W"8JM. zF r   