Your IP : 216.73.216.52


Current Path : /usr/lib/python3/dist-packages/uaclient/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/uaclient/__pycache__/livepatch.cpython-38.pyc

U

8�-d,�@s�ddlZddlZddlZddlZddlmZddlmZmZm	Z	ddl
mZmZm
Z
mZmZmZddlmZmZmZmZmZmZddlmZdZdZd	Zd
Ze��ZGdd�de�Z Gd
d�de�Z!Gdd�de�Z"Gdd�de�Z#ee"d�dd�Z$Gdd�dej%�Z&ee'd�dd�Z(e)e)e)e)e	e'ee'fd�dd�Z*e)e)e)e)ee'd�dd�Z+edd�ee'd�d d!��Z,d-e)eee-dd"�d#d$�Z.d.ee)ee)eee-dd%�d&d'�Z/e)ee)d(�d)d*�Z0e'd�d+d,�Z1dS)/�N)�	lru_cache)�List�Optional�Tuple)�event_logger�
exceptions�messages�
serviceclient�system�util)�
BoolDataValue�
DataObject�Field�IncorrectTypeError�StringDataValue�	data_list)�state_filesz
http-proxyzhttps-proxyz/snap/bin/canonical-livepatchz/v1/api/kernels/supportedc@sDeZdZededdd�ededdd�gZeeee	d�dd	�Z
d
S)�LivepatchPatchFixStatus�nameF�Name�ZrequiredZdict_key�patchedZPatched�rrcCs||_||_dS�Nr)�selfrr�r�4/usr/lib/python3/dist-packages/uaclient/livepatch.py�__init__*sz LivepatchPatchFixStatus.__init__N)�__name__�
__module__�__qualname__rrr�fieldsr�str�boolrrrrrr$s��rc@sLeZdZededdd�edee�ddd�gZee	ee
ed�dd	�Zd
S)�LivepatchPatchStatus�stateF�Stater�fixesZFixes�r%r'cCs||_||_dSrr()rr%r'rrrr>szLivepatchPatchStatus.__init__N)rrr rrrrr!rr"rrrrrrr$3s��
�r$c@sXeZdZededdd�ededdd�ededdd�gZeeeeeed	�d
d�Z	dS)
�LivepatchStatusStatus�kernelFZKernelr�	livepatchZ	Livepatch�	supported�	Supported�r*r+r,cCs||_||_||_dSrr.)rr*r+r,rrrrXszLivepatchStatusStatus.__init__N)
rrr rrr$r!rr"rrrrrr)Gs$����r)c@s8eZdZedee�ddd�gZeeed�dd�Z	dS)	�LivepatchStatus�statusFZStatusr�r0cCs
||_dSrr1)rr0rrrrmszLivepatchStatus.__init__N)
rrr rrr)r!rrrrrrrr/cs��
�r/)�returncCs2t�st�d�dSzt�tdddg�\}}Wn6tjk
rdt�	��t�
d�W5QRXYdSXzt�|�}Wn<tj
k
r�t�	��t�
d�|��W5QRXYdSXzt�|�}Wn<tk
�r�t�	��t�
d�|��W5QRXYdSX|jdk�st|j�dk�r(t�d	�dS|jd
S)Nz$canonical-livepatch is not installedr0z--format�jsonz7canonical-livepatch returned error when checking statusz4canonical-livepatch status returned invalid json: {}z<canonical-livepatch status returned unexpected structure: {}�z!canonical-livepatch has no statusr)�is_livepatch_installed�logging�debugr
�subp�
LIVEPATCH_CMDrZProcessExecutionErrorr�disable_log_to_console�warningr3�loadsZJSONDecodeError�formatr/Z	from_dictrr0�len)�out�_Zstatus_jsonZstatus_rootrrrr0tsF

�
��
��
r0c@s0eZdZdZejZeeeeee	d�dd�Z
dS)�UALivepatchClientZ
livepatch_url��version�flavor�arch�codenamer2c
Cs�||||d�}|��}z|jt||d�\}}WnPtk
r~}	z2t���t�d�t�|	�W5QRXWY�dSd}	~	XYnXt|t	�s�t�d�dSt
|�dd��S)z�
        :returns: True if supported
                  False if unsupported
                  None if API returns error or ambiguous response
        )zkernel-versionZflavourZarchitecturerF)�query_params�headersz4error while checking livepatch supported kernels APINz2livepatch api returned something that isn't a dictr-F)rHZrequest_url�"LIVEPATCH_API_V1_KERNELS_SUPPORTED�	Exceptionrr:r6r;�
isinstance�dictr#�get)
rrCrDrErFrGrH�resultZ_headers�errr�is_kernel_supported�s2	��
�
�z%UALivepatchClient.is_kernel_supportedN)rrr Zcfg_url_base_attrrZUrlErrorZ
api_error_clsr"rr#rPrrrrrA�s�rAcCs2t�}|dkrdS|jdkr dS|jdkr.dSdS)Nr,TZunsupportedF)r0r,)Z	lp_statusrrr�_on_supported_kernel_cli�s

rQrBc	Cs�ztj��}Wntk
r&d}YnX|dk	r�tj�tjj�tjdd�}t	|j
|k|j|k|j|k|j
|k|j|kg�r�|jdkr�t���t�d�W5QRXd|jfSdS)zOCheck local cache of kernel support

    :return: (is_cache_valid, result)
    N�)Zdaysz-livepatch kernel support cache has None valueT)FN)r�livepatch_support_cache�readrJ�datetime�now�timezone�utcZ	timedelta�all�	cached_atrCrDrErFr,rr:r6r;)rCrDrErFZ
cache_dataZone_week_agorrr�_on_supported_kernel_cache�s2
�
���	

�
r[cCsht�j||||d�}tj�tj|||||tj�tjj	�d��|dkrdt
���t�
d�W5QRX|S)N)rCrDrErF)rCrDrErFr,rZz3livepatch kernel support API response was ambiguous)rArPrrS�writeZLivepatchSupportCacheDatarUrVrWrXrr:r6r;)rCrDrErFr,rrr�_on_supported_kernel_api�s,���
�r])�maxsizecCs�t�}|dk	rt�d�|St��}|jdksB|jdksB|jdkrPt�d�dSt	�
t���}t��d}dj
|j|jd�}t||j||�\}}|r�t�d�|St�d�t||j||�S)	z�
    Checks CLI, local cache, and API in that order for kernel support
    If all checks fail to return an authoritative answer, we return None
    Nzusing livepatch cli for supportzHunable to determine enough kernel information to check livepatch supportZseriesz{major}.{minor})�major�minorzusing livepatch support cachezusing livepatch support api)rQr6r7r
Zget_kernel_inforDr_r`r;rZstandardize_arch_nameZ
get_dpkg_archZget_platform_infor=r[r])Zcli_saysZkernel_inforErFZlp_api_kernel_verZis_cache_validZ
cache_saysrrr�on_supported_kernelsJ
������

�ra)�
protocol_type�retry_sleepsr2cCs(t�s
dStjtdd�|�g|d�dS)a�
    Unset livepatch configuration settings for http and https proxies.

    :param protocol_type: String either http or https
    :param retry_sleeps: Optional list of sleep lengths to apply between
        retries. Specifying a list of [0.5, 1] tells subp to retry twice
        on failure; sleeping half a second before the first retry and 1 second
        before the second retry.
    N�configz	{}-proxy=�rc)r5r
r8r9r=)rbrcrrr�unconfigure_livepatch_proxyDs�rf)�
http_proxy�https_proxyrcr2cCsjddlm}|s|r*t�tjj|jd��|rHtj	t
dd�|�g|d�|rftj	t
dd�|�g|d�dS)	a�
    Configure livepatch to use http and https proxies.

    :param http_proxy: http proxy to be used by livepatch. If None, it will
                       not be configured
    :param https_proxy: https proxy to be used by livepatch. If None, it will
                        not be configured
    :@param retry_sleeps: Optional list of sleep lengths to apply between
                               snap calls
    r)�LivepatchEntitlement)�servicerdz
http-proxy={}rezhttps-proxy={}N)Zuaclient.entitlementsri�event�inforZSETTING_SERVICE_PROXYr=�titler
r8r9)rgrhrcrirrr�configure_livepatch_proxyXs"����rn)�keyr2cCs\t�tdg�\}}t�d�|�|tj�}|r6|�d�nd}|rLt�dd|�}|rX|�	�SdS)z�
    Gets the config value from livepatch.
    :param key: can be any valid livepatch config option
    :return: the value of the livepatch config option, or None if not set
    rdz
^{}: (.*)$r4Nz\"(.*)\"z\g<1>)
r
r8r9�re�searchr=�	MULTILINE�group�sub�strip)ror?r@�match�valuerrr�get_config_option_value}srxcCst�t�dk	Sr)r
Zwhichr9rrrrr5�sr5)N)NNN)2rUr3r6rp�	functoolsr�typingrrrZuaclientrrrr	r
rZuaclient.data_typesrr
rrrrZuaclient.filesrZHTTP_PROXY_OPTIONZHTTPS_PROXY_OPTIONr9rIZget_event_loggerrkrr$r)r/r0ZUAServiceClientrAr#rQr"r[r]ra�floatrfrnrxr5rrrr�<module>sf  *+�#�0�
��
�%