HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/uaclient/__pycache__/config.cpython-38.pyc
U

��Jh�K�@sddlZddlZddlZddlmZmZddlmZmZm	Z	ddl
mZmZm
Z
mZmZmZmZmZddlmZmZmZmZmZmZmZmZmZddlmZmZddl m!Z!e�"e�#e$��Z%dd	d
�Z&dZ'dZ(d
Z)e�*�Z+Gdd�d�Z,e-d�dd�Z.ddd�Z/e-d�dd�Z0dS)�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)ZavailableResourcesZresourceEntitlementsZ_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@seZdZdZdZdZdGeeee	fee
jeedd�dd�Ze
ed�d	d
��Ze
ed�dd��Ze
ed�d
d��Ze
eed�dd��Zejed�dd��Ze
eed�dd��Zejed�dd��Ze
eed�dd��Zejed�dd��Ze
eed�dd��Zejed�dd��Ze
ed�dd��Zejed�dd��Ze
edd�eed�d d!���Zejed�d"d!��Ze
edd�eed�d#d$���Zejed�d%d$��Ze
ed�d&d'��Zejed�d(d'��Ze
ed�d)d*��Zejed�d+d*��Ze
ed�d,d-��Zejed�d.d-��Ze
ed�d/d0��Zejed�d1d0��Ze
ed�d2d3��Z e jed�d4d3��Z e
ed�d5d6��Z!e!jed�d7d6��Z!e
e
j"d�d8d9��Z#e#je
j"d�d:d9��Z#e
d;d<��Z$e
d=d>��Z%e
ed�d?d@��Z&e
dAdB��Z'dCdD�Z(dEdF�Z)dS)H�UAConfig)r!r")r#r$)rr N)�cfg�user_config�series�returnc
Cs�|rd|_||_d|_nt�|_t|j�\|_|_|r>||_nVztj��|_WnDtk
r�}z&t	j
d|d�t	�
d�t��|_W5d}~XYnXd|jkr�tjj|j�
�|jd�dd�|_||_dS)�NzError loading user config)�exc_infozUsing default config valuesr2T)Z optional_type_errors_become_null)Zcfg_pathr5�invalid_keys�get_config_path�parse_configr6r�read�	Exception�LOG�warning�UserConfigDataZ	from_dictZto_dictr7)�selfr5r6r7�e�rE�1/usr/lib/python3/dist-packages/uaclient/config.py�__init__Vs(

�zUAConfig.__init__�r8cCs|j�dt�S)Nr+)r5�getr�rCrErErFr+yszUAConfig.contract_urlcCs|j�dt�S)Nr0)r5rIrrJrErErFr0}szUAConfig.security_urlcCs|j�dt�S)Nr3)r5rIrrJrErErFr3�szUAConfig.livepatch_urlcCs|jjS�N)r6rrJrErErFr�szUAConfig.http_proxy)�valuecCs||j_tj�|j�dSrK)r6rr�write�rCrLrErErFr�scCs|jjSrK)r6rrJrErErFr�szUAConfig.https_proxycCs||j_tj�|j�dSrK)r6rrrMrNrErErFr�scCs|jjSrK)r6r"rJrErErFr"�szUAConfig.ua_apt_https_proxycCs||j_tj�|j�dSrK)r6r"rrMrNrErErFr"�scCs|jjSrK)r6r!rJrErErFr!�szUAConfig.ua_apt_http_proxycCs||j_tj�|j�dSrK)r6r!rrMrNrErErFr!�scCs|jj}|dkrtS|SrK)r6r)r�rC�valrErErFr)�sz&UAConfig.vulnerability_data_url_prefixcCs||j_tj�|j�dSrK)r6r)rrMrNrErErFr)�s)�maxsizecCs:|jj}|r|S|jj}|r6t�tjjddd��|SdS)Nrr#��old�new)r6r#r�event�infor�WARNING_DEPRECATED_FIELD�format�rCZ
global_valZold_apt_valrErErFr#�s��zUAConfig.global_apt_http_proxycCs.||j_d|j_tjj��tj�|j�dSrK)r6r#rr4�fget�cache_clearrrMrNrErErFr#�scCs:|jj}|r|S|jj}|r6t�tjjddd��|SdS)Nr r$rR)r6r$r rUrVrrWrXrYrErErFr$�s��zUAConfig.global_apt_https_proxycCs.||j_d|j_tjj��tj�|j�dSrK)r6r$r r4rZr[rrMrNrErErFr$�scCs|jj}|dkrdS|S)Ni`T)r6r%rOrErErFr%�szUAConfig.update_messaging_timercCs||j_tj�|j�dSrK)r6r%rrMrNrErErFr%�scCs|jj}|dkrdS|S)Ni@8)r6r&rOrErErFr&�szUAConfig.metering_timercCs||j_tj�|j�dSrK)r6r&rrMrNrErErFr&�scCs|jj}|dkrdS|S)NF)r6�poll_for_pro_licenserOrErErFr\�szUAConfig.poll_for_pro_licensecCs||j_tj�|j�dSrK)r6r\rrMrNrErErFr\scCs|jj}|dkrdS|S)NiX)r6�polling_error_retry_delayrOrErErFr]sz"UAConfig.polling_error_retry_delaycCs||j_tj�|j�dSrK)r6r]rrMrNrErErFr]scCs|jj}|dkrdS|S)NT)r6r'rOrErErFr'szUAConfig.apt_newscCs||j_tj�|j�dSrK)r6r'rrMrNrErErFr'!scCs|jj}|dkrtS|SrK)r6r(rrOrErErFr(&szUAConfig.apt_news_urlcCs||j_tj�|j�dSrK)r6r(rrMrNrErErFr(-scCs|jj}|dkrtjjS|SrK)r6r*r�LXDGuestAttachEnum�OFFrOrErErFr*2szUAConfig.lxd_guest_attachcCs*|dkrtjj}||j_tj�|j�dSrK)rr^r_r6r*rMrNrErErFr*9scCs|j�dt�S)Nr,)r5rIrrJrErErFr,@szUAConfig.data_dircCs>|j�dd�}ztt|���WStk
r8tjYSXdS)Nr/�DEBUG)r5rI�getattr�logging�upper�AttributeErrorr`)rCr/rErErFr/Ds
zUAConfig.log_levelcCs|j�dtd�S)Nr.)r5rIrrJrErErFr.LszUAConfig.log_filecCs.|j�d�}|r*t|t�r|St�d|�iS)z>Return a dictionary of any features provided in uaclient.conf.r-zDUnexpected uaclient.conf features value. Expected dict, but found %s)r5rI�
isinstance�dictr@rA)rCr-rErErFr-Ps
�zUAConfig.featuresc
CsldD]D}t||�}|dkr(t�d|�qt|t�r:|dkrtj||d��q|jsV|jrj|j	sb|j
rjt���t�
d|jtj�t�
d|jtj�t�
d|j	tj�t�
d|j
tj�t�
d|jtj�t�
d|jtj�|js�|jr�t�|j|jtjj�n&|j	�s
|j
�r t�|j	|j
tjj�g}t���rtt�|j|j�|j�sTt�tj��sj|j�stt�tj��rt|�d�ddl m!}dd	l"m#}||�j$}t%d
d�|D��}|�r�|�&|j|j�|j�s�|�|j��s�|j�s�|�|j��r�|�d�t'|�dk�rd
�(|�}t)t*j+j,|d��ddl-m.}	|j/t0j1j2k�rR|	|�j3�sRt)t*j4�nt5j6�7t5j8|j/d��dS)N)r%r&z1No config set for %s, default value will be used.r��keyrLr
Zhttpsr)�	livepatch)�_enabled_servicescss|]}|jdkr|VqdS)riN)r)�.0ZentrErErF�	<genexpr>�s
z*UAConfig.process_config.<locals>.<genexpr>riz, )�services)�_is_attached)Zguest_attach)9rar@�debugre�intr	ZInvalidPosIntConfigValuer#r$r!r"ZInvalidProxyCombinationConfigr
Zvalidate_proxyZPROXY_VALIDATION_APT_HTTP_URLZPROXY_VALIDATION_APT_HTTPS_URLrZPROXY_VALIDATION_SNAP_HTTP_URLrZPROXY_VALIDATION_SNAP_HTTPS_URLrZsetup_apt_proxyZ
AptProxyScopeZGLOBALZUACLIENTrZis_snapd_installedZconfigure_snap_proxyZget_config_option_valueZHTTP_PROXY_OPTIONZHTTPS_PROXY_OPTION�append�uaclientriZ-uaclient.api.u.pro.status.enabled_services.v1rj�enabled_services�anyZconfigure_livepatch_proxy�len�join�printrZ!PROXY_DETECTED_BUT_NOT_CONFIGUREDrXZ(uaclient.api.u.pro.status.is_attached.v1rnr*rr^r_Zis_attachedZ-WARNING_LXD_GUEST_ATTACH_SET_BUT_NOT_ATTACHEDrZlxd_pro_config_filerMZLXDProConfig)
rCZproprLZservices_with_proxiesrirjrsZlivepatch_enabledrmrnrErErF�process_config_s�
������������
�
��
�

��������

�����zUAConfig.process_configcCs\|jdk	r&t|j�D]}t�d|�qd|jkrXt�d�t�d�t�d�t�d�dS)Nz&Ignoring invalid uaclient.conf key: %sr2z)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)r;�sortedr@rAr5)rC�invalid_keyrErErF�warn_about_invalid_keys�s
�


��z UAConfig.warn_about_invalid_keys)NNN)*�__name__�
__module__�__qualname__Zua_scoped_proxy_optionsZglobal_scoped_proxy_optionsZ&deprecated_global_scoped_proxy_optionsrr�strrrrBrG�propertyr+r0r3r�setterrr"r!r)rr#r$rpr%r&�boolr\r]r'r(r^r*r,r/r.r-rxr{rErErErFr4Ks���#	


vr4rHcCstj�d�}|r|StS)z4Get config path to be used when loading config dict.ZUA_CONFIG_FILE)�os�environrIr)Zconfig_filerErErFr<�sr<c	Csxt�t�}|st�}t�d|�tj�|�r@|�t	t
�|���i}tj�
�D]�\}}|��}|�d�rN|dd�}|�d�r�|dd�}|�d�r�tj�|�r�t	t
�|��}ntj|d��d	|kr�||i|d	<q�||d	|<qN|tkrN|||<qN|�|�d
|k�rtj�|d
�|d
<dD](}t�||��stj|||d���qt|����t�}|D]}|�|��q^||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 %sZua_�NZ	features_�	Zyaml)�filepathr-r,)r+r0rg)�copyrr<r@ror��path�exists�updaterr
Z	load_filer��items�lower�
startswith�endswithr	ZInvalidFeatureYamlConfigValuer�
expanduserr
Zis_service_urlZInvalidURLConfigValue�set�keys�
difference�VALID_UA_CONFIG_KEYS�pop)	Zconfig_pathr5Zenv_keysrhrLZ
field_nameZfeature_field_namer;rzrErErFr=�sD



�


r=��override_keycs�fdd�}|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.
    cst����fdd��}|S)Ncs@t�\}}|�di���t�}|tkr:�dkr6|dfS|S��S)Nr1Z
cloud_type)r=rI�UNSET_SETTINGS_OVERRIDE_KEY)r5�_Zvalue_override)�fr�rErF�new_fAs
�z>apply_config_settings_override.<locals>.wrapper.<locals>.new_f)r)r�r�r�)r�rF�wrapper@s
z/apply_config_settings_override.<locals>.wrapperrE)r�r�rEr�rF�apply_config_settings_override3s
r�)N)1r�rbr��	functoolsrr�typingrrrrrrrr	r
rrr
rZuaclient.defaultsrrrrrrrrrZuaclient.filesrrZ
uaclient.yamlrZ	getLoggerZreplace_top_level_logger_namer|r@ZMERGE_ID_KEY_MAPr�ZUA_CONFIGURABLE_KEYSr�Zget_event_loggerrUr4rr<r=r�rErErErF�<module>s.(
,�#	
?