관리-도구
편집 파일: cc_ubuntu_pro.cpython-39.pyc
a ����'�Dg�6����������������������@���sL��U�d�Z�ddlZddlZddlZddlmZmZ�ddlmZ�ddl m Z mZmZ�ddl mZ�ddlmZ�ddlmZ�dd lmZ�ed dg�Zdd gedgee��d�Zeed<�e�e�ZdZdZdZe d�dd�Z!e d�dd�Z"d+ed�dd�Z#d,dd�Z$ed�dd �Z%e e&d!�d"d#�Z'e d�d$d%�Z(e d�d&d'�Z)e*eeedd(�d)d*�Z+dS�)-z1ubuntu_pro: Configure Ubuntu Pro support services�����N)�Any�List)�urlparse)�performance�subp�util)�Cloud)�Config)� MetaSchema)�PER_INSTANCEzubuntu-advantageZubuntu_advantageZ cc_ubuntu_proZubuntu� ubuntu_pro)�idZdistrosZ frequencyZactivate_by_schema_keys�meta�REDACTEDzUUnable to determine if this is an Ubuntu Pro instance. Fallback to normal Pro attach.)Z http_proxyZhttps_proxyZglobal_apt_http_proxyZglobal_apt_https_proxyZua_apt_http_proxyZua_apt_https_proxy)�pro_sectionc�����������������C���s����d|�vrd�S�|�d�}t�|t�s@dt|�j���}t�|��t|��d|vrLd�S�|d�}t�|t�s�dt|�j���}t�|��t|��d�S�)N�featuresz.'ubuntu_pro.features' should be a dict, not a �disable_auto_attachzB'ubuntu_pro.features.disable_auto_attach' should be a bool, not a )� isinstance�dict�type�__name__�LOG�error�RuntimeError�bool)r���r����msgr�����r����B/usr/lib/python3.9/site-packages/cloudinit/config/cc_ubuntu_pro.py�validate_schema_features*���s(���� �� �� r���)� pro_configc�������������� ���C���s����g�}t�|�����D�]x\}}|tvr0t�d|��qn |du�r:qz&t|�}|jdvr^|�d|�����W�q�tt fy����|�d|�����Y�q0�q|r�t d� d�|����dS�)a���Validate user-provided ua:config option values. This function supplements flexible jsonschema validation with specific value checks to aid in triage of invalid user-provided configuration. Note: It does not log/raise config values as they could be urls containing sensitive auth info. @param pro_config: Dictionary of config value under 'ubuntu_pro'. @raises: ValueError describing invalid values provided. z4Not validating unknown ubuntu_pro.config.%s propertyN)�http�httpsz-Expected URL scheme http/https for ua:config:zExpected a URL for ua:config:z$Invalid ubuntu_pro configuration: {}� )�sorted�items�KNOWN_PRO_CONFIG_PROPSr����warningr����scheme�append�AttributeError� ValueError�format�join)r����errors�key�valueZ parsed_urlr���r���r����supplemental_schema_validationE���s,���� � ��r0���c�����������������C���s���|�d�u�rd�S�t�|�t�s,tdt|��j��d���t|���g�}t|�����D��]\}}d�}i�}|d�u�rxt� d|��ddd|g}nh|��d�}t� d|��t �d |�r�|��d t �|����}n|��d |���}ddd|g}d|d�d ��|g�i}zt j |fi�|���W�qD�t j�yJ�}�z8t|�} |d�u�r(| �|t�} |�|| f��W�Y�d�}~qDd�}~0�0�qD|�r�|D�]\} }t�d| |���qXtd�d�dd��|D������d�S�)Nz+ubuntu_pro: config should be a dict, not a z%; skipping enabling config parameterszDisabling Pro config for %s�pro�configZunsetz =REDACTEDzEnabling Pro config %sz\s�=�set� logstring���z#Failure enabling/disabling "%s": %sz3Failure enabling/disabling Ubuntu Pro config(s): {}�, c�����������������s���s���|�]\}}d���|�V��qdS�)z"{}"N)r+���)�.0�param�_r���r���r���� <genexpr>���������z!set_pro_config.<locals>.<genexpr>)r���r���r���r���r���r0���r#���r$���r����debug�re�search�escaper����ProcessExecutionError�str�replacer���r(���r&���r+���r,���)r���� enable_errorsr.���r/���Zredacted_key_valueZsubp_kwargsZ config_cmd� key_value�e�err_msgr9���r���r���r���r����set_pro_configl���sL���� �� &��rH���c�������������� ���C���sz��|du�rg�}n<t�|t�r*t�d��|g}n t�|t�sJt�dt|�j��g�}|r\ddd|�g}n dd|�g}|dd��tg�}t�dd � |���zt j |d dh|d��W�nV�t jy��}�z<t|��|�t�}d |���}t �t|��t|�|�W�Y�d}~n d}~0�0�|�sdS�g�d�|�}zt j |dd dhd�\}} W�n<�t j�yh�}�z tdd� |���|�W�Y�d}~n d}~0�0�zt�|�} W�n8�tj�y��}�ztd|����|�W�Y�d}~n d}~0�0�g�}| �dg��D�]2}|d�dk�r�t�d|d����q�|�|���q�|�rvg�}|D�]^}|�d�} | du�r<|�| ��d| ��d|d����}nd|d���d|d����}t �t|���qtdd� |����dS�) z=Call ua command line client to attach and/or enable services.NzNubuntu_pro: enable should be a list, not a string; treating as a single enablezIubuntu_pro: enable should be a list, not a %s; skipping enabling servicesr1���Zattachz--no-auto-enabler6���zAttaching to Ubuntu Pro. %s� r�������)�rcsr5���zFailure attaching Ubuntu Pro: )r1����enablez--assume-yesz--format�jsonT����)ZcapturerK���z!Error while enabling service(s): r7���zPro response was not json: r-���Zmessage_codezservice-already-enabledzService `%s` already enabled.�servicezFailure enabling `z`: �messagezFailure of type `r���z(Failure enabling Ubuntu Pro service(s): )r���rB���r���r&����listr���r���r���r=���r,���r���rA���rC���r����logexcr���rM����loadsZJSONDecodeError�getr(���)�tokenrL���Z attach_cmdZredacted_cmdrF����errr����cmdZ enable_stdoutr:���Zenable_resprD���Zerror_servicesrO���r���r���r���� configure_pro����s����� � � ���� ��rX�����cloudc�����������������C���sv���t��d�rdS�z|�j����W�n �ty<���t�td����Y�n0�z|�j�dg��W�n �typ���t�td����Y�n0�dS�)z.Install ubuntu-advantage-tools if not present.r1���NzPackage update failedzubuntu-advantage-toolsz(Failed to install ubuntu-advantage-tools) r����whichZdistroZupdate_package_sources� Exceptionr���rR���r���Zinstall_packagesrY���r���r���r����maybe_install_ua_tools����s���� r]���)r����returnc�������������� ���C���s����t�|��di���dd��}|r dS�ddlm}�ddlm}�z8tjddd ���|��}W�d�����n1�sd0����Y��W�n<�|y��}�z$t� d |��t� t��W�Y�d�}~dS�d�}~0�0�|jS�)Nr���r���Fr���)�UserFacingError)�should_auto_attachz6Checking if the instance can be attached to Ubuntu Pro�always�Zlog_modez%Error during `should_auto_attach`: %s)r���rT����uaclient.api.exceptionsr_���Z4uaclient.api.u.pro.attach.auto.should_auto_attach.v1r`���r����Timedr���r=���r&����ERROR_MSG_SHOULD_AUTO_ATTACH)r���r���r_���r`����result�exr���r���r����_should_auto_attach��s$������( rh���c�����������������C���sZ���|���d�}|s$d}t�|��t|��|���d�}|rDt�dd�|���t||���d�d��d�S�)NrU���z8`ubuntu_pro.token` required in non-Pro Ubuntu instances.�enable_betaz<Ignoring `ubuntu_pro.enable_beta` services in Pro attach: %sr7���rL���)rU���rL���)rT���r���r���r���r=���r,���rX���)r���rU���r���ri���r���r���r����_attach(��s���� �rj���c����������� ��� ���C���s����ddl�m}m}�ddlm}m}�|��d�}|��d�}|||d�}z<tjddd ���||d ��W�d�����n1�sp0����Y��W�nn�|y����|d�us�|d�ur�t � d��Y�nD�|y��}�z,d|j���} t �| ��t | �|�W�Y�d�}~n d�}~0�0�d�S�) Nr���)�AlreadyAttachedErrorr_���)�FullAutoAttachOptions�full_auto_attachrL���ri���)rL���ri���zAttaching to Ubuntu Prora���rb���)�optionsz�The instance is already attached to Pro. Leaving enabled services untouched. Ignoring config directives ubuntu_pro: enable and enable_betaz!Error during `full_auto_attach`: )rc���rk���r_���Z2uaclient.api.u.pro.attach.auto.full_auto_attach.v1rl���rm���rT���r���rd���r���r&���r���r���r���) r���rk���r_���rl���rm���rL���ri���rn���rg���r���r���r���r����_auto_attach7��s(���� �,� ro���)�name�cfgrZ����argsr^���c�����������������C���s0��d�}t�t�|��}|rRt|�dkr4tdd�|����t�dd�|���||d��}d|v�rv|rnt�d|d���|d�}|d�u�r�t�d|���d�S�t |t �s�d t|�j���}t� |��t|��d |v�r�d}t� |��t|��t|��t|�d���t|��t�d ��t|��rt|��n|���dhk�s,t|��d�S�)NrN���zLUnable to configure Ubuntu Pro. Multiple deprecated config keys provided: %sr7���z^Deprecated configuration key(s) provided: %s. Expected "ubuntu_pro"; will attempt to continue.r���r���z;Ignoring deprecated key %s and preferring ubuntu_pro configz=Skipping module named %s, no 'ubuntu_pro' configuration foundz%'ubuntu_pro' should be a dict, not a ZcommandszPDeprecated configuration "ubuntu-advantage: commands" provided. Expected "token"r2���zETo discover more log info, please check /var/log/ubuntu-advantage.logr���)rQ����DEPRECATED_KEYS�intersection�lenr���r,���r���r&���r=���r���r���r���r���r���r]���rH���rT���r���rh���ro����keysrj���)rp���rq���rZ���rr���r���Z deprecatedr���r���r���r����handleY��sb��������� �� � � rw���)N)N),�__doc__rM���Zloggingr>����typingr���r����urllib.parser���Z cloudinitr���r���r���Zcloudinit.cloudr���Zcloudinit.configr ���Zcloudinit.config.schemar ���Zcloudinit.settingsr���r4���rs���rQ���r����__annotations__Z getLoggerr���r���r���re���r%���r���r���r0���rH���rX���r]���r���rh���rj���ro���rB���rw���r���r���r���r����<module>���s<���� � ', d"