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

��Jh�K��`�ddlZddlZddlZddlmZmZddlmZmZm	Z	ddl
mZmZm
Z
mZmZmZmZmZddlmZmZmZmZmZmZmZmZmZddlmZmZddl m!Z!ejDejFe$��Z%dd	d
�Z&dZ'dZ(d
Z)ejT�Z+Gd�d�Z,de-fd�Z.dd�Z/de-fd�Z0y)�N)�	lru_cache�wraps)�Any�Dict�Optional)�apt�event_logger�
exceptions�http�messages�snap�system�util)	�APT_NEWS_URL�BASE_CONTRACT_URL�BASE_LIVEPATCH_URL�BASE_SECURITY_URL�BASE_VULNERABILITY_DATA_URL�CONFIG_DEFAULTS�CONFIG_FIELD_ENVVAR_ALLOWLIST�DEFAULT_CONFIG_FILE�DEFAULT_DATA_DIR)�state_files�user_config_file)�	safe_load�name�type)�availableResources�resourceEntitlements�_unset)�
http_proxy�https_proxy�apt_http_proxy�apt_https_proxy�ua_apt_http_proxy�ua_apt_https_proxy�global_apt_http_proxy�global_apt_https_proxy�update_messaging_timer�metering_timer�apt_news�apt_news_url�vulnerability_data_url_prefix�lxd_guest_attach)
�contract_url�data_dir�features�log_file�	log_level�security_urlr-�settings_overrides�	ua_config�
livepatch_urlc	��eZdZdZdZdZ			d1deeee	fdee
jdeeddfd	�Ze
defd
��Ze
defd��Ze
defd��Ze
deefd
��Zej$defd��Ze
deefd��Zej$defd��Ze
deefd��Zej$defd��Ze
deefd��Zej$defd��Ze
defd��Zej$defd��Ze
ed��deefd���Zej$defd��Ze
ed��deefd���Zej$defd��Ze
defd��Zej$defd��Ze
defd��Zej$defd ��Ze
defd!��Zej$defd"��Ze
defd#��Zej$defd$��Ze
defd%��Z e j$defd&��Z e
defd'��Z!e!j$defd(��Z!e
de
jDfd)��Z#e#j$de
jDfd*��Z#e
d+��Z$e
d,��Z%e
defd-��Z&e
d.��Z'd/�Z(d0�Z)y)2�UAConfig)r%r&)r'r()r#r$N�cfg�user_config�series�returnc�p�|rd|_||_d|_n1t�|_t	|j�\|_|_|r||_n$	tj
j�|_d|jvrOtjji|j
j��|jd�d��|_||_y#t$rO}tjd|��tjd�t
j�|_Yd}~��d}~wwxYw)�NzError loading user config)�exc_infozUsing default config valuesr6T)� optional_type_errors_become_null)�cfg_pathr:�invalid_keys�get_config_path�parse_configr;r�read�	Exception�LOG�warning�UserConfigData�	from_dict�to_dictr<)�selfr:r;r<�es     �1/usr/lib/python3/dist-packages/uaclient/config.py�__init__zUAConfig.__init__Vs��� �D�M��D�H� $�D��+�-�D�M�*6�t�}�}�*E�'�D�H�d�'��*�D��
E�#3�#?�#?�#D�#D�#F�� ��$�(�(�"�/�>�>�H�H�G�4�#�#�+�+�-�G����+�1F�G�15� I� �D��
�����
E����7�!��D����9�:�#3�#B�#B�#D�� � ��
E�s�#C�	D5�&AD0�0D5c�B�|jjdt�S)Nr/)r:�getr�rMs rOr/zUAConfig.contract_urly����x�x�|�|�N�,=�>�>�c�B�|jjdt�S)Nr4)r:rRrrSs rOr4zUAConfig.security_url}rTrUc�B�|jjdt�S)Nr7)r:rRrrSs rOr7zUAConfig.livepatch_url�s���x�x�|�|�O�-?�@�@rUc�.�|jjS�N)r;r!rSs rOr!zUAConfig.http_proxy�s�����*�*�*rU�valuec�x�||j_tjj|j�yrY)r;r!r�write�rMrZs  rOr!zUAConfig.http_proxy�s*��&+����#��$�$�*�*�4�+;�+;�<rUc�.�|jjSrY)r;r"rSs rOr"zUAConfig.https_proxy�s�����+�+�+rUc�x�||j_tjj|j�yrY)r;r"rr\r]s  rOr"zUAConfig.https_proxy�s*��',����$��$�$�*�*�4�+;�+;�<rUc�.�|jjSrY)r;r&rSs rOr&zUAConfig.ua_apt_https_proxy�s�����2�2�2rUc�x�||j_tjj|j�yrY)r;r&rr\r]s  rOr&zUAConfig.ua_apt_https_proxy�s*��.3����+��$�$�*�*�4�+;�+;�<rUc�.�|jjSrY)r;r%rSs rOr%zUAConfig.ua_apt_http_proxy�s�����1�1�1rUc�x�||j_tjj|j�yrY)r;r%rr\r]s  rOr%zUAConfig.ua_apt_http_proxy�s*��-2����*��$�$�*�*�4�+;�+;�<rUc�B�|jj}|�tS|SrY)r;r-r�rM�vals  rOr-z&UAConfig.vulnerability_data_url_prefix�s#�����<�<���;�.�.��
rUc�x�||j_tjj|j�yrY)r;r-rr\r]s  rOr-z&UAConfig.vulnerability_data_url_prefix�s*��9>����6��$�$�*�*�4�+;�+;�<rU)�maxsizec���|jj}|r|S|jj}|r6tj	t
jjdd���|Sy)Nr#r'��old�new)r;r'r#�event�infor�WARNING_DEPRECATED_FIELD�format�rM�
global_val�old_apt_vals   rOr'zUAConfig.global_apt_http_proxy�sh���%�%�;�;�
�����&�&�5�5����J�J��1�1�8�8�(�.E�9��
�
��rUc���||j_d|j_tjjj�tjj|j�yrY)r;r'r#r9�fget�cache_clearrr\r]s  rOr'zUAConfig.global_apt_http_proxy�sP��16����.�*.����'��&�&�+�+�7�7�9��$�$�*�*�4�+;�+;�<rUc���|jj}|r|S|jj}|r6tj	t
jjdd���|Sy)Nr$r(rj)r;r(r$rmrnrrorprqs   rOr(zUAConfig.global_apt_https_proxy�sh���%�%�<�<�
�����&�&�6�6����J�J��1�1�8�8�)�/G�9��
�
��rUc���||j_d|j_tjjj�tjj|j�yrY)r;r(r$r9rurvrr\r]s  rOr(zUAConfig.global_apt_https_proxy�sP��27����/�+/����(��'�'�,�,�8�8�:��$�$�*�*�4�+;�+;�<rUc�8�|jj}|�y|S)Ni`T)r;r)res  rOr)zUAConfig.update_messaging_timer�s �����5�5���;���
rUc�x�||j_tjj|j�yrY)r;r)rr\r]s  rOr)zUAConfig.update_messaging_timer�s*��27����/��$�$�*�*�4�+;�+;�<rUc�8�|jj}|�y|S)Ni@8)r;r*res  rOr*zUAConfig.metering_timer�s �����-�-���;���
rUc�x�||j_tjj|j�yrY)r;r*rr\r]s  rOr*zUAConfig.metering_timer�s*��*/����'��$�$�*�*�4�+;�+;�<rUc�8�|jj}|�y|S)NF)r;�poll_for_pro_licenseres  rOr~zUAConfig.poll_for_pro_license�s"��
���3�3���;���
rUc�x�||j_tjj|j�yrY)r;r~rr\r]s  rOr~zUAConfig.poll_for_pro_licenses*��05����-��$�$�*�*�4�+;�+;�<rUc�8�|jj}|�y|S)NiX)r;�polling_error_retry_delayres  rOr�z"UAConfig.polling_error_retry_delays"�����8�8���;���
rUc�x�||j_tjj|j�yrY)r;r�rr\r]s  rOr�z"UAConfig.polling_error_retry_delays*��5:����2��$�$�*�*�4�+;�+;�<rUc�8�|jj}|�y|S)NT)r;r+res  rOr+zUAConfig.apt_newss �����'�'���;���
rUc�x�||j_tjj|j�yrY)r;r+rr\r]s  rOr+zUAConfig.apt_news!s*��$)����!��$�$�*�*�4�+;�+;�<rUc�B�|jj}|�tS|SrY)r;r,rres  rOr,zUAConfig.apt_news_url&s#�����+�+���;����
rUc�x�||j_tjj|j�yrY)r;r,rr\r]s  rOr,zUAConfig.apt_news_url-s*��(-����%��$�$�*�*�4�+;�+;�<rUc�j�|jj}|�tjjS|SrY)r;r.r�LXDGuestAttachEnum�OFFres  rOr.zUAConfig.lxd_guest_attach2s/�����/�/���;�#�6�6�:�:�:��
rUc��|�tjj}||j_tjj|j�yrY)rr�r�r;r.r\r]s  rOr.zUAConfig.lxd_guest_attach9s@���=�$�7�7�;�;�E�,1����)��$�$�*�*�4�+;�+;�<rUc�B�|jjdt�S)Nr0)r:rRrrSs rOr0zUAConfig.data_dir@s���x�x�|�|�J�(8�9�9rUc��|jjdd�}	tt|j	��S#t
$rtjcYSwxYw)Nr3�DEBUG)r:rR�getattr�logging�upper�AttributeErrorr�)rMr3s  rOr3zUAConfig.log_levelDsH���H�H�L�L��g�6�	�	!��7�I�O�O�$5�6�6���	!��=�=� �	!�s�<�A�Ac�H�|jjdtd�S)Nr2)r:rRrrSs rOr2zUAConfig.log_fileLs���x�x�|�|�J��
�(C�D�DrUc��|jjd�}|r(t|t�r|Stjd|�iS)z>Return a dictionary of any features provided in uaclient.conf.r1zDUnexpected uaclient.conf features value. Expected dict, but found %s)r:rR�
isinstance�dictrHrI)rMr1s  rOr1zUAConfig.featuresPsC���8�8�<�<�
�+����(�D�)������3���
�	rUc�f	�dD]S}t||�}|�tjd|��(t|t�r|dks�>tj||���|js|jr,|js|jrtj��tjd|jtj�tjd|jtj�tjd|jtj�tjd|jtj�tjd|j tj"�tjd|j$tj&�|js|jrDt)j*|j|jt(j,j.�n[|js|jrCt)j*|j|jt(j,j0�g}t3j4�r�t3j6|j |j$�|j s#t3j8t2j:�s/|j$s4t3j8t2j<�r|j?d�ddl m!}dd	l"m#}||�jH}tKd
�|D��}|r�|jM|j |j$�|j s|j9|j:�s'|j$s,|j9|j<�r|j?d�tO|�dkDr:djQ|�}tStTjVjY|�
��ddl-m.}	|j^t`jbjdk7r,|	|�jfstStTjh�ytjjljotkjp|j^���y)N)r)r*z1No config set for %s, default value will be used.r��keyrZr�httpsr
)�	livepatch)�_enabled_servicesc3�@K�|]}|jdk(s�|���y�w)r�N)r)�.0�ents  rO�	<genexpr>z*UAConfig.process_config.<locals>.<genexpr>�s ���� 
��s�x�x�;�/F�C� 
�s��r�z, )�services)�_is_attached)�guest_attach)9r�rH�debugr��intr
�InvalidPosIntConfigValuer'r(r%r&�InvalidProxyCombinationConfigr�validate_proxy�PROXY_VALIDATION_APT_HTTP_URL�PROXY_VALIDATION_APT_HTTPS_URLr!�PROXY_VALIDATION_SNAP_HTTP_URLr"�PROXY_VALIDATION_SNAP_HTTPS_URLr�setup_apt_proxy�
AptProxyScope�GLOBAL�UACLIENTr
�is_snapd_installed�configure_snap_proxy�get_config_option_value�HTTP_PROXY_OPTION�HTTPS_PROXY_OPTION�append�uaclientr��-uaclient.api.u.pro.status.enabled_services.v1r��enabled_services�any�configure_livepatch_proxy�len�join�printr�!PROXY_DETECTED_BUT_NOT_CONFIGUREDrp�(uaclient.api.u.pro.status.is_attached.v1r�r.rr�r��is_attached�-WARNING_LXD_GUEST_ATTACH_SET_BUT_NOT_ATTACHEDr�lxd_pro_config_filer\�LXDProConfig)
rM�proprZ�services_with_proxiesr�r�r��livepatch_enabledr�r�s
          rO�process_configzUAConfig.process_config_s���
�	�D��D�$�'�E��}��	�	�G��� ��s�+�u�q�y� �9�9��E���	�
�&�&�$�*E�*E��"�"�d�&=�&=��:�:�<�<������&�&��.�.�	
�
	
�����'�'��/�/�	
�
	
����D�*�*�D�,N�,N�	
�	
�����#�#��/�/�	
�
	
����D�O�O�T�%H�%H�	
�	
����T�%�%�t�'K�'K�	
��%�%��)D�)D�����*�*��+�+��!�!�(�(�
�
�
#�
#�t�'>�'>�����&�&��'�'��!�!�*�*�
�!#���"�"�$��%�%�d�o�o�t�7G�7G�H��O�O��0�0��1G�1G�H��$�$��0�0��1H�1H�I�%�,�,�V�4�&�	
�-�T�2�C�C��� 
�+� 
�
����/�/�����!1�!1�
��O�O��5�5��/�/���$�$��5�5��0�0��&�,�,�[�9��$�%��)��y�y�!6�7�H���:�:�A�A�%�B��
�	J�
�!�!�%5�%H�%H�%L�%L�L� ��&�2�2��(�H�H�I��+�+�1�1��(�(�d�6K�6K�L�
rUc�B�|j�0t|j�D]}tjd|��d|jvrUtjd�tjd�tjd�tjd�yy)Nz&Ignoring invalid uaclient.conf key: %sr6z)legacy "ua_config" found in uaclient.confzPlease do the following:z�  1. run `sudo pro config set field=value` for each field/value pair present under "ua_config" in /etc/ubuntu-advantage/uaclient.confzQ  2. Delete "ua_config" and all sub-fields in /etc/ubuntu-advantage/uaclient.conf)rC�sortedrHrIr:)rM�invalid_keys  rO�warn_about_invalid_keysz UAConfig.warn_about_invalid_keys�s������(�%�d�&7�&7�8�
�����<�k��
��$�(�(�"�
�K�K�C�D��K�K�2�3��K�K�7�
�

�K�K�7�
�#rU)NNN)*�__name__�
__module__�__qualname__�ua_scoped_proxy_options�global_scoped_proxy_options�&deprecated_global_scoped_proxy_optionsrr�strrrrJrP�propertyr/r4r7r!�setterr"r&r%r-rr'r(r�r)r*�boolr~r�r+r,r�r.r0r3r2r1r�r��rUrOr9r9Ks���I��#��.�*�)-�AE� $�	!�
�d�3��8�n�
%�!��.�=�=�>�!���
�	!�

�!�F�?�c�?��?��?�c�?��?��A�s�A��A��+�H�S�M�+��+����=��=��=��,�X�c�]�,��,����=��=��=��3�H�S�M�3��3����=��=��=��2�8�C�=�2��2����=�s�=��=���s����#�)�)�=�3�=�*�=���t��
�x��}�
���
��!�!�=�3�=�"�=���t��
���
�
���
��"�"�=�C�=�#�=��������"�"�=�C�=�#�=����������=�C�=��=���d����� � �=�$�=�!�=���3�����%�%�=�s�=�&�=���$�����_�_�=�d�=��=���c�������=�#�=��=���"2�"E�"E�������=�&6�&I�&I�=��=��:��:��!��!��E�#�E��E�����t�lrUr9r=c�T�tjjd�}|r|StS)z4Get config path to be used when loading config dict.�UA_CONFIG_FILE)�os�environrRr)�config_files rOrDrD�s$���*�*�.�.�!1�2�K�����rUc�`�tjt�}|s
t�}tj	d|�t
jj|�r-|jttj|���i}t
jj�D]�\}}|j�}|jd�s�(|dd}|jd�r|dd}|j!d�rTt
jj|�rttj|��}nt#j$|���d	|vr||i|d	<��||d	|<��|t&vs��|||<��|j|�d
|vr%t
jj)|d
�|d
<dD]4}t+j,||�r�t#j.|||���t1|j3��j5t6�}|D]}|j9|��||fS)
a�Parse known Pro config file

    Attempt to find configuration in cwd and fallback to DEFAULT_CONFIG_FILE.
    Any missing configuration keys will be set to CONFIG_DEFAULTS.

    Values are overridden by any environment variable with prefix 'UA_'.

    @param config_path: Fullpath to pro configfile. If unspecified, use
        DEFAULT_CONFIG_FILE.

    @return: Dict of configuration values.
    z%Using client configuration file at %s�ua_�N�	features_�	�yaml)�filepathr1r0)r/r4r�)�copyrrDrHr�r��path�exists�updaterr�	load_filer��items�lower�
