U
    lHJe                     @   s   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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dS )    )AnyDictOptionalTupleType)aptevent_loggermessagessystemutil)repo)IncompatibleServiceUAEntitlement)MessagingOperationsMessagingOperationsDictStaticAffordancec                   @   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edddZeeee f dd	d
Zeeedf dddZeeedf dddZee dddZ!ddddZ"dS )RealtimeKernelEntitlementzrealtime-kernelzubuntu-pro-realtime-kernel.gpgTFZ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)Zinstalled_pkgsZinstalled_pkgs_regex)r
   Zshould_rebootsetpackageseventZneeds_reboot)selfZ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iS N)GenericRealtimevariant_nameNvidiaTegraRealtimeIntelIotgRealtimer   r   r   r   _get_variants$   s       z'RealtimeKernelEntitlement._get_variants.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)
Zuaclient.entitlements.fipsr#   r$   Zuaclient.entitlements.livepatchr%   r   r	   ZREALTIME_FIPS_INCOMPATIBLEZ"REALTIME_FIPS_UPDATES_INCOMPATIBLEZREALTIME_LIVEPATCH_INCOMPATIBLE)r   r#   r$   r%   r   r   r   incompatible_services+   s      z/RealtimeKernelEntitlement.incompatible_servicesc                 C   s   t jdd dffS )Nc                   S   s   t  S r   )r
   Zis_containerr   r   r   r   <lambda>E       z>RealtimeKernelEntitlement.static_affordances.<locals>.<lambda>F)r	   Z#REALTIME_ERROR_INSTALL_ON_CONTAINERr!   r   r   r   static_affordances@   s
    z,RealtimeKernelEntitlement.static_affordancesc                 C   sL   d }| j s"tjtj| jddfg}d }| jsBtjtj| jdfg}||dS )NT)msg
assume_yesdefault)r*   r+   )
pre_enablepre_disable)Zaccess_onlyr   Zprompt_for_confirmationr	   ZREALTIME_PROMPTr+   purgeZREALTIME_PRE_DISABLE_PROMPT)r   r-   r.   r   r   r   	messagingJ   s(    z#RealtimeKernelEntitlement.messagingNc                 C   s<   t | jt t }|r8tt|tjj	| j
d d S )N)title)r   r   intersectionr   Zget_installed_packages_namesremove_packageslistr	   ZDISABLE_FAILED_TMPLformatr1   )r   r   r   r   r   r3   l   s    

z)RealtimeKernelEntitlement.remove_packages)#__name__
__module____qualname__namer	   ZREALTIME_TITLEr1   ZREALTIME_DESCRIPTIONdescriptionZREALTIME_HELP_TEXTZ	help_textZurlsZREALTIME_HOME_PAGEZhelp_doc_urlZrepo_key_fileZapt_noninteractiveZsupports_access_onlyZsupports_purgeoriginboolr   r   strr   r   r"   propertyr   r   r&   r   r)   r   r0   r3   r   r   r   r   r      s(   		!r   c                       s.   e Zd Zeeedf d fddZ  ZS )RealtimeVariant.r   c                    s(   t  fdd j D }t j| S )Nc                    s*   g | ]"\}}t |tjj j|jd qS ))serviceZvariant)r   r	   ZREALTIME_VARIANT_INCOMPATIBLEr5   r1   ).0r9   clsr!   r   r   
<listcomp>{   s    z9RealtimeVariant.incompatible_services.<locals>.<listcomp>)tupleZother_variantsitemssuperr&   )r   Zincompatible_variants	__class__r!   r   r&   x   s    
z%RealtimeVariant.incompatible_services)r6   r7   r8   r>   r   r   r&   __classcell__r   r   rG   r   r?   w   s   r?   c                   @   s$   e Zd ZdZejZejZdZ	dZ
dS )r   ZgenericTN)r6   r7   r8   r   r	   ZREALTIME_GENERIC_TITLEr1   ZREALTIME_GENERIC_DESCRIPTIONr:   
is_variantcheck_packages_are_installedr   r   r   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)r6   r7   r8   r   r	   ZREALTIME_NVIDIA_TITLEr1   ZREALTIME_NVIDIA_DESCRIPTIONr:   rJ   rK   r   r   r   r   r      s
   r   c                   @   sJ   e Zd ZdZejZejZdZ	dZ
eeef eeeej f dddZdS )r    z
intel-iotgT)platform_checksr   c                 C   sD   t  j}|dg }||kr"dS dtjj| j|d|dfS d S )Ncpu_vendor_ids)TNF,)r1   ZvendorZsupported_vendors)	r
   Zget_cpu_info	vendor_idgetr	   ZINAPPLICABLE_VENDOR_NAMEr5   r1   join)r   rL   rO   rM   r   r   r   verify_platform_checks   s    
z(IntelIotgRealtime.verify_platform_checksN)r6   r7   r8   r   r	   ZREALTIME_INTEL_TITLEr1   ZREALTIME_INTEL_DESCRIPTIONr:   rJ   rK   r   r=   r   r   r<   r   ZNamedMessagerR   r   r   r   r   r       s   
r    N)typingr   r   r   r   r   Zuaclientr   r   r	   r
   r   Zuaclient.entitlementsr   Zuaclient.entitlements.baser   r   Zuaclient.typesr   r   r   Zget_event_loggerr   ZRepoEntitlementr   r?   r   r   r    r   r   r   r   <module>   s   h