name : cc_ansible.cpython-39.pyc
a

'�Dg��@slUdZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
ddlmZm
Z
ddlmZddlmZddlmZdd	lmZmZdd
lmZddlmZdeegd
gd�Zeed<e�e�ZdZ Gdd�dej!�Z"Gdd�de"�Z#Gdd�de"�Z$e%eee&dd�dd�Z'e(d�dd�Z)e(e(d�dd�Z*e"e(d �d!d"�Z+e(e"d#�d$d%�Z,e(e"d#�d&d'�Z-dS)(z9ansible enables running on first boot either ansible-pull�N)�deepcopy)�Optional)�	lifecycle�subp)�Cloud)�Config)�
MetaSchema)�ALL_DISTROS�Distro)�PER_INSTANCE)�get_cfg_by_pathZ
cc_ansible�ansible)�idZ	frequencyZdistrosZactivate_by_schema_keys�meta�ansible_configc@s|eZdZed�dd�Zeejd�dd�Ze	d�dd�Z
d	d
�Zed�dd
�Z
dd�Zejdd��Zeje	d�dd��ZdS)�AnsiblePull)�distrocCs<dg|_ddg|_||_i|_d|_tj�dd�|jd<dS)Nzansible-pullz	--version�HOMEz/root)�cmd_pull�cmd_versionr�env�run_user�os�environ�get)�selfr�r�?/usr/lib/python3.9/site-packages/cloudinit/config/cc_ansible.py�__init__ s
zAnsiblePull.__init__��returncCsH|�|j�\}}|���d�}t�d|�}|rD|�d�}tj�	|�SdS)Nrz	([\d\.]+))
�do_asr�
splitlines�pop�re�search�groupr�VersionZfrom_str)r�stdout�_Z
first_line�matches�versionrrr�get_version+s
zAnsiblePull.get_versioncGs|�g|j�|��\}}|S�N)r!r)r�argsr(r)rrr�pull4szAnsiblePull.pullcCs|��std��dS)Nz!command: ansible is not installed)�is_installed�
ValueError�rrrr�
check_deps8szAnsiblePull.check_deps)�commandcKs0|js|j|fi|��S|jj||jfi|��Sr-)rrrr!�rr4�kwargsrrrr!<szAnsiblePull.do_ascKstj|fd|ji|��S)NZ
update_env)rrr5rrrrAszAnsiblePull.subpcCsdSr-rr2rrrr0DszAnsiblePull.is_installed��pkg_namecCsdSr-r�rr8rrr�installHszAnsiblePull.installN)�__name__�
__module__�__qualname__r
rrrr'r,�strr/r3�listr!r�abc�abstractmethodr0r:rrrrrs	
rcsDeZdZeeed��fdd�Zed�dd�Zed�dd	�Z	�Z
S)
�AnsiblePullPip)r�usercsft��|�||_|�tjddg�\}}|�d�}|j�d�}|rXd�||g�|jd<n
||jd<dS)Nz-cz('import site; print(site.getuserbase())'z/bin/�PATH�:)	�superrrr!�sys�
executablerr�join)rrrC�	user_baser)Zansible_pathZold_path��	__class__rrrNs
�
zAnsiblePullPip.__init__r7cCs�|��s�zddl}Wn$ty8|j�|jjg�Yn0tjdddg}tj	�
tj	�t�
d�d��rn|�d�|jr~|�d	�|�g|�d
�d��|�g|�|��dS)zishould cloud-init grow an interface for non-distro package
        managers? this seems reusable
        rN�-m�pipr:ZstdlibzEXTERNALLY-MANAGEDz--break-system-packagesz--userz	--upgrade)r0rN�ImportErrorr�install_packagesZpip_package_namerGrHr�path�existsrI�	sysconfigZget_path�appendrr!)rr8rN�cmdrrrr:]s(�
��

zAnsiblePullPip.installrcCs |�tjdddg�\}}d|vS)NrMrNr?r
)r!rGrH)rr(r)rrrr0xszAnsiblePullPip.is_installed)r;r<r=r
rr>rr:�boolr0�
__classcell__rrrKrrBMsrBc@s(eZdZed�dd�Zed�dd�ZdS)�AnsiblePullDistror7cCs|��s|j�|g�dSr-)r0rrPr9rrrr:~szAnsiblePullDistro.installrcCstt�d��S)Nr
)rVr�whichr2rrrr0�szAnsiblePullDistro.is_installedN)r;r<r=r>r:rVr0rrrrrX}srX)�name�cfg�cloudr.r cCs�|�di�}|�d�}|�d�}|�d�}|�d�}|�d�}	|�dd�}
|r�t|�|j}|d	krpt||�}nt|�}|�|
�|��|�d
d�}
|
r�|
|jt<|r�t	||�|	r�t
|t|	��|r�t||�dS)Nr
r�install_method�setup_controllerZgalaxyr/�package_name�rNr)
r�validate_configrrBrXr:r3r�CFG_OVERRIDE�ansible_galaxy�run_ansible_pullr�ansible_controller)rZr[r\r.Zansible_cfgZansible_userr]r^Z
galaxy_cfgZpull_cfgr_rr
rrrr�handle�s0







