
    gn                     z   d dl Z d dlmZmZmZmZmZ d dlmZm	Z	m
Z
mZmZ d dlmZ d dlmZmZ d dlmZmZmZ  e	j,                         Z e j0                   ej2                  e            ZddiZ G d	 d
ej:                        Z G d de      Z G d de      Z  G d de      Z! G d de      Z" G d de      Z#y)    N)AnyDictOptionalTupleType)aptevent_loggermessagessystemutil)repo)EntitlementWithMessageUAEntitlement)MessagingOperationsMessagingOperationsDictStaticAffordanceGenuineIntelintelc                   .   e Zd ZdZej
                  Zej                  Zej                  Z
ej                  j                  ZdZdZdZdZdZdefdZdeeee   f   fdZed	        Zedeed
f   fd       Zedeed
f   fd       Z ede!fd       Z"ddZ#y)RealtimeKernelEntitlementzrealtime-kernelzubuntu-pro-realtime-kernel.gpgTFUbuntuRealtimeKernelreturnc                     t        j                  t        | j                        t        dg            }t        j                  |       |S )z%Check if system needs to be rebooted.zlinux-.*-realtime)installed_pkgsinstalled_pkgs_regex)r   should_rebootsetpackageseventneeds_reboot)selfreboot_requireds     @/usr/lib/python3/dist-packages/uaclient/entitlements/realtime.py_check_for_rebootz+RealtimeKernelEntitlement._check_for_reboot   s@     ..t}}-!$&9%:!;
 	?+    c                     t         j                  t         t        j                  t        t        j                  t        t        j                  t        iS N)GenericRealtimevariant_nameNvidiaTegraRealtimeRaspberryPiRealtimeIntelIotgRealtimer!   s    r#   _get_variantsz'RealtimeKernelEntitlement._get_variants(   s;    ((/,,.A,,.A**,=	
 	
r%   c                 (    | j                   ry t        S r'   )access_onlyr(   r-   s    r#   default_variantz)RealtimeKernelEntitlement.default_variant0   s    r%   .c                     ddl m}m} ddlm} t        |t        j                        t        |t        j                        t        |t        j                        fS )Nr   )FIPSEntitlementFIPSUpdatesEntitlement)LivepatchEntitlement)
uaclient.entitlements.fipsr3   r4   uaclient.entitlements.livepatchr5   r   r
   REALTIME_FIPS_INCOMPATIBLE"REALTIME_FIPS_UPDATES_INCOMPATIBLEREALTIME_LIVEPATCH_INCOMPATIBLE)r!   r3   r4   r5   s       r#   incompatible_servicesz/RealtimeKernelEntitlement.incompatible_services6   sW    	
 	I #!D!D #&;; #$h&N&N
 	
r%   c                 ,    t         j                  d dffS )Nc                  *    t        j                         S r'   )r   is_container r%   r#   <lambda>z>RealtimeKernelEntitlement.static_affordances.<locals>.<lambda>P   s    ++- r%   F)r
   #REALTIME_ERROR_INSTALL_ON_CONTAINERr-   s    r#   static_affordancesz,RealtimeKernelEntitlement.static_affordancesK   s"     <<-
 	
r%   c                     d }| j                   s$t        j                  t        j                  ddfg}d }| j
                  s#t        j                  dt        j                  ifg}||dS )NT)msgdefaultrD   )
pre_enablepre_disable)r0   r   prompt_for_confirmationr
   REALTIME_PROMPTpurgeREALTIME_PRE_DISABLE_PROMPT)r!   rF   rG   s      r#   	messagingz#RealtimeKernelEntitlement.messagingU   s     
 00'77#'J zz 00xCCK %&
 	
r%   Nc                    t        | j                        j                  t        t        j                                     }|rHt        j
                  t        |      t        j                  j                  | j                               y y )N)title)r   r   intersectionr   get_installed_packages_namesremove_packageslistr
   DISABLE_FAILED_TMPLformatrN   )r!   r   s     r#   rQ   z)RealtimeKernelEntitlement.remove_packagesu   sf    t}}%220023
 X,,33$**3E r%   )r   N)$__name__
__module____qualname__namer
   REALTIME_TITLErN   REALTIME_DESCRIPTIONdescriptionREALTIME_HELP_TEXT	help_texturlsREALTIME_HOME_PAGEhelp_doc_urlrepo_key_fileapt_noninteractivesupports_access_onlysupports_purgeoriginboolr$   r   strr   r   r.   propertyr1   r   r   r;   r   rB   r   rL   rQ   r?   r%   r#   r   r      s    D##E//K++I==33L4MN#F4 
tCm)<$<= 
  
 
u-CS-H'I 
 
