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__/status.cpython-38.pyc

U

8�-d�f�@s�ddlZddlZddlZddlZddlZddlmZddlmZmZddl	m
Z
mZmZm
Z
mZddlmZmZmZmZmZmZddlmZmZddlmZmZddlmZmZdd	lm Z dd
l!m"Z"m#Z#m$Z$m%Z%ddl&m'Z'ddl(m)Z)dd
l*m+Z+e�,�Z-e�.e/�Z0dZ1dZ2dZ3e%j4j5e+j6e%j4j5e+j7e%j8j5e+j9e%j8j5e+j7e%j:j5e+j;e%j:j5e+j7e%j<j5e+j;e%j<j5e+j7e%j=j5e+j>e%j=j5e+j7e"j?j5e+j6e"j?j5e+j7e"j@j5e+j;e"j@j5e+j7e1e+j6e1e+j7e2e+j6e2e+j7e3e+j6e3e+j7i
ZAdZBdZCdZDdZEdde�F�dddddge$j8j5ejGigdddge%j:j5d�dddgd�dd�ZHdd�ZIeeJe
fd�dd �ZKeeeJe
fd!�d"d#�ZLeeeJe
fd!�d$d%�ZMeeJe
fd�d&d'�ZNeeJe
fd�d(d)�ZOdDeePeeJe
fd*�d+d,�ZQeeeJe
feJeeJe
fd-�d.d/�ZRdEeJePeeeJe
feSfd0�d1d2�ZTeJeJd3�d4d5�ZUeeeJeJd6�d7d8�ZVdFeeeJeJfe
eJeeJd9�d:d;�ZWe
eeJd<�d=d>�ZXeeJe
feJd?�d@dA�ZYdBdC�ZZdS)G�N)�OrderedDict)�datetime�timezone)�Any�Dict�List�Optional�Tuple)�event_logger�
exceptions�	livepatch�messages�util�version)�UA_CONFIGURABLE_KEYS�UAConfig)�get_available_resources�get_contract_information)�ATTACH_FAIL_DATE_FORMAT�PRINT_WRAP_WIDTH)�entitlement_factory)�ContractStatus�UserFacingAvailability�UserFacingConfigStatus�UserFacingStatus)�notices)�Notice)�TxtColorZ	essentialZstandardZadvancedz({name: <17}{available: <11}{description}zJ{name: <17}{available: <11}{entitled: <11}{auto_enabled: <14}{description}z0SERVICE          ENTITLED  STATUS    DESCRIPTIONz4{name: <17}{entitled: <19}{status: <19}{description}zUContent provided in json response is currently considered Experimental and may changez0.1F���id�name�
created_at�products�tech_support_level�r!r r"Zexternal_account_ids)Z_docZ_schema_versionr�
machine_id�attached�	effective�expires�origin�services�execution_status�execution_details�featuresr�contract�account�	simulatedcCsdd�|��D�S)NcSs$g|]}|jj|jj|jjd��qS))r!Zreason_code�reason)�entitlementr!Z	named_msg�msg��.0�service�r8�1/usr/lib/python3/dist-packages/uaclient/status.py�
<listcomp>vs
��z,_get_blocked_by_services.<locals>.<listcomp>)Zblocking_incompatible_services)�entr8r8r9�_get_blocked_by_servicesus�r<)�returnc

Cs�d}d}|��}|��}|j|kr&dnd}|tjkr<tj}nZ|j|krXtj}||j}n>|��\}}|tj	kr~|j|j
d�}n
|r�|j
}|tjkr�d}t|�}	|j|j
|j|j||||	|d�	S)Nr�no�yes)�code�message)	r!�description�entitled�status�status_details�description_override�	available�
blocked_by�warning)�status_description_override�contract_statusr!r�
UNENTITLEDr�UNAVAILABLE�INAPPLICABLEZuser_facing_status�WARNINGr4r<Zpresentation_namerB�value)
r;�inapplicable_resourcesrIrErFrKrGZ
ent_statusZdetailsrHr8r8r9�_attached_service_status�s<


