
    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_sudocmd
author: Thomas Krahn (@Nosmoht)
short_description: Manage FreeIPA sudo command
description:
  - Add, modify or delete sudo command within FreeIPA server using FreeIPA API.
attributes:
  check_mode:
    support: full
  diff_mode:
    support: none
options:
  sudocmd:
    description:
      - Sudo command.
    aliases: ['name']
    required: true
    type: str
  description:
    description:
      - A description of this command.
    type: str
  state:
    description: State to ensure.
    default: present
    choices: ['absent', 'disabled', 'enabled', 'present']
    type: str
extends_documentation_fragment:
  - community.general.ipa.documentation
  - community.general.attributes
a|  
- name: Ensure sudo command exists
  community.general.ipa_sudocmd:
    name: su
    description: Allow to run su via sudo
    ipa_host: ipa.example.com
    ipa_user: admin
    ipa_pass: topsecret

- name: Ensure sudo command does not exist
  community.general.ipa_sudocmd:
    name: su
    state: absent
    ipa_host: ipa.example.com
    ipa_user: admin
    ipa_pass: topsecret
z^
sudocmd:
  description: Sudo command as return from IPA API.
  returned: always
  type: dict
N)AnsibleModule)	IPAClientipa_argument_spec)	to_nativec                   6     e Zd Z fdZd Zd Zd Zd Z xZS )SudoCmdIPAClientc                 2    t         t        |   ||||       y N)superr   __init__)selfmodulehostportprotocol	__class__s        q/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/modules/ipa_sudocmd.pyr   zSudoCmdIPAClient.__init__K   s    .vtT8L    c                 0    | j                  dd d|d      S )Nsudocmd_findT)allsudocmdmethodnameitem
_post_jsonr   r   s     r   r   zSudoCmdIPAClient.sudocmd_findN   s    n4d_cFdeer   c                 *    | j                  d||      S )Nsudocmd_addr   r    r   r   r   s      r   r$   zSudoCmdIPAClient.sudocmd_addQ       m$TJJr   c                 *    | j                  d||      S )Nsudocmd_modr   r    r%   s      r   r(   zSudoCmdIPAClient.sudocmd_modT   r&   r   c                 (    | j                  d|      S )Nsudocmd_del)r   r   r    r"   s     r   r*   zSudoCmdIPAClient.sudocmd_delW   s    m$??r   )	__name__
__module____qualname__r   r   r$   r(   r*   __classcell__)r   s   @r   r   r   J   s!    MfKK@r   r   c                     i }| | |d<   |S )Ndescription )r0   datas     r   get_sudocmd_dictr3   [   s    D)]Kr   c                 (    | j                  ||      S )N)ipa_datamodule_data)get_diff)clientipa_sudocmdmodule_sudocmds      r   get_sudocmd_diffr;   b   s    ??K^?LLr   c                 
   | j                   d   }| j                   d   }t        | j                   d         }|j                  |      }d}|dk(  r~|s"d}| j                  s|j	                  ||	       n|t        |||      }t        |      d
kD  rad}| j                  sSi }|D ]  }	|j                  |	      ||	<    |j                  ||	       n"|r d}| j                  s|j                  |       ||j                  |      fS )Nr   stater0   )r0   )r   FpresentT)r   r   r   )
paramsr3   r   
check_moder$   r;   lengetr(   r*   )
r   r8   r   r=   r:   r9   changeddiffr2   keys
             r   ensurerF   f   s   ==#DMM'"E%&--2NON%%4%0KG	G$$"">"B#FKHD4y1}((D# <$2$6$6s$;S	<&&Dt&<G$$"""-F''T'222r   c            	      8   t               } | j                  t        d      t        ddg d      t        dddg      	       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str)typer>   )r>   absentenableddisabled)rI   defaultchoicesTr   )rI   requiredaliases)r0   r=   r   )argument_specsupports_check_modeipa_hostipa_portipa_prot)r   r   r   r   ipa_useripa_pass)usernamepassword)rC   r   )msg	exception)r   updatedictr   r   r?   loginrF   	exit_json	Exception	fail_jsonr	   	traceback
format_exc)rQ   r   r8   rC   r   es         r   mainre      s   %'MTu%5#	Kwx!%54&!R  T /35F V#)==#<#)==#<'-}}Z'@BFMfmmJ7$mmJ7 	 	9!&&1': MYq\Y5I5I5KLLMs   AC 	D!.DD__main__r   )
__future__r   r   r   rI   __metaclass__DOCUMENTATIONEXAMPLESRETURNrb   ansible.module_utils.basicr   >ansible_collections.community.general.plugins.module_utils.ipar   r   +ansible.module_utils.common.text.convertersr	   r   r3   r;   rF   re   r+   r1   r   r   <module>ro      so    A @@$
  4 g A@y @"M3>M, zF r   