+
    miy8                        ^ RI t ^ RIHtHtHtHt ^ RIHtHtH	t	H
t
HtHtHtHtHt ^ RIHtHt ^ RIHt ^ RIHt RR.tR	R
RR/t]P2                  ! 4       t] P6                  ! ]P8                  ! ]4      4      t ! R R]4      tR t R# )    N)AnyDictOptionalTuple)	apievent_logger
exceptionshttp	livepatchmessagessnapsystemutil)EntitlementWithMessageUAEntitlement)ApplicationStatus)StaticAffordanceg      ?g      ?zUnknown Auth-Tokenz)Invalid Auth-Token provided to livepatch.zunsupported kernelz2Your running kernel is not supported by Livepatch.c                     a a ] tR t^t o]P
                  P                  tRt]P                  t
]P                  t]P                  tRtRtRtRt]V3R lR l4       t]V3R lR l4       tV3R lR	 ltV3R
 lR ltV3R lR ltRV3R lR lltV3R lR ltV3R lR ltV3R lR ltR tRV3R lV 3R llltRtVt V ;t!# )LivepatchEntitlementr   FTc                4   < V ^8  d   QhRS[ S[R3,          /#    return.)r   r   )format__classdict__s   "A/usr/lib/python3/dist-packages/uaclient/entitlements/livepatch.py__annotate__!LivepatchEntitlement.__annotate__-   s     
 
u-CS-H'I 
    c                    ^ RI Hp ^ RIHp \	        V\
        P                  4      \	        V\
        P                  4      3# )r   FIPSEntitlement)RealtimeKernelEntitlement)uaclient.entitlements.fipsr"   uaclient.entitlements.realtimer#   r   r   LIVEPATCH_INVALIDATES_FIPSREALTIME_LIVEPATCH_INCOMPATIBLE)selfr"   r#   s   &  r   incompatible_services*LivepatchEntitlement.incompatible_services,   s=    >L #!D!D #)88	
 	