rf�r[cCs�d}|D]"}t||�std|�d|����q|�d�r^dD]"}t||�s:td|�d|����q:|�d�}|r�t|�d�|�d�g�s�td	|����|d
}|dvr�td��dS)
N)r]r_zMissing required key 'z' from r/)zpull/urlzpull/playbook_namer^�repositories�run_ansiblezMissing required key from r])rNrz Invalid install method {install})rr1r�any)r[�
required_keys�keyZcontroller_cfgr:rrrra�s&



��ra)r[r cCsdd�|��D�S)zremove boolean false valuescSs&i|]\}}|dur|�dd�|�qS)Fr)�-)�replace��.0rl�valuerrr�
<dictcomp>�s�zfilter_args.<locals>.<dictcomp>)�itemsrgrrr�filter_args�s�rt)r/r[cCs�|�d�}|��}|s"t�d�n>|t�ddd�kr`|�d�r`td|j�d|j	�d|j
�d	���|jgd
d�t|��
�D��|�R�}|r�tj�|��dS)N�
playbook_namezCannot parse ansible version��r�diffzAnsible version �.z%doesn't support --diff flag, exiting.cSs2g|]*\}}|dur$d|�d|��nd|���qS)T�--�=rrorrr�
<listcomp>�s�z$run_ansible_pull.<locals>.<listcomp>)r#r,�LOG�warningrr'rr1�major�minorZpatchr/rtrsrGr(�write)r/r[ru�vr(rrrrd�s$

�
���rd)r[r
cCs4|�dg�}|st�d|�|D]}|�|�q dS)N�actionszInvalid config: %s)rr}r~r!)r[r
r�r4rrrrc�s
rccCs�|�dg�D]}|�dd|d|dg�q|�dg�D]D}|�d�}|�d�}d	|gd
d�t|���D��}|j||d�q8dS)
Nrh�gitZclone�sourcerQri�playbook_dirruzansible-playbookcSs g|]\}}d|�d|���qS)rzr{rrorrrr|��z&ansible_controller.<locals>.<listcomp>)�cwd)rr!r#rtrs)r[r
Z
repositoryr.r�rur4rrrre�s�

��re).�__doc__r@Zloggingrr$rGrS�copyr�typingrZ	cloudinitrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemarZcloudinit.distrosr	r
Zcloudinit.settingsrZcloudinit.utilrr�__annotations__Z	getLoggerr;r}rb�ABCrrBrXr>r?rf�dictrartrdrcrerrrr�<module>s>�
.0	%		

© 2025 Cubjrnet7