�
�rR)�cfgr=cCs�t�tj�t�tj�t�t�}|jd}|d}t	j
j}|�|dd|�
d�t��pZg|d|d|�
dd	�|�
d
g�|d�|jjd|jjd|jj�
dd	�|jj�
dg�d
�d��|�
d�r�|jj|d<|�
d�r�|d|d<|j�
d�}|�st|�}dd�t|dd�d�D�}|D]Z}zt||�
dd	�d�}Wntjk
�rZY�q YnX||�}	|d�t|	|���q |djdd�d�|jj�
di��
d�}
|
�r�|
�
di��
d�}|�r�||d d!<|S)"z8Return configuration of attached status as a dictionary.�machineTokenInfo�contractInfoZ	machineIdTr*r r!�	createdAtrr#r�externalAccountIDsr%)r&r'r*rr/r0�effectiveTor)�
effectiveFromr(ZavailableResourcescSs&i|]}|�d�s|d|�d��qS)rGr!rB��get�r6�resourcer8r8r9�
<dictcomp>�s
�z$_attached_status.<locals>.<dictcomp>cSs|�dd�S�Nr!rrZ��xr8r8r9�<lambda>��z"_attached_status.<locals>.<lambda>��key�rSr!r+cSs|�dd�Sr_rZr`r8r8r9rb�rc�supportr3�affordances�supportLevelr/r$)r�removerZAUTO_ATTACH_RETRY_FULL_NOTICEZAUTO_ATTACH_RETRY_TOTAL_FAILURE�copy�deepcopy�DEFAULT_STATUSZ
machine_tokenrrNrP�updater[�listZmachine_token_filer0Zcontract_expiry_datetimer�sortedrr�EntitlementNotFoundError�appendrR�sort�entitlements)rS�responserTrUr$�	resourcesrQr]�ent_clsr;rgrir8r8r9�_attached_status�sz




�

�����

�
�
��rxcCs�t�t�}t|�}|D]�}|�d�r.tjj}ntjj}zt	||�dd�d�}Wn6t
jk
r�t�
tjj|�dd�d��YqYnX|jdkr�t��dkr�||�}|��}nd	}|d
�|�d|d�|j||d��q|d
jd
d�d�|S)z#Return unattached status as a dict.rGr!rrfzwithout a 'name' key)r7rFNr+�presentedAs)r!rBrFrGcSs|�dd�Sr_rZr`r8r8r9rbrcz$_unattached_status.<locals>.<lambda>rd)rkrlrmrr[r�	AVAILABLErPrMrrrq�LOG�debugr
Z!AVAILABILITY_FROM_UNKNOWN_SERVICE�formatr!r�on_supported_kernelrJrrrBrs)rSrurvr]rGrwZlp�descr_overrider8r8r9�_unattached_status�sD



�

��
�
�
��r�c
	Cs�tj|jdd�}||O}|r |St�|�}g}|�di�D]j}|d}zt||d�}Wn$tjk
rz|�	|�Yq:YnXt
jj}	|j
r�|�dd�|	kr:|�	|�q:|r�||d<|S)z1Remove beta services from response dict if neededzfeatures.allow_beta)�configZ
path_to_valuer+r!rfrDr)rZis_config_value_truerSrkrlr[rrrqrrr�ACTIVErP�is_beta)
rS�show_allruZconfig_allow_betaZnew_responseZreleased_resourcesr]�
resource_namerwZenabled_statusr8r8r9�_handle_beta_resources!s,�


r�cCs�t}|jj}tj}|��\}}t��p(g}|dkrN|jj}tj	j
||d�j}n,tj
�|�d��rz|jj}d}tjj
|d�}||||j|j|jd�}i}	tD]}
t||
�r�t||
�|	|
<q�|	|dd<|S)	aGReturn a dict with execution_status, execution_details and notices.

    Values for execution_status will be one of UserFacingConfigStatus
    enum:
        inactive, active, reboot-required
    execution_details will provide more details about that state.
    notices is a list of tuples with label and description items.
    r)�pid�lock_holderzmarker-reboot-cmdszconfiguration changes)�	operation)r,r-rZconfig_pathr�r.r��	ua_config)r�INACTIVErPr
�NO_ACTIVE_OPERATIONSZcheck_lock_inforror�Z	LOCK_HELDr}r4�os�path�existsZ	data_pathZREBOOTREQUIREDZENABLE_REBOOT_REQUIRED_TMPLZcfg_pathrSr.r�hasattr�getattr)rSZ
userStatusZ
status_valZstatus_descZlock_pidr�Znotices_listr��retr�rer8r8r9�_get_config_statusEs<	�
��	
r�)rSr�r=cCsl|jrt|�}nt|�}|�t|��t��r:|�d|�t|||�}|shdd�|�	dg�D�}||d<|S)aReturn status as a dict, using a cache for non-root users

    When unattached, get available resources from the contract service
    to report detailed availability of different resources for this
    machine.

    Write the status-cache when called by root.
    �status-cachecSs g|]}|�dd�dkr|�qS�rGr?rZr5r8r8r9r:�s�zstatus.<locals>.<listcomp>r+)
