
    VhS                         d Z ddlmZmZmZ eZdZdZddl	m
Z
mZ ddlmZmZmZ dZ	 ddlmZ d
 Zd Zd Zd Zd Zd Zedk(  r e        yy# e$ r d	ZY )w xY w)z>This module creates or modifies SSL certificates on Infinibox.    )absolute_importdivisionprint_functiona  
---
module: infini_certificate
version_added: 2.16.0
short_description:  Create (present state) or clear (absent state) SSL certificates on Infinibox
description:
    - This module uploads (present state) or clears (absent state) SSL certificates on Infinibox
author: David Ohlemacher (@ohlemacher)
options:
  certificate_file_name:
    description:
      - Name with full path of a certificate file.
    type: str
    required:  false
  state:
    description:
      - Creates/Modifies the systems SSL certificate by uploading one from a file, when using state present.
      - For state absent, the current certificate is removed and a new self-signed certificate is automatically generated by the IBOX.
      - State stat shows the existing certificate's details.
    type: str
    required: false
    default: present
    choices: [ "stat", "present", "absent" ]
extends_documentation_fragment:
    - infinibox
a  
- name: Upload SSL certificate from file
  infini_certificate:
    certificate_file_name: cert.crt
    state: present
    user: admin
    password: secret
    system: ibox001

- name: State SSL certificate
  infini_certificate:
    state: stat
    user: admin
    password: secret
    system: ibox001

- name: Clear SSL certificate
  infini_certificate:
    state: absent
    user: admin
    password: secret
    system: ibox001
)AnsibleModulemissing_required_lib)merge_two_dicts
get_systeminfinibox_argument_specT)APICommandFailedFc                 :   | j                   d   }d}t        |       }	 |j                  j                  |      j	                         d   }t        dd	      }t        |      } | j                  di | y
# t
        $ r d| }| j                  |       Y Nw xY w)z! Handle the stat state parameter certificate_file_namesystem/certificatespathr   zCannot stat SSL certificate msgFz2SSL certificate stat {certificate_file_name} foundchangedr   N )
paramsr	   apiget
get_resultr   	fail_jsondictr   	exit_json)moduler   r   systemcert_resultr   results          z/home/dcms/DCMS/lib/python3.12/site-packages/ansible_collections/infinidat/infinibox/plugins/modules/infini_certificate.pyhandle_statr"   S   s    "MM*AB DF"jjnn$n/::<Q? @F V[1FFv  ",-B,CDS!"s   -A7 7 BBc           
      ~   | j                   d   }d}t        |       }t        |d      5 }	 	 d|i}|j                  j                  |
      j                         }d	d	d	       d   d   }	|d   d   d   }
|d   d   d   }t        ddd|	 d|
 d| z         }t        ||      } | j                  di | y	# t        $ r | j	                  d|        Y t
        $ r"}| j	                  d| d|        Y d	}~d	}~ww xY w# t        $ r!}d| }| j	                  |       Y d	}~d	}~ww xY w# 1 sw Y   xY w)z$ Handle the present state parameter r   r   rbfilez'Cannot find SSL certificate file named r   z'Cannot open SSL certificate file named z: N)r   fileszCannot upload cert: certificateserial_number	issued_byCN	issued_toTz.System SSL certificate uploaded successfully. zCertificate S/N z issued by CN z to CN r   r   )r   r	   openFileNotFoundErrorr   	Exceptionr   postr   r   r   r   r   )r   r   r   r   	cert_filer&   errr   r   cert_serialcert_issued_by_cncert_issued_to_cnr    s                r!   handle_presentr5   e   s   "MM*AB DF	#T	* &i
	&o+
 !**//t5/ALLNK& m,_=K#M2;?E#M2;?E<
;-~6G5HPaObcdF
 V[1FFv% % h  'NOdNe%f g o  'NOdNeeghkgl%m nno   	&(.C%%	&& &s]   D3B9+D9DDD!C>9D>DD	D0D+&D3+D00D33D<c                 $   d}t        |       }	 |j                  j                  |      j                         }t        dd      }t        |      } | j                  d	i | y# t        $ r!}d| }| j                  |       Y d}~Qd}~ww xY w)
z] Handle the absent state parameter. Clear existing cert. IBOX will install self signed cert. z6system/certificates/generate_self_signed?approved=truer   zCannot clear SSL certificate: r   NTzWSystem SSL certificate cleared and a self signed certificate was installed successfullyr   r   )	r	   r   r/   r   r   r   r   r   r   )r   r   r   r   r1   r   r    s          r!   handle_absentr7      s    CDF"jjoo4o0;;= eF V[1FFv  ".se4S!!"s   *A% %	B.B

Bc                 *   | j                   d   }	 |dk(  rt        |        n7|dk(  rt        |        n&|dk(  rt        |        n| j	                  d|        t        |       }|j                          y# t        |       }|j                          w xY w)zHandle statesstatestatpresentabsentz'Internal handler error. Invalid state: r   N)r   r"   r5   r7   r   r	   logout)r   r9   r   s      r!   execute_stater>      s    MM'"EF?i6"h&!#J5'!RSF# F#s   AA5 5Bc                     | j                   d   }| j                   d   }|dv r	 |dv r|sd}| j                  |       yyy)zVerify module options are saner   r9   )r:   r<   )r;   z0Certificate file name parameter must be providedr   N)r   r   )r   r   r9   r   s       r!   check_optionsr@      sW    "MM*ABMM'"E""$DC% %     c            
         t               } | j                  t        t        dd      t        dg d                   t        | d	      }t        s|j                  t        d
             t        |       t        |       y)z Main FN)requireddefaultr;   )r:   r;   r<   )rD   choices)r   r9   T)supports_check_modeurllib3r   )	r
   updater   r   HAS_URLLIB3r   r   r@   r>   )argument_specr   s     r!   mainrK      sm    +-M"&t"Dy2OP	
 =dCF1)<=&&rA   __main__N)__doc__
__future__r   r   r   type__metaclass__DOCUMENTATIONEXAMPLESansible.module_utils.basicr   r   Fansible_collections.infinidat.infinibox.plugins.module_utils.infiniboxr   r	   r
   rI   infinisdk.core.exceptionsr   ImportErrorr"   r5   r7   r>   r@   rK   __name__r   rA   r!   <module>rX      s    E @ @64 K  :
$>""
&& zF o  Ks   A AA