startswith�endswithr
�InvalidFeatureYamlConfigValuer�
expanduserr�is_service_url�InvalidURLConfigValue�set�keys�
difference�VALID_UA_CONFIG_KEYS�pop)	�config_pathr:�env_keysr�rZ�
field_name�feature_field_namerCr�s	         rOrErE�s����)�)�O�
$�C��%�'���I�I�5�{�C�	�w�w�~�~�k�"��
�
�9�V�-�-�k�:�;�<��H��j�j�&�&�(�-�
��U��i�i�k���>�>�%� ��Q�R��J��$�$�[�1�%/���^�"��>�>�&�)��w�w�~�~�e�,� )�&�*:�*:�5�*A� B��(�F�F�%*����S�(�'9�5�&A�C�
�O�:?�C�
�O�$6�7��5�5�',���$�5-�6�J�J�x���S���'�'�,�,�S��_�=��J��/�L���"�"�3�s�8�,��2�2�s�#�c�(�K�K�L��s�x�x�z�?�-�-�.B�C�L�#������������rU�override_keyc����fd�}|S)a�Decorator used to override function return by config settings.

    To identify if we should override the function return, we check
    if the config object has the expected override key, we use it
    has, we will use the key value as the function return. Otherwise
    we will call the function normally.

    @param override_key: key to be looked for in the settings_override
     entry in the config dict. If that key is present, we will return
     its value as the function return.
    c�2���t����fd��}|S)Nc���t�\}}|jdi�j�t�}|tk7r�dk(r|dfS|S��S)Nr5�
cloud_type)rErR�UNSET_SETTINGS_OVERRIDE_KEY)r:�_�value_override�fr�s   ��rO�new_fz>apply_config_settings_override.<locals>.wrapper.<locals>.new_fAs[���!�^�F�C�� �W�W�%9�2�>�B�B��9��N��!<�<��<�/�*�D�1�1�%�%��3�JrU)r)rrr�s` �rO�wrapperz/apply_config_settings_override.<locals>.wrapper@s ���	�q��	�
�	��rUr�)r�rs` rO�apply_config_settings_overrider3s����"�NrUrY)1r�r�r��	functoolsrr�typingrrrr�rr	r
rrr
rr�uaclient.defaultsrrrrrrrrr�uaclient.filesrr�
uaclient.yamlr�	getLogger�replace_top_level_logger_namer�rH�MERGE_ID_KEY_MAPr��UA_CONFIGURABLE_KEYSr��get_event_loggerrmr9r�rDrErr�rUrO�<module>rs�����	�&�&�&�	�	�	�
�
�
�9�#��g���:��:�:�8�D�E��!�"���'����$��	&��%�%�'��]�]�@
���<�~��rU