o
    x[hà*  ã                
   @   sB  U d Z ddlZddlZddlZddlmZ ddlmZ ddlm	Z	m
Z
 ddlZddlmZmZmZmZmZ ddlmZ ddlmZ dd	lmZ dd
lmZmZmZ ddlmZ dZdgZdZ degedgdœZ!ee"d< e #e$¡Z%G dd„ dƒZ&dede'fdd„Z(dd„ Z)edddfdefdd„Z*de'd eded!e+d"df
d#d$„Z,dS )%z+Puppet: Install, configure and start puppeté    N)Úsuppress)ÚStringIO)ÚListÚUnion)ÚhelpersÚsubpÚ
temp_utilsÚ
url_helperÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚALL_DISTROSÚDistroÚPackageInstallerError)ÚPER_INSTANCEzKhttps://raw.githubusercontent.com/puppetlabs/install-puppet/main/install.shz--test)úpuppet-agentÚpuppetÚ	cc_puppetr   )ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmetac                   @   s   e Zd Zdd„ ZdS )ÚPuppetConstantsc                 C   s8   || _ || _tj |d¡| _tj | jd¡| _|| _d S )NÚcertszca.pem)Ú	conf_pathÚssl_dirÚosÚpathÚjoinÚssl_cert_dirÚssl_cert_pathÚcsr_attributes_path)ÚselfÚpuppet_conf_fileÚpuppet_ssl_dirr#   © r'   ú</usr/lib/python3/dist-packages/cloudinit/config/cc_puppet.pyÚ__init__*   s
   
zPuppetConstants.__init__N)Ú__name__Ú
__module__Ú__qualname__r)   r'   r'   r'   r(   r   )   s    r   ÚcloudÚactionc              	   C   s`   d}t D ]}z| j ||› d�¡ |}W  n
 tjy   Y qw |s.t d|d t ¡¡ dS dS )z8Attempts to perform action on one of the puppet servicesÚ z.servicez0Could not '%s' any of the following services: %sú, N)ÚPUPPET_PACKAGE_NAMESÚdistroÚmanage_servicer   ÚProcessExecutionErrorÚLOGÚwarningr    )r-   r.   Úservice_managedÚpuppet_namer'   r'   r(   Ú_manage_puppet_services7   s    ÿýÿr9   c                 C   s   t   | dd|g¡\}}| ¡ S )z›Get the config value for a given setting using `puppet config print`
    :param puppet_bin: path to puppet binary
    :param setting: setting to query
    ÚconfigÚprint)r   Úrstrip)Ú
puppet_binÚsettingÚoutÚ_r'   r'   r(   Úget_config_valueI   s   rA   Tr2   c           	      C   s®   g }|dur
d|g}|dur|d|g7 }|r|dg7 }t j|dd�j}tj|  ¡ dd��!}tj |d	¡}t	j
||d
d� tj|g| dd�W  d  ƒ S 1 sPw   Y  dS )a—  Install puppet-agent from the puppetlabs repositories using the one-shot
    shell script

    :param distro: Instance of Distro
    :param url: URL from where to download the install script
    :param version: version to install, blank defaults to latest
    :param collection: collection to install, blank defaults to latest
    :param cleanup: whether to purge the puppetlabs repo after installation
    Nz-vz-cz	--cleanupé   )ÚurlÚretriesT)ÚdirÚ	needs_exezpuppet-installiÀ  )ÚmodeF©Úcapture)r	   ÚreadurlÚcontentsr   ÚtempdirÚget_tmp_exec_pathr   r   r    r
   Ú
write_filer   )	r2   rC   ÚversionÚ
collectionÚcleanupÚargsÚcontentÚtmpdÚtmpfr'   r'   r(   Úinstall_puppet_aioR   s    
ÿ$ûrV   ÚnameÚcfgrR   Úreturnc               	   C   s4  d|vrt  d| ¡ d S |d }t |dd¡}t |dd ¡}t |dd ¡}t |dd¡}t |d	d¡}	tj|d
dd�}
tj|ddd�}tj|dtd�}|dkrVd}d}d}nd}d}d }t |d|¡}|sm|rmt  d¡ nu|rât  d|rv|nd|¡ |dkrÌ|d u r»tD ]*}tt	ƒ� |r’||ggn|g}|j
 |¡ |}	 W d   ƒ  n	1 s©w   Y  q„|sºt  dd t¡¡ n'|rÂ||ggn|g}|j
 |¡ n|dkrÚt|j
