관리-도구
편집 파일: cc_ansible.cpython-39.pyc
a ����'�Dg�����������������������@���sl��U�d�Z�ddlZddlZddlZddlZddlZddlZddlmZ�ddl m Z �ddlmZm Z �ddlmZ�ddlmZ�ddlmZ�dd lmZmZ�dd lmZ�ddlmZ�deegd gd�Zeed<�e�e�ZdZ G�dd��dej!�Z"G�dd��de"�Z#G�dd��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|���e�Zd�Zed�dd�Zeej�d�dd�Ze d�dd�Z d d ��Zed�dd �Z dd��Zejdd���Zeje d�dd��ZdS�)�AnsiblePull)�distroc�����������������C���s<���dg|�_�ddg|�_||�_i�|�_d�|�_tj�dd�|�jd<�d�S�)Nzansible-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__��returnc�����������������C���sH���|���|�j�\}}|����d�}t�d|�}|rD|�d�}tj� |�S�d�S�)Nr���z ([\d\.]+)) �do_asr���� splitlines�pop�re�search�groupr����VersionZfrom_str)r����stdout�_Z first_line�matches�versionr���r���r����get_version+���s���� zAnsiblePull.get_versionc�����������������G���s���|���g�|�j�|��\}}|S��N)r!���r���)r����argsr(���r)���r���r���r����pull4���s����zAnsiblePull.pullc�����������������C���s���|�����std��d�S�)Nz!command: ansible is not installed)�is_installed� ValueError�r���r���r���r���� check_deps8���s����zAnsiblePull.check_deps)�commandc�����������������K���s0���|�j�s|�j|fi�|��S�|�jj||�j�fi�|��S�r-���)r���r���r���r!����r���r4����kwargsr���r���r���r!���<���s����zAnsiblePull.do_asc�����������������K���s���t�j�|fd|�ji|��S�)NZ update_env)r���r���r5���r���r���r���r���A���s����zAnsiblePull.subpc�����������������C���s���d�S�r-���r���r2���r���r���r���r0���D���s����zAnsiblePull.is_installed��pkg_namec�����������������C���s���d�S�r-���r����r���r8���r���r���r����installH���s����zAnsiblePull.installN)�__name__� __module__�__qualname__r ���r���r���r���r'���r,����strr/���r3����listr!���r����abc�abstractmethodr0���r:���r���r���r���r���r������s��� r���c�����������������������sD���e�Zd�Zeee�d���fdd�Zed�dd�Zed�dd �Z ���Z S�) �AnsiblePullPip)r����userc��������������������sf���t����|��||�_|��tjddg�\}}|��d�}|�j�d�}|rXd�||g�|�jd<�n ||�jd<�d�S�)Nz-cz('import site; print(site.getuserbase())'z/bin/�PATH�:) �superr���r���r!����sys� executabler���r����join)r���r���rC���� user_baser)���Zansible_pathZold_path�� __class__r���r���r���N���s���� � zAnsiblePullPip.__init__r7���c�����������������C���s����|�����s�zddl}W�n$�ty8���|�j�|�jjg��Y�n0�tjdddg}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 r���N�-m�pipr:���ZstdlibzEXTERNALLY-MANAGEDz--break-system-packagesz--userz --upgrade)r0���rN����ImportErrorr����install_packagesZpip_package_namerG���rH���r����path�existsrI���� sysconfigZget_path�appendr���r!���)r���r8���rN����cmdr���r���r���r:���]���s(����� �� zAnsiblePullPip.installr���c�����������������C���s ���|���tjdddg�\}}d|v�S�)NrM���rN���r?���r ���)r!���rG���rH���)r���r(���r)���r���r���r���r0���x���s����zAnsiblePullPip.is_installed)r;���r<���r=���r ���r���r>���r���r:����boolr0���� __classcell__r���r���rK���r���rB���M���s���rB���c�������������������@���s(���e�Zd�Zed�dd�Zed�dd�ZdS�)�AnsiblePullDistror7���c�����������������C���s���|�����s|�j�|g��d�S�r-���)r0���r���rP���r9���r���r���r���r:���~���s����zAnsiblePullDistro.installr���c�����������������C���s���t�t�d��S�)Nr ���)rV���r����whichr2���r���r���r���r0�������s����zAnsiblePullDistro.is_installedN)r;���r<���r=���r>���r:���rV���r0���r���r���r���r���rX���}���s���rX���)�name�cfg�cloudr.���r ���c�����������������C���s����|��di��}|��d�}|��d�}|��d�}|��d�}|��d�} |��dd�} |r�t|��|j}|d krpt||�}nt|�}|�| ��|����|��d d�} | r�| |jt<�|r�t ||��| r�t |t| ���|r�t||��d�S�)Nr ���r����install_method�setup_controllerZgalaxyr/����package_name��rN���r���) r����validate_configr���rB���rX���r:���r3���r����CFG_OVERRIDE�ansible_galaxy�run_ansible_pullr����ansible_controller)rZ���r[���r\���r.���Zansible_cfgZansible_userr]���r^���Z galaxy_cfgZpull_cfgr_���r���r ���r���r���r���r����handle����s0���� rf����r[���c�����������������C���s����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��d�S�) N)r]���r_���zMissing required key 'z' from r/���)zpull/urlzpull/playbook_namer^����repositories�run_ansiblezMissing required key from r]���)rN���r���z Invalid install method {install})r���r1���r����any)r[���� required_keys�keyZcontroller_cfgr:���r���r���r���ra�������s&���� ��ra���)r[���r ���c�����������������C���s���dd��|�����D��S�)zremove boolean false valuesc�����������������S���s&���i�|�]\}}|d�ur|��dd�|�qS�)Fr)����-)�replace��.0rl����valuer���r���r���� <dictcomp>����s����zfilter_args.<locals>.<dictcomp>)�itemsrg���r���r���r����filter_args����s�����rt���)r/���r[���c�����������������C���s����|��d�}|����}|s"t�d��n>|t�ddd�k�r`|�d�r`td|j��d|j ��d|j ��d ���|�jg�d d��t|�� ��D���|�R���}|r�tj�|����d�S�)N� playbook_namezCannot parse ansible version��������r����diffzAnsible version �.z%doesn't support --diff flag, exiting.c�����������������S���s2���g�|�]*\}}|d�ur$d|��d|���nd|����qS�)T�--�=r���ro���r���r���r���� <listcomp>����s����z$run_ansible_pull.<locals>.<listcomp>)r#���r,����LOG�warningr���r'���r���r1����major�minorZpatchr/���rt���rs���rG���r(����write)r/���r[���ru����vr(���r���r���r���rd�������s$���� � ���rd���)r[���r ���c�����������������C���s4���|���dg��}|st�d|���|D�]}|�|��q d�S�)N�actionszInvalid config: %s)r���r}���r~���r!���)r[���r ���r����r4���r���r���r���rc�������s ����rc���c�����������������C���s����|���dg��D�]}|�dd|d�|d�g��q|���dg��D�]D}|�d�}|�d�}d |gd d��t|����D���}|j||d��q8d�S�) Nrh����gitZclone�sourcerQ���ri����playbook_dirru���zansible-playbookc�����������������S���s ���g�|�]\}}d�|��d|����qS�)rz���r{���r���ro���r���r���r���r|������������z&ansible_controller.<locals>.<listcomp>)�cwd)r���r!���r#���rt���rs���)r[���r ���Z repositoryr.���r����ru���r4���r���r���r���re�������s����� ��re���).�__doc__r@���Zloggingr���r$���rG���rS����copyr����typingr���Z cloudinitr���r���Zcloudinit.cloudr���Zcloudinit.configr���Zcloudinit.config.schemar���Zcloudinit.distrosr ���r ���Zcloudinit.settingsr���Zcloudinit.utilr���r����__annotations__Z getLoggerr;���r}���rb����ABCr���rB���rX���r>���r?���rf����dictra���rt���rd���rc���re���r���r���r���r����<module>���s>���� .0 %