HEX
Server: nginx/1.24.0
System: Linux webserver 6.8.0-87-generic #88-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 09:28:41 UTC 2025 x86_64
User: wpuser (1002)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/cloudinit/config/__pycache__/cc_ansible.cpython-312.pyc
�

쑛h�)�
��UdZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
mZddl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)�List�Optional)�	lifecycle�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�F�tj|fd|ji|��S)N�
update_env)rrrBs   r$rzAnsiblePull.subpAs���y�y��@�T�X�X�@��@�@r&c��yr8�r>s r$r<zAnsiblePull.is_installedD���r&�pkg_namec��yr8rG�r#rIs  r$�installzAnsiblePull.installHrHr&N)�__name__�
__module__�__qualname__rr%rrr/r6�strr:r?�listr)r�abc�abstractmethodr<rLrGr&r$rrs���	;�v�	;��X�i�&7�&7�8���S��B�C�T�C�
A�	���
��
�	���
��
��
r&rc�^��eZdZdedeef�fd�Zd�Zd�Zdefd�Z	de
fd	�Zd
efd�Z
�xZS)�AnsiblePullPipr�userc�R��t�|�|�||_|j�yr8)�superr%r�add_pip_install_site_to_path�r#rrV�	__class__s   �r$r%zAnsiblePullPip.__init__Ns#���
���� ���
��)�)�+r&c��|jrx|jtjddg�\}}|�d�}|jjd�}|r!dj
||g�|jd<y||jd<yy)Nz-cz&import site; print(site.getuserbase())z/bin/�PATH�:)rr)�sys�
executablerr"�join)r#�	user_baser2�ansible_path�old_paths     r$rYz+AnsiblePullPip.add_pip_install_site_to_pathSs���=�=��:�:��N�N��<���L�I�q�(�[��.�L��x�x�|�|�F�+�H��#&�8�8�X�|�,D�#E����� �#/����� �r&c��	ddl}y#t$r3|jj|jjg�YywxYw)Nr)�pip�ImportErrorr�install_packages�pip_package_name)r#rfs  r$�bootstrap_pip_if_requiredz(AnsiblePullPip.bootstrap_pip_if_requiredds;��	I����	I��K�K�(�(�$�+�+�*F�*F�)G�H�	I�s��9A�ArIc��|j�|j�s�tjdddg}tj
j
tj
jtjd�d��r|jd�|jr|jd�|j|�tjd|�|jg|�|��tjd	|�y
y
)zishould cloud-init grow an interface for non-distro package
        managers? this seems reusable
        �-mrfrL�stdlibzEXTERNALLY-MANAGEDz--break-system-packages�--userzInstalling the %s packagezInstalled the %s packageN)rjr<r_r`r �path�existsra�	sysconfig�get_path�appendr�_AnsiblePullPip__upgrade_pip�LOG�infor))r#rI�cmds   r$rLzAnsiblePullPip.installjs���	
�&�&�(�� � �"�������	�C��w�w�~�~�������&�&�x�0�2F���
�
�
�4�5��}�}��
�
�8�$����s�#��H�H�0�(�;��J�J�'��'�h�'�(��H�H�/��:�)#r&rwc���tjd�	|jg|�d�d��tjd�y#tj$r }tjd|�Yd}~yd}~wwxYw)zOTry to upgrade pip then not raise an exception
        if the pip upgrade failsz
Upgrading pipz	--upgraderfzUpgraded pipzZFailed at upgrading pip. This is usually not criticalso the script will skip this step.
%sN)rurvr)r�ProcessExecutionError�warning)r#rw�es   r$�
__upgrade_pipzAnsiblePullPip.__upgrade_pip�sr��	����!�	%��J�J�1��1�k�1�5�1�2�
�H�H�^�$���)�)�	��K�K�=��
�
��	�s�A�A7�A2�2A7r'c��tjdddg}|jr|jd�|j	|�\}}d|vS)NrlrfrQrnr)r_r`rrsr))r#rwr1r2s    r$r<zAnsiblePullPip.is_installed�sC���~�~�t�U�F�3���=�=��J�J�x� ��J�J�s�O�	����F�"�"r&)rMrNrOrrrPr%rYrjrLrQrt�boolr<�
__classcell__�r[s@r$rUrUMsI���,�v�,�X�c�]�,�
0�"I�;��;�8%��%�"#�d�#r&rUc�F��eZdZdedeef�fd�Zdefd�Zdefd�Z	�xZ
S)�AnsiblePullDistrorrVc�2��t�|�|�||_yr8)rXr%rrZs   �r$r%zAnsiblePullDistro.__init__�s���
���� ���
r&rIc�^�|j�s|jj|g�yyr8)r<rrhrKs  r$rLzAnsiblePullDistro.install�s'��� � �"��K�K�(�(�(��4�#r&r'c�>�ttjd��S)Nr)r~r�whichr>s r$r<zAnsiblePullDistro.is_installed�s���D�J�J�y�)�*�*r&)rMrNrOrrrPr%rLr~r<rr�s@r$r�r��s2����v��X�c�]��5��5�+�d�+r&r��name�cfg�cloudr9r'c��|jdi�}|jd�}|jd�}|jd�}|jd�}|jd�}	|jdd�}
|r�t|�|j}|d	k(r
t||�}nt	||�}|j|
�|j
�|jd
d�}
|
r|
|jt<|rt||�|	r/t|	t�r|	g}	|	D]}t|t|���|r
t||�yyy)Nrr�install_method�setup_controller�galaxyr:�package_name�rfr)r"�validate_configrrUr�rLr?r�CFG_OVERRIDE�ansible_galaxy�
isinstance�dict�run_ansible_pullr�ansible_controller)r�r�r�r9�ansible_cfg�ansible_userr�r��
galaxy_cfg�pull_cfgr�rrrs              r$�handler��s1�����	�2�.�K��?�?�:�.�L� �_�_�%5�6�N�"���'9�:������*�J����v�&�H��?�?�>�2�6�L����$������U�"�$�V�\�:�G�'���=�G�����%�����$���)9�2�>���(6�G�K�K��%���:�w�/���(�D�)�$�:���
9�� ��(�3�-�8�
9���/��9��3r&c��d}|D]}t||�r�td|�d|����|jd�}|r�t|t�r|g}nt|t
�std|����|D]�}t|t�std|����t|d�std|����t|d	�}t|d
�}t
||g�std|����t||g�s�|td|����|jd
�}|r9t
|jd�|jd�g�std|����|d}|dvrtd��y)N)r�r�zMissing required key 'z' from r:zLInvalid value ansible.pull. Expected either dict of list of dicts but found z7Invalid value of ansible.pull. Expected dict but found �urlz Missing required key 'url' from �
playbook_name�playbook_namesz+Missing required key 'playbook_names' from zzKey 'ansible.pull.playbook_name' and 'ansible.pull.playbook_names' are mutually exclusive. Please use 'playbook_names' in r��repositories�run_ansiblezMissing required key from r�)rfrz Invalid install method {install})rr=r"r�r�rQ�any�all)	r��
required_keys�keyr��p_cfg�has_playbook�
has_playbooks�controller_cfgrLs	         r$r�r��s����M��I���s�C�(��5�c�U�'�#��G�H�H�I��w�w�v��H���h��%� �z�H��H�d�+��$�$,�:�/��
��	�E��e�T�*� ���w� ���#�5�%�0� �#C�E�7�!K�L�L�*�5�/�B�L�+�E�3C�D�M���m�4�5� �A�%��I����m�\�2�3� �7�7<�g�?���	�*�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)r�r��values   r$�filter_argsr�sF�� �I�I�K���S�%����	���C���u�$����s�!9r:c	��|jdd�}|jdd�}|r|g}|j�}|stjd�n^|t	j
ddd�krD|j
d�r3td|j�d	|j�d	|j�d
���t|�j�D��cgc]\}}|durd|�d
|��nd|����}}}|rR|t	j
ddd�k\r8|jg|�|���}|r!tjj!|��yy|D]9}	|jg|�|	���}|s�tjj!|���;ycc}}w)Nr�r�zCannot parse ansible version��r�diffzAnsible version �.z%doesn't support --diff flag, exiting.T�--�=�)r+r6rurzrr/r"r=�major�minor�patchr�r�r:r_r1�write)
r:r�r�r��vr�r��	pull_argsr1�playbooks
          r$r�r�s�������$�7�M� #���(8�$� ?�N��'�������A�����2�3�	