�is_attachedrxr�rnr�rZwe_are_currently_rootZwrite_cacher�r[)rSr�ru�available_servicesr8r8r9rDps	

�rD)rt�entitlement_namer=cCs`|D]N}|�d�|kr|�d�r$dnd|�di��d�r<dnd|�di�d�Sqddid�S)	z0Extract information from the entitlements array.�typerCr?r>ZobligationsZenableByDefaultrh)rC�auto_enabledrhrZ)rtr�r3r8r8r9�_get_entitlement_information�s�
�r�)�tokenr�r=c
Csjd}t�t�}zt||�}WnRtjk
rn}z2t|d�rZ|jdkrZtjt	j
jt	j
jd��|�W5d}~XYnX|�
di�}|�
di�}|�|�
dd	�|�
d
d	�|�
dd	�|�
dg�d
�|�
d
d	�|�
d�|�
dd	�|�
dg�d�dd��t�tj�}	|�
d��rx|�
d�|d<|d}
|
|	}|��dk�rxt	jj|dd|
�t�d�}tj|j|jd�t�d|jd�d}|�
d��r�|�
d�|d<|d}
|	|
}|��dk�r�t	jj|dd|
�t�d�}tj|j|jd�t�d|jd�d}|�d�}|�r|�
d�}nt|�}|�
dg�}dd �t|d!d"�d#�D�}|D]�}|�
d
d	�}zt||d$�}Wntj k
�r�Y�qFYnX||d%�}t!||�}|d�"|�
d&|j�|j#|d'|d(|j|k�r�d)nd*d+���qF|dj$d,d"�d#�t!|d-�}|d'�r$|d.�
d/�}|�r$||dd0<|�t%|��t&|||�}|�sbd1d �|�
dg�D�}||d<||fS)2z�Get a status dictionary based on a token.

    Returns a tuple with the status dictionary and an integer value - 0 for
    success, 1 for failure
    rr@i�)r4Zmsg_codeNrUZaccountInfor rr!rVr#)r r!r"r#rWr%T)r/r0r1rXr)r/)Zcontract_id�date)Z	error_msgZ
error_codezThis token is not valid.
�
�rYr(r�r+ZresourceEntitlementscSsg|]}|ds|d�qS)rGr!r8r\r8r8r9r:�s�z#simulate_status.<locals>.<listcomp>cSs|dS)Nr!r8r`r8r8r9rb�rcz!simulate_status.<locals>.<lambda>rdrf)rSryrCr�r?r>)r!rBrCr�rGcSs|�dd�Sr_rZr`r8r8r9rb	rcrgrhrir$cSs g|]}|�dd�dkr|�qSr�rZr5r8r8r9r:s�)'rkrlrmrrZContractAPIErrorr�r@�UserFacingErrorr
ZATTACH_INVALID_TOKENr4r!r[rnr�nowrZutcZ
total_secondsZATTACH_FORBIDDEN_EXPIREDr}�strftimer�event�error�infoZATTACH_FORBIDDEN_NOT_YETZ
read_cacherrprrqr�rrrBrsr�r�)rSr�r�r�ruZcontract_information�eZ
contract_infoZaccount_infor�Zexpiration_datetimeZdeltarAZeffective_datetimeZstatus_cachervrtrQr]r�rwr;Zentitlement_informationrgrir�r8r8r9�simulate_status�s�
�



�

����
�
�
�
����


�r�)�stringr=cCstj��rt�||�S|S)z=Return colorized string if using a tty, else original string.)�sys�stdout�isatty�STATUS_COLORr[)r�r8r8r9�colorizesr�)�commandsr=cCstd}|D]}|r|d7}|d�|�7}qd�tj|tddd��}d|krTd	}d
}nd}d}d
jtj|||tjd�S)Nrz && � z \
�z  )�widthZsubsequent_indentr�z{
  z
}z{ z }z%{color}{prefix}{content}{suffix}{end})Zcolor�prefix�content�suffix�end)�join�textwrapZwraprr}r�DISABLEGREY�ENDC)r�r��cmdZwrapped_contentr�r�r8r8r9�colorize_commands$s0���r�)�column_data�headerr=cshg}|r|�|�tdd�|D��}|dkrPd�|��|��fdd�|D��n|�dd�|D��|S)z�Return a list of content lines to print to console for a section

    Content lines will be center-aligned based on max value length of first
    column.
    cSsg|]}t|d��qS)r)�len�r6Zpairr8r8r9r:Ksz.get_section_column_content.<locals>.<listcomp>rz{{:>{}}}: {{}}csg|]}�j|��qSr8)r}r���templater8r9r:NscSsg|]}|d�qS)r�r8r�r8r8r9r:Qs)rr�maxr}�extend)r�r�r�Ztemplate_lengthr8r�r9�get_section_column_content@s

r�)r)r=cCs8|dkrdSz|��}Wntk
r,YnX|�d�S)NzUnknown/Expiredz%c %Z)Z
astimezone�	Exceptionr�)r)r8r8r9�format_expiresUsr�)rDr=cCsN|�d��sL|�d�rVtjdddddd�g}|d	D]}|�tjf|��q4d
�|�Stjdddd�g}|d	D]<}|�d�}|r�|n|d
}|�tj|d|d|d��qp|�d�}|r�|�d�|�|�|�d��r|�d�t|d���D]\}}|�d�||��q�|�dt	j
jg�t�
�dk�rB|�dt	jg�d
�|�Sg}tg}|d	D]�}	|	d}
|	�d�}|�r~|n|	d
}|	dt|
�t|	d�|d�}|	�dd�}|dk	�r�|�dd�}
|
dk	�r�|�|
�|�tjf|���q^|dd}|�d��st|�dk�r\|�d�|�d�|�d�}|�rD|�|�t|�dk�r\|�|�|�d��r�|�d�t|d���D]\}}|�d�||���q�|�d �g}|d!d}|�r�|�d"|f�|dd}|�r�|�d#|f�|d$d%k�r$|�d&t|d'�f�|�d(t|�f�|�rD|�d�|�t|d)��d
�|�S)*z&Format status dict for tabular output.r'r1ZSERVICErz�ENTITLEDZAUTO_ENABLEDZDESCRIPTION)r!rGrCr�rBr+r�)r!rGrBrFrBr!rGrZNOTICESr.z	
FEATURESz{}: {}rFrCrD)r!rCrDrBrINrAr/r$rz+
Enable services with: pro enable <service>r0ZAccountZSubscriptionr*ZfreezValid untilr)zTechnical support level)r�)r[�STATUS_SIMULATED_TMPLr}rrr��STATUS_UNATTACHED_TMPLr�rp�itemsr
Z
UNATTACHEDr4rr~Z)LIVEPATCH_KERNEL_NOT_SUPPORTED_UNATTACHED�
STATUS_HEADERr��STATUS_TMPLr�r�r�)rDr�r7rrBrrerPZservice_warnings�service_statusrCZfmt_argsrIZwarning_messager$ZpairsZaccount_nameZ
contract_namer8r8r9�format_tabular_s�
��	
��
���



�

�
�










r�c	Cs
t|�}d}t�}||d<|D]^}|d|ks<|�d�|krzt||dd�}Wntjk
rjYqYnX|}||�}q~q|dkr�t�d�|���|jr�t	|i�}|d}	|d|d<|	|d<|	dkr�|j
r�d	|d
<n"|dr�tjj
}
ntjj
}
|
|d<|j|d<|S)
z�Return help information from an uaclient service as a dict

    :param name: Name of the service for which to return help data.

    :raises: UserFacingError when no help is available.
    Nr!ryrfzNo help available for '{}'rDrC�enabledTZbetarG�help)rrr[rrrqr�r}r�rRr�rrzrPrMZ	help_info)rSr!rvZ
help_resourceZ
response_dictr]Zhelp_ent_clsZhelp_entr�Z
status_msgrGr8r8r9r��sB�

�



r�)F)F)N)[rkZloggingr�r�r��collectionsrrr�typingrrrrr	Zuaclientr
rrr
rrZuaclient.configrrZuaclient.contractrrZuaclient.defaultsrrZuaclient.entitlementsrZ(uaclient.entitlements.entitlement_statusrrrrZuaclient.filesrZuaclient.files.noticesrZuaclient.messagesrZget_event_loggerr�Z	getLogger�__name__r{Z	ESSENTIALZSTANDARDZADVANCEDr�rPZOKGREENr�r�ZFAILrNr�rMrOZ
WARNINGYELLOWr�rLr�r�r�r�r�Zget_versionr�rmr<�strrRrxr�r�r��boolrDr��intr�r�r�r�r�r�r�r8r8r8r9�<module>s� 
����� ��� )H0$+!
�����
p