r   c                4   < V ^8  d   QhRS[ S[R3,          /# r   )r   r   )r   r   s   "r   r   r   <   s     
 
E*:C*?$@ 
r   c                "  a ^ RI Hp V! V P                  R7      p\        VP	                  4       ^ ,          \
        P                  8H  4      o\        P                  P                  V P                  R7      R R3\        P                  V3R lR33# )r   r!   )cfg)titlec                  l    \         P                  ! 4       ;'       g    \         P                  ! 4       R 8H  # )wsl)r   is_containerget_virt_type r   r   <lambda>9LivepatchEntitlement.static_affordances.<locals>.<lambda>K   s-    ++- 3 3'')U23r   Fc                     < S # Nr3   )is_fips_enableds   r   r4   r5   Q   s    r   )r$   r"   r-   boolapplication_statusr   ENABLEDr   "SERVICE_ERROR_INSTALL_ON_CONTAINERr   r.   !LIVEPATCH_ERROR_WHEN_FIPS_ENABLED)r(   r"   fips_entr8   s   &  @r   static_affordances'LivepatchEntitlement.static_affordances;   s     	?"txx0'')!,0A0I0II
 ;;BB** C 3 ::'
 	
r   c                    < V ^8  d   QhRS[ /# r   r   int)r   r   s   "r   r   r   V   s      c r   c                    ^# )r   r3   r(   s   &r   enable_steps!LivepatchEntitlement.enable_stepsV       r   c                    < V ^8  d   QhRS[ /# rB   rC   )r   r   s   "r   r   r   Y   s      s r   c                    ^# )   r3   rF   s   &r   disable_steps"LivepatchEntitlement.disable_stepsY   rI   r   c                :   < V ^8  d   QhRS[ P                  RS[/# )r   progressr   r   ProgressWrapperr9   )r   r   s   "r   r   r   \   s%     D
 D
(;(; D
 D
r   c                   VP                  \        P                  4       \        P                  ! 4       '       gF   VP                  R\        P                  P                  RR7      4       \        P                  ! 4        \        P                  ! 4       '       gH   VP                  R\        P                  P                  RR7      4        \        P                  ! R4       \        P                   ! V4        \        P"                  ! R4       \(        P*                  ! RV P,                  P.                  \(        P0                  4      p\(        P*                  ! RV P,                  P2                  \(        P4                  4      p\        P6                  ! VV\        P8                  R7       \:        P<                  ! 4       '       gH   VP                  R\        P                  P                  RR7      4        \        P                  ! R4       \:        PB                  ! W44       V PE                  VRRR7      #   \        P                   dS   p\        P                  RTR7       TP                  R\        P                  P                  RR7      4        R	p?ELR	p?ii ; i  \        P                   dV   p\        P                  R
TR7       \$        P'                  \        P                  P                  RR7      4        R	p?ELR	p?ii ; i  \        P                   d&   p\        P>                  ! \A        T4      R7      hR	p?ii ; i)zIEnable specific entitlement.

@return: True on success, False otherwise.
infosnapd)packagesz
snapd snapz!Failed to install snapd as a snapexc_infozsnap install snapdcommandNzFailed to refresh snapd snapzsnap refresh snapdr
   https)
http_proxyhttps_proxyretry_sleepszcanonical-livepatch snapzcanonical-livepatch	error_msgT)process_directivesprocess_token)#rP   r   INSTALLING_LIVEPATCHr   is_snapd_installedemitINSTALLING_PACKAGESr   install_snapdis_snapd_installed_as_a_snapinstall_snapr	   ProcessExecutionErrorLOGwarningEXECUTING_COMMAND_FAILEDrun_snapd_wait_cmdrefresh_snapeventrT   r
   validate_proxyr-   r\   PROXY_VALIDATION_SNAP_HTTP_URLr]   PROXY_VALIDATION_SNAP_HTTPS_URLconfigure_snap_proxySNAP_INSTALL_RETRIESr   is_livepatch_installedErrorInstallingLivepatchstrconfigure_livepatch_proxysetup_livepatch_config)r(   rP   er\   r]   s   &&   r   _perform_enable$LivepatchEntitlement._perform_enable\   s   
 	(778&&((MM44;;W;M  0022MM,,33\3J	!!'* 	)	g& ((DHH'')L)L

 ))TXX))4+O+O
 	!!!#22	

 //11MM,,337 4 L!!"78 	++JD**T + 
 	
] 33 ?!L55<< 4 =   // 	KK6KCJJ11880 9  	8 33 L 99CFKKLsJ   H6 9J  6L 6JAJJ L
5A
LL
M" MMc                F   < V ^8  d   QhRS[ P                  RS[RS[RS[/# )r   rP   ra   rb   r   rQ   )r   r   s   "r   r   r      s9     ? ?%%? !? 	?
 
?r   c           	        VP                  \        P                  4       V P                  P	                  4       P                  V P                  4      pV'       d    \        V4       V'       Ed   VP                  R4      pV'       g>   \        P!                  RV P"                  4       V P                  P$                  R,          pV P'                  4       w  rxV\(        P*                  8w  d]   \        P-                  R	4       VP                  R\        P.                  4        \0        P2                  ! \4        P6                  R
.4        \0        P2                  ! \4        P6                  RV.RR7       R# R#   \        P                   de   p\        P                  \        T4      TR7       TP                  R\        P                  P                  \        T4      R7      4        Rp?R# Rp?ii ; i  \        P                   d,   p\        P                  \        T4      TR7        Rp?R# Rp?ii ; i  \        P                   d   p\        P8                  p	\:        P=                  4        F  w  rT
\        T4      9   g   K  Y,          p	 M	  T	\        P8                  8X  d   T	\        T4      ,          p	TP                  RT	4        Rp?R# Rp?ii ; i)zProcesss configuration setup for livepatch directives.

:param process_directives: Boolean set True when directives should be
    processsed.
:param process_token: Boolean set True when token should be
    processsed.