||||	ƒ nt  d|¡ d}
t |dt|dƒ¡}t |dt|dƒ¡}t |dt|dƒ¡}t|||ƒ}d |v �r¨t |j¡}t ¡ }d!d"„ | ¡ D ƒ}d# |¡}|jt|ƒ|jd$� |d   ¡ D ]t\}}|d%k�rit |jd&¡ t |j|d¡ t |j¡ t |j|d¡ t |j|¡ t |j|d¡ n*| ¡ D ]%\}}|d'k�rŠ| d(t  ¡ ¡}| d)| !¡ ¡}| "¡ }| #|||¡ �qmt $|jd*|j ¡ t |j| %¡ ¡ �q3d|v �r»t |j&t'j(|d dd+�¡ |�rÃt)|d,ƒ |
�rt  d-¡ |d.g}d/|v �r|d/ }t*|t+t,fƒ�ræ| -|¡ n!t*|t.ƒ�rô| -| /¡ ¡ nt  d0t0|ƒ¡ | -t1¡ n| -t1¡ t2j2|dd1� |�rt)|d2ƒ d S d S )3Nr   z9Skipping module named %s, no 'puppet' configuration foundÚinstallTrO   rP   Úinstall_typeÚpackagesrQ   ÚexecF)ÚdefaultÚstart_serviceÚaio_install_urlÚaioÚrootz/opt/puppetlabs/bin/puppetr   Úpackage_namez@Puppet install set to false but version supplied, doing nothing.z'Attempting to install puppet %s from %sÚlatestz+No installable puppet package in any of: %sr0   z Unknown puppet install type '%s'Ú	conf_filer:   r   Ússldirr#   Úcsr_attributesÚconfc                 S   s   g | ]}|  ¡ ‘qS r'   )Úlstrip)Ú.0Úir'   r'   r(   Ú
<listcomp>Þ   s    zhandle.<locals>.<listcomp>Ú
)ÚsourceÚca_certiù  Úcertnamez%fz%iz%s.old)Údefault_flow_styleÚenablezRunning puppet-agentÚagentÚ	exec_argszOUnknown type %s provided for puppet 'exec_args' expected list, tuple, or stringrH   Ústart)3r5   Údebugr
   Úget_cfg_option_boolÚget_cfg_option_strÚAIO_INSTALL_URLr6   r1   r   r   r2   Úinstall_packagesr    rV   rA   r   Úload_text_filer   r   ÚDefaultingConfigParserÚ
splitlinesÚ	read_filer   ÚitemsÚ
ensure_dirr   Úchownbynamer!   rN   r"   ÚreplaceÚsocketÚgetfqdnÚget_instance_idÚlowerÚsetÚrenameÚ	stringifyr#   ÚyamlÚdumpr9   Ú
isinstanceÚlistÚtupleÚextendÚstrÚsplitÚtypeÚPUPPET_AGENT_DEFAULT_ARGSr   ) rW   rX   r-   rR   Ú
puppet_cfgrZ   rO   rP   r[   rQ   ÚrunÚstart_puppetdr`   Úpuppet_userr=   Úpuppet_packagerc   r8   Ú
to_installre   r   r#   Úp_constantsrK   Úpuppet_configÚcleaned_linesÚcleaned_contentsÚcfg_nameÚoÚvÚcmdÚcmd_argsr'   r'   r(   Úhandlev   s
  ÿÿÿÿÿÿ
ý
ÿý"ø	þ€ÿÿÿÿý


ÿ
ÿ
ÿ
þ


ü
þr£   )-Ú__doc__Úloggingr   rƒ   Ú
contextlibr   Úior   Útypingr   r   rŠ   Ú	cloudinitr   r   r   r	   r
   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar   Úcloudinit.distrosr   r   r   Úcloudinit.settingsr   ry   r“   r1   r   Ú__annotations__Ú	getLoggerr*   r5   r   r�   r9   rA   rV   r�   r£   r'   r'   r'   r(   Ú<module>   sD   ü
û
ÿ"$