o
    ÙKÕin  ã                   @   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