rW   rT   r_   NFresourceTokenzHNo specific resourceToken present. Using machine token as %s credentialsmachineTokenz&Disabling livepatch before re-enablingdisableenableTcapture)rP   r   SETTING_UP_LIVEPATCHmachine_token_fileentitlementsgetnameprocess_config_directivesr	   rj   rk   errorrx   re   LIVEPATCH_UNABLE_TO_CONFIGUREr   debugr.   machine_tokenr:   r   DISABLEDrT   LIVEPATCH_DISABLE_REATTACHr   subpr   LIVEPATCH_CMDLIVEPATCH_UNABLE_TO_ENABLEERROR_MSG_MAPitems)r(   rP   ra   rb   entitlement_cfgr{   livepatch_tokenr:   _detailsmsgerror_messageprint_messages   &&&&        r   rz   +LivepatchEntitlement.setup_livepatch_config   s/    	(77811>>@DDTYYO
)/: =-11/BO"		&JJ
 #'"9"9"G"G"# ,0+B+B+D(!%6%?%??ABfh&I&IJ!KK!8!8) DE,,hH  Y 33 		#a&1	-::AA"%a& B  4 "77 !IIc!fqI1 ! 33 	994A4G4G4I0M$A., 5J (===3q6MCfc*	sP   E7 #&G3 
)H6 7G0AG++G03H3 H..H36K6KAKKc                4   < V ^8  d   QhRS[ P                  /# )r   rP   )r   rR   )r   r   s   "r   r   r      s      )<)< r   c                   \         P                  ! 4       '       g   R# \         P                  R.pVP                  \        P
                  P                  RP                  V4      R7      4       \        P                  ! VRR7       R# )zIDisable specific entitlement

@return: True on success, False otherwise.
Tr    rY   r   )
r   rv   r   rP   r   EXECUTING_COMMANDr   joinr   r   )r(   rP   cmds   && r   _perform_disable%LivepatchEntitlement._perform_disable   sf    
 //11&&	2&&--chhsm-D	
 	C&r   c                Z   < V ^8  d   QhRS[ S[S[S[P                  ,          3,          /# rB   )r   r   r   r   NamedMessage)r   r   s   "r   r   r      s+      	 (8+@+@"AA	Br   c                   \         P                  R 3p\        P                  ! 4       '       g!   \         P                  \
        P                  3#  \        P                  ! 4       pTf!   \         P                  \
        P                  3# T#   \        P                   dE   p\         P                  \
        P                  P                  TP                  R7      3u R p?# R p?ii ; i)N)livepatch_error)r   r;   r   rv   r   r   LIVEPATCH_NOT_ENABLEDstatusr	   rj   WARNING LIVEPATCH_CLIENT_FAILURE_WARNINGr   stderr+LIVEPATCH_APPLICATION_STATUS_CLIENT_FAILURE)r(   r   livepatch_statusr{   s   &   r   r:   'LivepatchEntitlement.application_status   s     $++T2//11%..0N0NOO	(//1 # "**DD   // 	!))99@@$%HH A  	s   B
 
C#9CC#C#c                Z   < V ^8  d   QhRS[ S[S[S[P                  ,          3,          /# rB   )r   r9   r   r   r   )r   r   s   "r   r   r     s*      	tXh3344	5r   c                >   \         P                  ! 4       pV\         P                  P                  8X  dM   \        P
                  ! 4       pR \        P                  P                  VP                  VP                  R7      3# V\         P                  P                  8X  dM   \        P
                  ! 4       pR \        P                  P                  VP                  VP                  R7      3# V\         P                  P                  8X  d   R \        P                  3# R# )T)versionarch)FN)r   on_supported_kernelLivepatchSupportUNSUPPORTEDr   get_kernel_infor   LIVEPATCH_KERNEL_NOT_SUPPORTEDr   uname_releaseuname_machine_arch
KERNEL_EOLLIVEPATCH_KERNEL_EOLKERNEL_UPGRADE_REQUIRED!LIVEPATCH_KERNEL_UPGRADE_REQUIRED)r(   supportkernel_infos   &  r   enabled_warning_status+LivepatchEntitlement.enabled_warning_status  s     //1i00<<< 002K77>>'55$77 ?   i00;;; 002K--44'55$77 5   i00HHH::  r   c                    \         P                  ! 4       \         P                  P                  8X  d,   \        P
                  ! 4       '       g   \        P                  # R # r7   )r   r   r   r   r   r1   r   *LIVEPATCH_KERNEL_NOT_SUPPORTED_DESCRIPTIONrF   s   &r   status_description_override0LivepatchEntitlement.status_description_override+  s@    ))+))556''))FFFr   c          
      d   < V ^8  d   QhRS[ S[S[3,          RS[ S[S[3,          RS[RS[RS[/# )r   orig_accessdeltasallow_enableverboser   )r   rx   r   r9   )r   r   s   "r   r   r   4  sM     < <#s(^< S#X< 	<
 < 
<r   c                "  < \         SV `  WW4R7      '       d   R# VP                  R/ 4      pVP                  R/ 4      P                  RR4      pV'       d)   V P                  \        P
                  ! 4       4      w  rxV# V P                  4       w  rV	\        P                  8X  d   R# VP                  R/ 4      p
\        RR	.4      p\        VP                  V
4      4      p\        VP                  R
R4      4      p\        W.4      '       d   \        P                  R4       V'       d>   \        P                  \         P"                  P%                  V P&                  R7      4       V P)                  \        P
                  ! 4       VVR7      # R# )a  Process any contract access deltas for this entitlement.

:param orig_access: Dictionary containing the original
    resourceEntitlement access details.
:param deltas: Dictionary which contains only the changed access keys
and values.
:param allow_enable: Boolean set True if allowed to perform the enable
    operation. When False, a message will be logged to inform the user
    about the recommended enabled service.
:param verbose: If True, display output to stdout

:return: True when delta operations are processed; False when noop.
)r   TentitlementobligationsenableByDefaultF
directivescaCertsremoteServerr   zANew livepatch directives or token. running setup_livepatch_config)service)rP   ra   rb   )superprocess_contract_deltasr   r   r   rR   r:   r   r   setr9   intersectionanyrk   rT   rp   r   #SERVICE_UPDATING_CHANGED_DIRECTIVESr   r   rz   )r(   r   r   r   r   delta_entitlementprocess_enable_defaultenable_success_r:   delta_directivessupported_deltasra   rb   	__class__s   &&&&&         r   r   ,LivepatchEntitlement.process_contract_deltas4  sz   ( 7* + 
 
 "JJ}b9!2!6!6}b!I!M!Mu"
 " $C,?,?,A BN!! $ 7 7 9!2!;!;;,00rB	>:;!))*:;
 VZZ?@"233HH)
 

@@GG $		 H 
 ..,,.#5+ /  
 r   r3   )TT)FT)"__name__
__module____qualname____firstlineno__r   urlsLIVEPATCH_HOME_PAGEhelp_doc_urlr   LIVEPATCH_TITLEr.   LIVEPATCH_DESCRIPTIONdescriptionLIVEPATCH_HELP_TEXT	help_text#affordance_check_kernel_min_versionaffordance_check_kernel_flavoraffordance_check_seriesaffordance_check_archpropertyr)   r?   rG   rM   r|   rz   r   r:   r   r   r   __static_attributes____classdictcell____classcell__)r   r   s   @@r   r   r      s     ==44LD$$E00K,,I*/'%*"" !
 
 
 
4  D
 D
L? ?B  4 @< < <r   r   c                   V '       g   R# V P                  R/ 4      P                  R/ 4      pVP                  R4      pV'       d9   \        P                  ! \        P                  RRP                  V4      .RR7       VP                  R	R
4      pVP                  R4      '       d   VRR pV'       d;   \        P                  ! \        P                  RRP                  V4      .RR7       R# R# )a  Process livepatch configuration directives.

We process caCerts before remoteServer because changing remote-server
in the canonical-livepatch CLI performs a PUT against the new server name.
If new caCerts were required for the new remoteServer, this
canonical-livepatch client PUT could fail on unmatched old caCerts.

@raises: ProcessExecutionError if unable to configure livepatch.
Nr   r   r   configzca-certs={}Tr   r    /zremote-server={})r   r   r   r   r   r   endswith)r-   r   ca_certsremote_servers   &   r   r   r   s  s     +//bAJ~~i(H''$$X.
 	
 NN>26Mc""%cr*''"))-8
 	
 r   )!loggingtypingr   r   r   r   uaclientr   r   r	   r
   r   r   r   r   r   uaclient.entitlements.baser   r   (uaclient.entitlements.entitlement_statusr   uaclient.typesr   LIVEPATCH_RETRIESr   get_event_loggerrp   	getLoggerreplace_top_level_logger_namer   rk   r   r   r3   r   r   <module>r
     s     - -
 
 
 M F +#J  EN
 	%%'::8DER= Rj
"
r   