
    VhK                         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 d dl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_functionaY  
module: ipa_subca
author: Abhijeet Kasurde (@Akasurde)
short_description: Manage FreeIPA Lightweight Sub Certificate Authorities
description:
  - Add, modify, enable, disable and delete an IPA Lightweight Sub Certificate Authorities using IPA API.
attributes:
  check_mode:
    support: full
  diff_mode:
    support: none
options:
  subca_name:
    description:
      - The Sub Certificate Authority name which needs to be managed.
    required: true
    aliases: ["name"]
    type: str
  subca_subject:
    description:
      - The Sub Certificate Authority's Subject, for example V(CN=SampleSubCA1,O=testrelm.test).
    required: true
    type: str
  subca_desc:
    description:
      - The Sub Certificate Authority's description.
    type: str
  state:
    description:
      - State to ensure.
      - States V(disable) and V(enable) are available for FreeIPA 4.4.2 version and onwards.
    required: false
    default: present
    choices: ["absent", "disabled", "enabled", "present"]
    type: str
extends_documentation_fragment:
  - community.general.ipa.documentation
  - community.general.attributes
aj  
- name: Ensure IPA Sub CA is present
  community.general.ipa_subca:
    ipa_host: spider.example.com
    ipa_pass: Passw0rd!
    state: present
    subca_name: AnsibleSubCA1
    subca_subject: 'CN=AnsibleSubCA1,O=example.com'
    subca_desc: Ansible Sub CA

- name: Ensure that IPA Sub CA is removed
  community.general.ipa_subca:
    ipa_host: spider.example.com
    ipa_pass: Passw0rd!
    state: absent
    subca_name: AnsibleSubCA1

- name: Ensure that IPA Sub CA is disabled
  community.general.ipa_subca:
    ipa_host: spider.example.com
    ipa_pass: Passw0rd!
    state: disable
    subca_name: AnsibleSubCA1
za
subca:
  description: IPA Sub CA record as returned by IPA API.
  returned: always
  type: dict
)AnsibleModule)	IPAClientipa_argument_spec)	to_native)LooseVersionc                   L     e Zd Z fdZd ZddZddZd	dZd	dZd	dZ	 xZ
S )
SubCAIPAClientc                 2    t         t        |   ||||       y N)superr   __init__)selfmodulehostportprotocol	__class__s        o/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/community/general/plugins/modules/ipa_subca.pyr   zSubCAIPAClient.__init__Z   s    nd,VT4J    c                 *    | j                  d|d       S )Nca_findmethodnameitem
_post_jsonr   
subca_names     r   
subca_findzSubCAIPAClient.subca_find]   s    ijtLLr   c                     t        |      }|j                  dd       }||j                  |       | j                  d||      S )N)ipacasubjectdndescription)r&   ca_addr   )dictgetupdater    )r   r"   
subject_dndetailsr   
subca_descs         r   	subca_addzSubCAIPAClient.subca_add`   sE    :.[[5
!KKJK/hZdKKr   c                     t        |      }|D ]K  }t               }||   |j                  dj                  |||                | j	                  d||       M y )Nz{0}={1})setattrca_modr   )get_subca_dictr(   r*   formatr    )r   r"   diffr,   r   changeupdate_details          r   	subca_modzSubCAIPAClient.subca_modg   sb    g& 	VF FMF|'$$Y-=-=fd6l-S$Txj}U		Vr   c                 (    | j                  d|      S )Nca_delr   r   r   r!   s     r   	subca_delzSubCAIPAClient.subca_delo   s    hZ@@r   c                 (    | j                  d|      S )N
ca_disabler:   r   r!   s     r   subca_disablezSubCAIPAClient.subca_disabler   s    lDDr   c                 (    | j                  d|      S )N	ca_enabler:   r   r!   s     r   subca_enablezSubCAIPAClient.subca_enableu   s    k
CCr   )NNNr   )__name__
__module____qualname__r   r#   r.   r7   r;   r>   rA   __classcell__)r   s   @r   r   r   Y   s-    KMLVAEDr   r   Nc                 N    t               }| d   | d   |d<   | d   | d   |d<   |S )Nr&   subca_subjectr%   )r(   )r,   module_subcas     r   r2   r2   y   sD    6L})&-m&<]#+)0)A%&r   c                 >    t        |      }| j                  ||      S )N)ipa_datamodule_data)r2   get_diff)client	ipa_subcarH   r,   s       r   get_subca_diffrO      s    \*G??I7?CCr   c                    | j                   d   }| j                   d   }| j                   d   }| j                   d   }|j                  |      }t        ||      }d}|dk(  r~|s%d}| j                  sV|j	                  |||	       n@t        |||      }	d
|	v r|	j                  d
       |d= t        |	      dkD  rd}| j                  s|j                  ||	|       n|dk(  r#|rd}| j                  s|j                  |       n|dk(  r\|j                         }
t        |
      t        d      k  r| j                  d       |rd}| j                  ss|j                  |       n`|dk(  r[|j                         }
t        |
      t        d      k  r| j                  d       |r d}| j                  s|j                  |       ||j                  |      fS )Nr"   rG   r-   state)r&   rG   FpresentT)r"   r+   r,   r%   r   )r"   r4   r,   absent)r"   disablez4.4.2zuCurrent version of IPA server [%s] does not support 'CA disable' option. Please upgrade to version greater than 4.4.2msgenableztCurrent version of IPA server [%s] does not support 'CA enable' option. Please upgrade to version greater than 4.4.2)paramsr#   r(   
check_moder.   rO   removelenr7   r;   get_ipa_versionr
   	fail_jsonr>   rA   )r   rM   r"   subca_subject_dnr-   rQ   rN   rH   changedr4   ipa_versions              r   ensurera      s   |,J}}_5|,JMM'"E!!*-IJ&68L G	G$$  JCS]i j!&)\BD  4',- 14y1}(($$
|$\	(	G$$  J 7	)	,,.$|G'<< "> ?G$$$$
$;	(	,,.$|G'<< "> ?G$$##z#:F%%j111r   c                  *   t               } | j                  t        dddg      t        dd      t        d      t        ddg d	      
       t        | d      }t	        ||j
                  d   |j
                  d   |j
                  d         }	 |j                  |j
                  d   |j
                  d          t        ||      \  }}|j                  ||       y # t        $ r%}|j                  t        |             Y d }~y d }~ww xY w)NstrTr   )typerequiredaliases)rd   re   )rd   rR   )rR   rS   enableddisabled)rd   defaultchoices)r"   rG   r-   rQ   )argument_specsupports_check_modeipa_hostipa_portipa_prot)r   r   r   r   ipa_useripa_pass)usernamepassword)r_   recordrU   )r   r*   r(   r   r   rX   loginra   	exit_json	Exceptionr]   r	   )rk   r   rM   r_   rt   excs         r   mainry      s	   %'MDedVH$U'+'F$(e$4#	,X Z  \ /36F 6!'z!:!'z!:%+]]:%>@F
-fmmJ7$mmJ7 	 	9 08 -Ys^,,-s   AC$ $	D-DD__main__r   )
__future__r   r   r   rd   __metaclass__DOCUMENTATIONEXAMPLESRETURNansible.module_utils.basicr   >ansible_collections.community.general.plugins.module_utils.ipar   r   +ansible.module_utils.common.text.convertersr	   Bansible_collections.community.general.plugins.module_utils.versionr
   r   r2   rO   ra   ry   rB    r   r   <module>r      sp    A @&P2
 5 g A [DY D@D
52p-2 zF r   