o
    Jhn                     @   s   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	 Ze eeZddiZG d	d
 d
ejZG dd deZG dd deZ G dd deZ!G dd deZ"G dd deZ#dS )    N)AnyDictOptionalTupleType)aptevent_loggermessagessystemutil)repo)EntitlementWithMessageUAEntitlement)MessagingOperationsMessagingOperationsDictStaticAffordanceGenuineIntelintelc                   @   s   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dZdeeee f fd	d
Zedd Zedeedf fddZedeedf fddZ ede!fddZ"dddZ#dS )RealtimeKernelEntitlementzrealtime-kernelzubuntu-pro-realtime-kernel.gpgTFUbuntuRealtimeKernelreturnc                 C   s(   t jt| jtdgd}t| |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_required r    @/usr/lib/python3/dist-packages/uaclient/entitlements/realtime.py_check_for_reboot   s   
z+RealtimeKernelEntitlement._check_for_rebootc                 C   s   t jt tjttjttjtiS N)GenericRealtimevariant_nameNvidiaTegraRealtimeRaspberryPiRealtimeIntelIotgRealtimer   r    r    r!   _get_variants(   s
   z'RealtimeKernelEntitlement._get_variantsc                 C   s   | j rd S tS r#   )access_onlyr$   r)   r    r    r!   default_variant0   s   z)RealtimeKernelEntitlement.default_variant.c                 C   s>   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.fipsr-   r.   uaclient.entitlements.livepatchr/   r   r	   REALTIME_FIPS_INCOMPATIBLE"REALTIME_FIPS_UPDATES_INCOMPATIBLEREALTIME_LIVEPATCH_INCOMPATIBLE)r   r-   r.   r/   r    r    r!   incompatible_services6   s   z/RealtimeKernelEntitlement.incompatible_servicesc                 C   s   t jdd dffS )Nc                   S   s   t  S r#   )r
   is_containerr    r    r    r!   <lambda>P   s    z>RealtimeKernelEntitlement.static_affordances.<locals>.<lambda>F)r	   #REALTIME_ERROR_INSTALL_ON_CONTAINERr)   r    r    r!   static_affordancesK   s
   z,RealtimeKernelEntitlement.static_affordancesc                 C   sD   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defaultr:   )
pre_enablepre_disable)r+   r   prompt_for_confirmationr	   REALTIME_PROMPTpurgeREALTIME_PRE_DISABLE_PROMPT)r   r<   r=   r    r    r!   	messagingU   s$   

z#RealtimeKernelEntitlement.messagingNc                 C   s@   t | jt t }|rtt|tjj	| j
d d S d S )N)title)r   r   intersectionr   get_installed_packages_namesremove_packageslistr	   DISABLE_FAILED_TMPLformatrC   )r   r   r    r    r!   rF   u   s   

z)RealtimeKernelEntitlement.remove_packages)r   N)$__name__
__module____qualname__namer	   REALTIME_TITLErC   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*   propertyr,   r   r   r5   r   r9   r   rB   rF   r    r    r    r!   r      s0    	
	r   c                       s.   e Zd Zedeedf f fddZ  ZS )RealtimeVariantr   .c                    s(   t  fdd j D }t j| S )Nc                    s*   g | ]\}}t |tjj j|jd qS ))servicevariant)r   r	   REALTIME_VARIANT_INCOMPATIBLErI   rC   ).0rM   clsr)   r    r!   
<listcomp>   s    z9RealtimeVariant.incompatible_services.<locals>.<listcomp>)tupleother_variantsitemssuperr5   )r   incompatible_variants	__class__r)   r!   r5      s   
z%RealtimeVariant.incompatible_services)rJ   rK   rL   r]   r   r   r5   __classcell__r    r    rj   r!   r^      s    $r^   c                       s>   e Zd ZdZejZejZdZ	dZ
edef fddZ  ZS )r$   genericTr   c                    sd   t  j}t j}|dkr0|dpg }tjj| j	| j
d|pdd}|tjd|if ||d< |S )Nrm   r<   unknown)r`   r_   base_flavorcurrent_flavorr:   )rh   rB   r
   get_kernel_infoflavorgetr	   #KERNEL_FLAVOR_CHANGE_WARNING_PROMPTrI   r%   rM   appendr   r>   )r   rB   rp   r<   r:   rj   r    r!   rB      s"   
zGenericRealtime.messaging)rJ   rK   rL   r%   r	   REALTIME_GENERIC_TITLErC   REALTIME_GENERIC_DESCRIPTIONrP   
is_variantcheck_packages_are_installedr]   r   rB   rl   r    r    rj   r!   r$      s    r$   c                   @   s$   e Zd ZdZejZejZdZ	dZ
dS )r&   znvidia-tegraTN)rJ   rK   rL   r%   r	   REALTIME_NVIDIA_TITLErC   REALTIME_NVIDIA_DESCRIPTIONrP   rx   ry   r    r    r    r!   r&      s    r&   c                   @   s2   e Zd ZdZejZejZdZ	dZ
defddZdS )r'   raspiTr   c              
   C   s\   d}zt |  }d|v pd|v W S  ty- } ztd| W Y d }~dS d }~w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er    r    r!   variant_auto_select   s   z'RaspberryPiRealtime.variant_auto_selectN)rJ   rK   rL   r%   r	   REALTIME_RASPI_TITLErC   REALTIME_RASPI_DESCRIPTIONrP   rx   ry   r[   r   r    r    r    r!   r'      s    r'   c                   @   sL   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dZdS )r(   z
intel-iotgTplatform_checksr   c                 C   sP   t  jpd}t||}|dg }||v rdS dtjj| j|d	|dfS )N cpu_vendor_ids)TNF,)rC   vendorsupported_vendors)
r
   get_cpu_infocpuinfo_vendor_idCPU_VENDOR_MAPrs   r	   INAPPLICABLE_VENDOR_NAMErI   rC   join)r   r   	vendor_idr   r    r    r!   verify_platform_checks   s   z(IntelIotgRealtime.verify_platform_checksN)rJ   rK   rL   r%   r	   REALTIME_INTEL_TITLErC   REALTIME_INTEL_DESCRIPTIONrP   rx   ry   r   r\   r   r   r[   r   NamedMessager   r    r    r    r!   r(      s    
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_namerJ   r   r   RepoEntitlementr   r^   r$   r&   r'   r(   r    r    r    r!   <module>   s    m