( 
E*:C*?$@ 
 
 
	 
 
>r%   r   c                   8     e Zd Zedeedf   f fd       Z xZS )RealtimeVariantr   .c                    t        | j                  j                         D cg c]D  \  }}t        |t        j
                  j                  | j                  |j                              F c}}      }t        | $  |z   S c c}}w )N)servicevariant)
tupleother_variantsitemsr   r
   REALTIME_VARIANT_INCOMPATIBLErT   rN   superr;   )r!   rX   clsincompatible_variants	__class__s       r#   r;   z%RealtimeVariant.incompatible_services   s     % "&!4!4!:!:!< D# '::AA $

CII B 
!
 w,/DDDs   A	B
)rU   rV   rW   rh   r   r   r;   __classcell__ru   s   @r#   rj   rj      s*    Eu-CS-H'I E Er%   rj   c                   j     e Zd ZdZej
                  Zej                  ZdZ	dZ
edef fd       Z xZS )r(   genericTr   c                 R   t         |   }t        j                         j                  }|dk7  rx|j                  d      xs g }t        j                  j                  | j                  | j                  d|xs d      }|j                  t        j                  d|if       ||d<   |S )Nry   rF   unknown)rm   rl   base_flavorcurrent_flavorrD   )rr   rL   r   get_kernel_infoflavorgetr
   #KERNEL_FLAVOR_CHANGE_WARNING_PROMPTrT   r)   rX   appendr   rH   )r!   rL   r}   rF   rD   ru   s        r#   rL   zGenericRealtime.messaging   s     G%	//188Y&"|4:J>>EE))		%-:	 F C 00CL '1Il#r%   )rU   rV   rW   r)   r
   REALTIME_GENERIC_TITLErN   REALTIME_GENERIC_DESCRIPTIONr[   
is_variantcheck_packages_are_installedrh   r   rL   rv   rw   s   @r#   r(   r(      sC    L++E77KJ#' 	  r%   r(   c                   H    e Zd ZdZej
                  Zej                  ZdZ	dZ
y)r*   znvidia-tegraTN)rU   rV   rW   r)   r
   REALTIME_NVIDIA_TITLErN   REALTIME_NVIDIA_DESCRIPTIONr[   r   r   r?   r%   r#   r*   r*      s(    !L**E66KJ#' r%   r*   c                   T    e Zd ZdZej
                  Zej                  ZdZ	dZ
defdZy)r+   raspiTr   c                     d}	 t        j                  |      j                         j                         }d|v xs d|v S # t        $ r }t
        j                  d|       Y d }~yd }~ww xY w)Nz/proc/device-tree/modelzraspberry pi 4zraspberry pi 5z)Error while detecting if raspberry pi: %rF)r   	load_filestriplower	ExceptionLOGinfo)r!   proc_file_pathmodeles       r#   variant_auto_selectz'RaspberryPiRealtime.variant_auto_select   sf    2	$$^4::<BBDE#u,I0@E0II 	HH@!D	s   :? 	A(A##A(N)rU   rV   rW   r)   r
   REALTIME_RASPI_TITLErN   REALTIME_RASPI_DESCRIPTIONr[   r   r   rf   r   r?   r%   r#   r+   r+      s4    L))E55KJ#' T r%   r+   c                       e Zd ZdZej
                  Zej                  ZdZ	dZ
deeef   deeeej"                     f   fdZy)r,   z
intel-iotgTplatform_checksr   c                    t        j                         j                  xs d}t        j	                  ||      }|j	                  dg       }||v rydt
        j                  j                  | j                  |dj                  |            fS )N cpu_vendor_ids)TNF,)rN   vendorsupported_vendors)
r   get_cpu_infocpuinfo_vendor_idCPU_VENDOR_MAPr   r
   INAPPLICABLE_VENDOR_NAMErT   rN   join)r!   r   	vendor_idr   s       r#   verify_platform_checksz(IntelIotgRealtime.verify_platform_checks   s     '');;Ar	"&&y)<	(,,-=rB&(;;BBjj "%((>": C   r%   N)rU   rV   rW   r)   r
   REALTIME_INTEL_TITLErN   REALTIME_INTEL_DESCRIPTIONr[   r   r   r   rg   r   r   rf   r   NamedMessager   r?   r%   r#   r,   r,      sZ    L))E55KJ#' #CH~	tXh3344	5r%   r,   )$loggingtypingr   r   r   r   r   uaclientr   r	   r
   r   r   uaclient.entitlementsr   uaclient.entitlements.baser   r   uaclient.typesr   r   r   get_event_loggerr   	getLoggerreplace_top_level_logger_namerU   r   r   RepoEntitlementr   rj   r(   r*   r+   r,   r?   r%   r#   <module>r      s     3 3 > > & L  	&%%'g:::8DE '*j 4 4 jZE/ E"o >(/ (/ " r%   