�Y�
�
�q�!�Q�
'�	'��7�7�6�?��"�1�7�7�)�1�Q�W�W�I�Q�q�w�w�i�7�8��
�&�c�*�0�0�2���C��$�4�/�"�S�E��5�'��r�#��Z�?��I��	�Q�)�#�#�A�r�1�-�
-�����7�I�7��7����J�J����x�)��'�	.�H��T�Y�Y�4�	�4�8�4�F���
�
� � �F�8�-�	.��s�E=c��|jdg�}|stjd|�|D]}|j|��y)N�actionszInvalid config: %s)r"rurzr))r�rr�r@s    r$r�r�5s?���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�sourceror��playbook_dirr�zansible-playbookr�r�)�cwd)r"r)r+r�r�)	r�r�
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__rR�loggingr r,r_rq�copyr�typingrr�	cloudinitrr�cloudinit.cloudr�cloudinit.configr	�cloudinit.config.schemar
�cloudinit.distrosrr�cloudinit.settingsr
�cloudinit.utilrr�__annotations__�	getLoggerrMrur��ABCrrUr�rPrQr�r�r�r�r�r�r�rGr&r$�<module>r�s��?�
��	�	�
���!�%�!�#�.�1�+�*����}� )�{�	��j���g����!����+
�#�'�'�+
�\Q#�[�Q#�h
+��
+�%:��%:�6�%:�%�%:�t�%:��%:�P2=��2=�j�T��d��.�;�.�T�.�B���{��
1�D�
1�;�
1r&