Current File : //usr/lib/python3/dist-packages/cloudinit/config/__pycache__/cc_ansible.cpython-312.pyc
�

Ӈg��
��UdZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
ddlmZm
Z
mZddlmZddlmZddlmZdd	lmZmZdd
lmZddlmZdeegd
gd�Zeed<ej<e�Z dZ!Gd�dejD�Z#Gd�de#�Z$Gd�de#�Z%de&dedede'ddf
d�Z(de)fd�Z*de)de)fd�Z+de#de)fd �Z,de)d
e#fd!�Z-de)d
e#fd"�Z.y)#z9ansible enables running on first boot either ansible-pull�N)�deepcopy)�Optional)�	lifecycle�signal_handler�subp)�Cloud)�Config)�
MetaSchema)�ALL_DISTROS�Distro)�PER_INSTANCE)�get_cfg_by_path�
cc_ansible�ansible)�id�	frequency�distros�activate_by_schema_keys�meta�ansible_configc��eZdZdefd�Zdeejfd�Zde	fd�Z
d�Zdefd�Z
d	�Zej d
��Zej de	fd��Zy
)�AnsiblePull�distroc��dg|_ddg|_||_i|_d|_t
jjdd�|jd<y)Nzansible-pullz	--version�HOMEz/root)�cmd_pull�cmd_versionr�env�run_user�os�environ�get)�selfrs  �=/usr/lib/python3/dist-packages/cloudinit/config/cc_ansible.py�__init__zAnsiblePull.__init__ sM��'�(��
�*�K�8���������'+��
��:�:�>�>�&�'�:�������returnc��|j|j�\}}|j�jd�}t	j
d|�}|r0|j
d�}tjj|�Sy)Nrz	([\d\.]+))
�do_asr�
splitlines�pop�re�search�groupr�Version�from_str)r#�stdout�_�
first_line�matches�versions      r$�get_versionzAnsiblePull.get_version+sn���J�J�t�/�/�0�	����&�&�(�,�,�Q�/�
��)�)�L�*�5����m�m�A�&�G��$�$�-�-�g�6�6�r&c�J�|jg|j�|��\}}|S�N)r)r)r#�argsr1r2s    r$�pullzAnsiblePull.pull4s(���J�J�6����6��6�7�	����
r&c�:�|j�std��y)Nz!command: ansible is not installed)�is_installed�
ValueError�r#s r$�
check_depszAnsiblePull.check_deps8s��� � �"��@�A�A�#r&�commandc��|js|j|fi|��S|jj||jfi|��Sr8)rrrr)�r#r@�kwargss   r$r)zAnsiblePull.do_as<sA���}�}��4�9�9�W�/��/�/� �t�{�{� � ��$�-�-�B�6�B�Br&c��tj�5tj|fd|ji|��cddd�S#1swYyxYw)N�
update_env)r�
suspend_crashrrrBs   r$rzAnsiblePull.subpAsA��
�
)�
)�
+�	E��9�9�W�D����D�V�D�	E�	E�	E�s�"A�A
c��yr8�r>s r$r<zAnsiblePull.is_installedE���r&�pkg_namec��yr8rH�r#rJs  r$�installzAnsiblePull.installIrIr&N)�__name__�
__module__�__qualname__rr%rrr/r6�strr:r?�listr)r�abc�abstractmethodr<rMrHr&r$rrs���	;�v�	;��X�i�&7�&7�8���S��B�C�T�C�
E�	���
��
�	���
��
��
r&rc�F��eZdZdedeef�fd�Zdefd�Zdefd�Z	�xZ
S)�AnsiblePullPipr�userc� ��t�|�|�||_|jtj
ddg�\}}|�d�}|jjd�}|r!dj||g�|jd<y||jd<y)Nz-cz('import site; print(site.getuserbase())'z/bin/�PATH�:)	�superr%rr)�sys�
executablerr"�join)r#rrW�	user_baser2�ansible_path�old_path�	__class__s       �r$r%zAnsiblePullPip.__init__Os����
���� ���
��z�z�
�^�^�T�#M�N�
��	�1�$��E�*���8�8�<�<��'���"�x�x��<�(@�A�D�H�H�V��+�D�H�H�V�r&rJc�*�|j�s�	ddl}tjdddg}tjjtjjtjd�d��r|jd�|jr|jd	�|j!g|�d
�d��|j!g|�|��yy#t$r3|jj	|jj
g�Y��wxYw)zishould cloud-init grow an interface for non-distro package
        managers? this seems reusable
        rN�-m�piprM�stdlibzEXTERNALLY-MANAGEDz--break-system-packagesz--userz	--upgrade)r<re�ImportErrorr�install_packages�pip_package_namer\r]r �path�existsr^�	sysconfig�get_path�appendrr))r#rJre�cmds    r$rMzAnsiblePullPip.install^s���� � �"�
M��������	�C��w�w�~�~�������&�&�x�0�2F���
�
�
�4�5��}�}��
�
�8�$��J�J�1��1�k�1�5�1�2��J�J�'��'�h�'�(�+#���
M����,�,�d�k�k�.J�.J�-K�L�
M�s�C�9D�Dr'c�V�|jtjdddg�\}}d|vS)NrdrerRr)r)r\r])r#r1r2s   r$r<zAnsiblePullPip.is_installedys,���J�J�����e�V�D�E�	����F�"�"r&)rNrOrPrrrQr%rM�boolr<�
__classcell__)rbs@r$rVrVNs2���
,�v�
,�X�c�]�
,�)��)�6#�d�#r&rVc�$�eZdZdefd�Zdefd�Zy)�AnsiblePullDistrorJc�^�|j�s|jj|g�yyr8)r<rrhrLs  r$rMzAnsiblePullDistro.installs'��� � �"��K�K�(�(�(��4�#r&r'c�>�ttjd��S)Nr)rqr�whichr>s r$r<zAnsiblePullDistro.is_installed�s���D�J�J�y�)�*�*r&N)rNrOrPrQrMrqr<rHr&r$rtrt~s��5��5�+�d�+r&rt�name�cfg�cloudr9r'c�\�|jdi�}|jd�}|jd�}|jd�}|jd�}|jd�}	|jdd�}
|r�t|�|j}|d	k(r
t||�}nt	|�}|j|
�|j
�|jd
d�}
|
r|
|jt<|rt||�|	rt|t|	��|r
t||�yyy)Nrr�install_method�setup_controller�galaxyr:�package_name�rer)
r"�validate_configrrVrtrMr?r�CFG_OVERRIDE�ansible_galaxy�run_ansible_pullr�ansible_controller)rxryrzr9�ansible_cfg�ansible_userr|r}�
galaxy_cfg�pull_cfgrrrrs              r$�handler��s�����	�2�.�K��?�?�:�.�L� �_�_�%5�6�N�"���'9�:������*�J����v�&�H��?�?�>�2�6�L����$������U�"�$�V�\�:�G�'��/�G�����%�����$���)9�2�>���(6�G�K�K��%���:�w�/���W�h�x�&8�9���/��9��-r&c�z�d}|D]}t||�r�td|�d|����|jd�r$dD]}t||�r�td|�d|����|jd�}|r9t|jd�|jd�g�std	|����|d
}|dvrtd��y)
N)r|rzMissing required key 'z' from r:)zpull/urlzpull/playbook_namer}�repositories�run_ansiblezMissing required key from r|)rerz Invalid install method {install})rr=r"�any)ry�
required_keys�key�controller_cfgrMs     r$r�r��s����M��I���s�C�(��5�c�U�'�#��G�H�H�I��w�w�v��3�	M�C�"�3��,� �#9�#��g�c�U�!K�L�L�	M��W�W�/�0�N����"�"�>�2��"�"�=�1�
�
��9�.�9I�J�K�K��"�#�G��'�'��;�<�<�(r&c�~�|j�D��cic]\}}|dur|jdd�|��c}}Scc}}w)zremove boolean false valuesFr2�-)�items�replace)ryr��values   r$�filter_argsr��sF�� �I�I�K���S�%����	���C���u�$����s�!9r:c��|jd�}|j�}|stjd�n^|t	j
ddd�krD|j
d�r3td|j�d|j�d|j�d	���|jgt|�j�D��cgc]\}}|d
urd|�d|��nd|����c}}�|���}|r!tjj!|��yycc}}w)
N�
playbook_namezCannot parse ansible version��r�diffzAnsible version �.z%doesn't support --diff flag, exiting.T�--�=)r+r6�LOG�warningrr/r"r=�major�minor�patchr:r�r�r\r1�write)r:ryr��vr�r�r1s       r$r�r��s������1�M�����A�����2�3�	
�Y�
�
�q�!�Q�
'�	'��7�7�6�?��"�1�7�7�)�1�Q�W�W�I�Q�q�w�w�i�7�8��
��T�Y�Y��*�#�.�4�4�6�

���U�#(�t�"3�b���Q�u�g��2�c�U��C�

��
	��F���
�
���F�8�%���


s�D	c��|jdg�}|stjd|�|D]}|j|��y)N�actionszInvalid config: %s)r"r�r�r))ryrr�r@s    r$r�r��s?���g�g�i��$�G�����(�#�.�����
�
�g��r&c
�x�|jdg�D]}|jdd|d|dg��|jdg�D]m}|jd�}|jd�}d	|gt|�j	�D��cgc]
\}}d
|�d|����c}}�}|j||���oycc}}w)
Nr��git�clone�sourcerjr��playbook_dirr�zansible-playbookr�r�)�cwd)r"r)r+r�r�)	ryr�
repositoryr9r�r�r�r�r@s	         r$r�r��s����g�g�n�b�1�
�
��
�
�
�G�Z��1�:�f�3E�F�	
�
����
�r�*�1���x�x��/������1�
���
�4?�t�3D�3J�3J�3L�
M�Z�S�%��3�%�q��� �
M�
��
	�
�
�g�<�
�0�1��Ns�	B6
)/�__doc__rS�loggingr r,r\rl�copyr�typingr�	cloudinitrrr�cloudinit.cloudr�cloudinit.configr	�cloudinit.config.schemar
�cloudinit.distrosrr�cloudinit.settingsr
�cloudinit.utilrr�__annotations__�	getLoggerrNr�r��ABCrrVrtrQrRr��dictr�r�r�r�r�rHr&r$�<module>r�s��?�
��	�	�
����5�5�!�#�.�1�+�*����}� )�{�	��j���g����!����,
�#�'�'�,
�^-#�[�-#�`+��+�":��":�6�":�%�":�t�":��":�J=��=�8�T��d��&�;�&�T�&�0���{��
1�D�
1�;�
1r&