Ë
    GKÕi�j  ã                   ó@  — d dl Z d dlZd dlZd dlZd dlmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZmZmZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ  ej@                  «       Z! ejD                   ejF                  e$«      «      Z%dZ& G d	„ d
ejN                  «      Z(y)é    N)Úexists)ÚAnyÚDictÚListÚOptionalÚTupleÚUnion)
ÚapiÚaptÚcontractÚevent_loggerÚ
exceptionsÚhttpÚmessagesÚsecret_managerÚsystemÚutil)Úbase)ÚApplicationStatusÚCanDisableFailureÚCanDisableFailureReason)Ústatus_cache_filez<^linux-image-([\d]+[.-][\d]+[.-][\d]+-[\d]+-[A-Za-z0-9_-]+)$c                   ó$  ‡ — e Zd ZdZdZdZdZdZdZdZ	dZ
edeeedf   fd„«       Zedefd	„«       Zedefd
„«       Zedee   fd„«       Zedee   fd„«       Zedee   fd„«       Zedee   fd„«       Zdefd„Zdefd„Zeej8                  defd„«       «       Z	 d,dedeeee   f   fˆ fd„Z defd„Z!de"jF                  defd„Z$defd„Z%de"jF                  fd„Z&de"jF                  fd„Z'de"jF                  fd„Z(d„ Z)d„ Z*dee+ee,jZ                     f   fd„Z.d„ Z/	 	 d-de0ee1f   d e0ee1f   d!ed"edef
ˆ fd#„Z2	 	 d.de"jF                  d$eee      d%eddfd&„Z3de"jF                  ddfd'„Z4	 d/d(eee      fd)„Z5	 d0de"jF                  d*efd+„Z6ˆ xZ7S )1ÚRepoEntitlementz1/etc/apt/sources.list.d/ubuntu-{name}.{extension}z$/etc/apt/preferences.d/ubuntu-{name}z	{}/ubuntuNFTÚreturnc                  ó   — y ©N© ©Úselfs    ú</usr/lib/python3/dist-packages/uaclient/entitlements/repo.pyÚrepo_pin_priorityz!RepoEntitlement.repo_pin_priority;   s   € àó    c                 ó¸   — d}t        j                  «       j                  }|t        j                  v rd}| j
                  j                  | j                  |¬«      S )NÚsourcesÚlist)ÚnameÚ	extension)r   Úget_release_infoÚseriesr   ÚSERIES_NOT_USING_DEB822Úrepo_file_tmplÚformatr'   )r    r(   r*   s      r!   Ú	repo_filezRepoEntitlement.repo_file?   sN   € àˆ	Ü×(Ñ(Ó*×1Ñ1ˆØ”S×0Ñ0Ñ0ØˆIØ×"Ñ"×)Ñ)¨t¯y©yÀIÐ)ÓNÐNr#   c                 ó    — | j                   dz   S )Nz {})Úrepo_url_tmplr   s    r!   Úrepo_policy_check_tmplz&RepoEntitlement.repo_policy_check_tmplG   s   € à×!Ñ! EÑ)Ð)r#   c                 ó¸   — g }| j                   j                  di «      }|r9|j                  di «      }t        j                  |j                  dg «      «      }|}|S )zdebs to install on enablementÚentitlementÚ
directivesÚadditionalPackages)Úentitlement_cfgÚgetÚcopy)r    Úpackagesr3   r4   Úadditional_packagess        r!   r9   zRepoEntitlement.packagesK   s^   € ð ˆà×*Ñ*×.Ñ.¨}¸bÓAˆáØ$Ÿ™¨°rÓ:ˆJÜ"&§)¡)Ø—‘Ð3°RÓ8ó#Ðð +ˆHàˆr#   c                 óx   — | j                   j                  di «      j                  di «      j                  d«      S )Nr3   r4   ÚaptURL©r6   r7   r   s    r!   Úapt_urlzRepoEntitlement.apt_url\   ó4   € ð × Ñ ×$Ñ$ ]°BÓ7ß‰S�˜rÓ"ß‰S�‹]ð	
r#   c                 óz   — | j                   j                  di «      j                  di «      j                  dg «      S )Nr3   r4   ÚaptSnapshotURLsr=   r   s    r!   Úsnapshot_urlszRepoEntitlement.snapshot_urlsd   s8   € ð × Ñ ×$Ñ$ ]°BÓ7ß‰S�˜rÓ"ß‰SÐ" BÓ'ð	
r#   c                 óx   — | j                   j                  di «      j                  di «      j                  d«      S )Nr3   r4   Úsuitesr=   r   s    r!   Ú
apt_suiteszRepoEntitlement.apt_suitesl   r?   r#   c                 ó¶  — | j                   j                  d«      }|s»| j                  j                  d   }| j                   d   j                  di «      }|j                  d«      sNt	        j
                  | j                  «      }|j                  || j                  «      }|r|j                  d«      }|s"|}t        j                  d| j                  «       |S )NÚresourceTokenÚmachineTokenr3   ÚobligationsÚenableByDefaultzWNo resourceToken present in contract for service %s. Using machine token as credentials)r6   r7   Úmachine_token_fileÚmachine_tokenr   ÚUAContractClientÚcfgÚget_resource_machine_accessr'   ÚLOGÚwarningÚtitle)r    ÚtokenrL   rI   ÚclientÚmachine_accesss         r!   Úget_resource_tokenz"RepoEntitlement.get_resource_tokent   sÐ   € Ø×$Ñ$×(Ñ(¨Ó9ˆÙØ ×3Ñ3×AÑAØñˆMð ×.Ñ.¨}Ñ=×AÑAØ˜róˆKð —?‘?Ð#4Ô5ô "×2Ñ2°4·8±8Ó<�Ø!'×!CÑ!CØ! 4§9¡9ó"�ñ "Ø*×.Ñ.¨Ó?�EÙØ%�Ü—‘ð:à—J‘Jôð
 ˆr#   c                 ó‚   — t        j                  t        | j                  «      ¬«      }t        j                  |«       |S )z%Check if system needs to be rebooted.)Úinstalled_pkgs)r   Úshould_rebootÚsetr9   ÚeventÚneeds_reboot)r    Úreboot_requireds     r!   Ú_check_for_rebootz!RepoEntitlement._check_for_reboot�   s4   € ä ×.Ñ.Ü˜tŸ}™}Ó-ô
ˆô 	×Ñ˜?Ô+ØÐr#   c                  ó   — y r   r   r   s    r!   Úrepo_key_filezRepoEntitlement.repo_key_file˜   s   € ð 	r#   Úignore_dependent_servicesc                 ó  •— t         ‰| �  |¬«      \  }}|du r||fS | j                  s[| j                  rOdt	        t
        j                  t        j                  j                  | j                  | j                  ¬«      «      fS ||fS )N)ra   F©Úentitlement_namerR   )ÚsuperÚcan_disableÚoriginÚpurger   r   ÚNO_PURGE_WITHOUT_ORIGINr   ÚREPO_PURGE_FAIL_NO_ORIGINr-   rR   )r    ra   ÚresultÚreasonÚ	__class__s       €r!   rf   zRepoEntitlement.can_disable�   s�   ø€ ô ™Ñ,Ø&?ð -ó 
‰ˆ�ð �U‰?Ø˜6�>Ð!à�{Š{˜tŸzšzàÜ!Ü+×CÑCÜ×6Ñ6×=Ñ=Ø)-¯©¸4¿:¹:ð >ó óðð ð �vˆ~Ðr#   c                 ór   — | j                   d uxr t        | j                   «      dkD  }| j                  s|syy)Nr   é   é   )r9   ÚlenÚaccess_only)r    Úwill_installs     r!   Úenable_stepszRepoEntitlement.enable_steps³   s8   € Ø—}‘}¨DÐ0ÒK´S¸¿¹Ó5GÈ!Ñ5KˆØ×Ò¡<ð ð r#   Úprogressc                 ó®  — |j                  t        j                  j                  | j                  ¬«      «       | j                  |«       | j                  rn| j                  rbt        | j                  «      dkD  rI|j                  dt        j                  j                  dj                  | j                  «      ¬«      «       y| j                  |«       y)z¢Enable specific entitlement.

        @return: True on success, False otherwise.
        @raises: UbuntuProError on failure to install suggested packages
        ©Úservicer   Úinfoú ©r9   T)ru   r   ÚCONFIGURING_APT_ACCESSr-   rR   Úsetup_apt_configÚsupports_access_onlyrr   rq   r9   ÚemitÚSKIPPING_INSTALLING_PACKAGESÚjoinÚinstall_packages)r    ru   s     r!   Ú_perform_enablezRepoEntitlement._perform_enable½   s°   € ð 	×ÑÜ×+Ñ+×2Ñ2¸4¿:¹:Ð2ÓFô	
ð 	×Ñ˜hÔ'à×$Ò$¨×)9Ò)9Ü�4—=‘=Ó! AÒ%Ø—‘ØÜ×9Ñ9×@Ñ@Ø!$§¡¨$¯-©-Ó!8ð Aó ôð ð ×!Ñ! (Ô+Ør#   c                 ó   — | j                   syy)Nro   rp   )rh   r   s    r!   Údisable_stepszRepoEntitlement.disable_stepsÔ   s   € Ø�zŠzð ð r#   c                 ó  — | j                   rà| j                  rÔ|j                  dt        j                  «       |j                  dd«       t        j                  | j                  «      }| j                  ||«      syg }g }|D ]S  }t        j                  || j                  ¬«      }|r|j                  |t        |«      f«       ŒC|j                  |«       ŒU | j                  |||«      syt        | d«      r| j                  «        | j                  |«       | j                   rg| j                  r[|j                  t        j                   j#                  | j$                  ¬«      «       | j'                  «       | j)                  «       y)Nry   Ú F)Úexclude_originÚremove_packages©rR   T)rh   rg   r   r   ÚPURGE_EXPERIMENTALr   Ú get_installed_packages_by_originÚpurge_kernel_checkÚget_remote_versions_for_packageÚappendÚmaxÚprompt_for_purgeÚhasattrr‰   Úremove_apt_configru   ÚPURGING_PACKAGESr-   rR   Úexecute_reinstallÚexecute_removal)r    ru   Úrepo_origin_packagesÚpackages_to_reinstallÚpackages_to_removeÚpackageÚalternativess          r!   Ú_perform_disablez RepoEntitlement._perform_disableÝ   s`  € Ø�:Š:˜$Ÿ+š+Ø�M‰M˜&¤(×"=Ñ"=Ô>Ø�M‰M˜& "Ô%ä#&×#GÑ#GØ—‘ó$Ð ð ×*Ñ*Ð+?ÀÔJØà$&Ð!Ø!#ÐØ/ò 7�Ü"×BÑBØ¨D¯K©Kô �ñ  ð *×0Ñ0Ø ¤# lÓ"3Ð4õð '×-Ñ-¨gÕ6ð7ð ×(Ñ(Ø"Ð$9¸8ôð ä�4Ð*Ô+Ø× Ñ Ô"Ø×Ñ˜xÔ(à�:Š:˜$Ÿ+š+Ø×ÑÜ×)Ñ)×0Ñ0°t·z±zÐ0ÓBôð ×"Ñ"Ð#8Ô9Ø× Ñ Ð!3Ô4Ør#   c                 óH  — g }|D ]I  }t        j                  t        |j                  «      }|sŒ*|j	                  |j                  d«      «       ŒK |�rJ|j                  «       st        j                  «       ‚|j                  dt        j                  j                  | j                  ¬«      «       |j                  ddj                  |«      «       t        j                   «       j"                  }|j                  dt        j$                  j                  |¬«      «       t        j&                  «       }|D �cg c]  }||vr|‘Œ
 }	}|	s!|j                  dt        j(                  «       y|j                  dt*        j,                  dt        j.                  ifg«       y	c c}w )
a*  
        Checks if the purge operation involves a kernel.

        When package called 'linux-image-*' is in the package list, warn the
        user that a kernel is being removed. Then, show the user what the
        current kernel is.

        If the current kernel is to be removed, and there are no other valid
        Ubuntu Kernels installed in the system, return False to abort the
        operation.

        If there is another Ubuntu kernel - besides the one installed - then
        prompt the user for confirmation before proceeding.
        é   ry   rw   rz   )Úkernel_versionFÚmessage_operationÚmsgT)ÚreÚsearchÚRE_KERNEL_PKGr'   r�   ÚgroupÚis_interactiver   Ú#NonInteractiveKernelPurgeDisallowedr   r   ÚPURGE_KERNEL_REMOVALr-   rR   r�   r   Úget_kernel_infoÚuname_releaseÚPURGE_CURRENT_KERNELÚget_installed_ubuntu_kernelsÚPURGE_NO_ALTERNATIVE_KERNELr   Úprompt_for_confirmationÚPURGE_KERNEL_CONFIRMATION)
r    Úpackage_listru   Úlinux_image_versionsrš   ÚmÚcurrent_kernelÚinstalled_kernelsÚversionÚalternative_kernelss
             r!   r�   z"RepoEntitlement.purge_kernel_check	  s}  € ð  "ÐØ#ò 	8ˆGÜ—	‘	œ-¨¯©Ó6ˆAÚØ$×+Ñ+¨A¯G©G°A«JÕ7ð	8ò  ð ×*Ñ*Ô,Ü ×DÑDÓFÐFà�M‰MØÜ×-Ñ-×4Ñ4¸T¿Z¹ZÐ4ÓHôð �M‰M˜& #§(¡(Ð+?Ó"@ÔAä#×3Ñ3Ó5×CÑCˆNØ�M‰MØÜ×-Ñ-×4Ñ4Ø#1ð 5ó ôô !'× CÑ CÓ EÐð  1ö#àØÐ"6Ñ6ò ð#Ðð #ñ 'Ø—‘˜f¤h×&JÑ&JÔKØà�M‰MØ#ô ×4Ñ4Ø¤× BÑ BÐCððôð ùò)#s   Ä9Fc                 ó  — d}|r_|j                  dt        j                  «       |j                  dt        j                  |D �cg c]  }|j
                  ‘Œ c}«      «       d}|rd|j                  dt        j                  «       |j                  dt        j                  |D ��cg c]  \  }}|j
                  ‘Œ c}}«      «       d}|r3|j                  dt        j                  dt        j                  ifg«       yc c}w c c}}w )NFry   Tr    r¡   )	r   r   ÚWARN_PACKAGES_REMOVALr   Úcreate_package_list_strr'   ÚWARN_PACKAGES_REINSTALLr®   ÚPROCEED_YES_NO)r    r™   r˜   ru   Úpromptrš   Ú_s          r!   r‘   z RepoEntitlement.prompt_for_purgeJ  sí   € ð ˆÙØ�M‰M˜&¤(×"@Ñ"@ÔAØ�M‰MØÜ×,Ñ,Ø1CÖD g�W—\“\ÒDóôð ˆFá Ø�M‰M˜&¤(×"BÑ"BÔCØ�M‰MØÜ×,Ñ,Ø6K×L¡l w°�W—\“\ÓLóôð ˆFáØ�M‰MØ#ô ×4Ñ4Ø¤× 7Ñ 7Ð8ððôð ùò3 Eùó Ms   ÁD Â&Dc                 óò   — t        j                  «       }|D �cg c]  }|j                  |v r|j                  ‘Œ }}|r5t        j                  |t        j
                  j                  |¬«      «       y y c c}w )Nr{   )r   Úget_installed_packages_namesr'   Úpurge_packagesr   ÚUNINSTALLING_PACKAGES_FAILEDr-   )r    r™   Úinstalled_packagesrš   Ú	to_removes        r!   r–   zRepoEntitlement.execute_removalq  s   € ô
 !×=Ñ=Ó?Ðð .ö
àØ�|‰|Ð1Ñ1ð �L‹Lð
ˆ	ð 
ñ
 Ü×ÑØÜ×5Ñ5×<Ñ<Ø&ð =ó õð ùò
s   ™!A4c                 óô   — t        j                  «       }|D ��cg c]9  \  }}|j                  |v r&dj                  |j                  |j                  «      ‘Œ; }}}|rt        j
                  |«       y y c c}}w )Nz{}={})r   r¿   r'   r-   Úver_strÚreinstall_packages)r    r˜   rÂ   rš   rµ   Úto_reinstalls         r!   r•   z!RepoEntitlement.execute_reinstall„  ss   € ô !×=Ñ=Ó?Ðð '<÷
á"�˜'Ø�|‰|Ð1Ñ1ð �N‰N˜7Ÿ<™<¨¯©Õ9ð
ˆñ 
ñ
 Ü×"Ñ" <Õ0ð ùó
s   š>A4c                 ó  — t         j                  t        j                  j	                  | j
                  ¬«      f}| j                  }|j                  di «      j                  di «      }|j                  d«      }|s:t         j                  t        j                  j	                  | j
                  ¬«      fS |j                  d«      }|s:t         j                  t        j                  j	                  | j
                  ¬«      fS t        j                  t        j                  ¬«      }|D ]p  }t        j                  | j                  j	                  ||«      |«      }|sŒ6t         j                   t        j"                  j	                  | j
                  ¬«      f} n | j$                  rc| j&                  D ]T  }	t        j(                  |	«      rŒt         j                  t        j*                  j	                  | j,                  |	¬«      fc S  |S )NrŠ   r3   r4   r<   rD   )Ú	error_msg)rx   rš   )r   ÚDISABLEDr   ÚSERVICE_NOT_CONFIGUREDr-   rR   r6   r7   ÚNO_APT_URL_FOR_SERVICEÚNO_SUITES_FOR_SERVICEr   Úget_apt_cache_policyÚAPT_POLICY_FAILEDr¢   r£   r1   ÚENABLEDÚSERVICE_IS_ACTIVEÚcheck_packages_are_installedr9   Úis_installedÚ SERVICE_DISABLED_MISSING_PACKAGEr'   )
r    Úcurrent_statusr6   r4   Úrepo_urlÚrepo_suitesÚpolicyÚsuiteÚservice_matchrš   s
             r!   Úapplication_statusz"RepoEntitlement.application_status‘  sÌ  € ô ×&Ñ&Ü×+Ñ+×2Ñ2¸¿¹Ð2ÓDð
ˆð
 ×.Ñ.ˆØ$×(Ñ(¨¸Ó;×?Ñ?Ø˜"ó
ˆ
ð —>‘> (Ó+ˆÙä!×*Ñ*Ü×/Ñ/×6Ñ6¸T¿Z¹ZÐ6ÓHðð ð !—n‘n XÓ.ˆÙä!×*Ñ*Ü×.Ñ.×5Ñ5¸D¿J¹JÐ5ÓGðð ô
 ×)Ñ)´H×4NÑ4NÔOˆØ ò 		ˆEÜŸI™IØ×+Ñ+×2Ñ2°8¸UÓCÀVóˆMò ä%×-Ñ-Ü×.Ñ.×5Ñ5¸D¿J¹JÐ5ÓGð"�ñ ð		ð ×,Ò,ØŸ=™=ò �Ü×'Ñ'¨Õ0ä)×2Ñ2Ü ×AÑA×HÑHØ$(§I¡I°wð Ió ðò ðð Ðr#   c                 óæ   — | j                   }t        d„ t        j                  |«      j	                  «       j                  d«      D «       «      ry|syt        |t        j                  |«      v «      S )zÞCheck if apt url delta should be applied.

        :param apt_url: string containing the apt url to be used.

        :return: False if apt url is already found on the source file.
                 True otherwise.
        c              3   ó>   K  — | ]  }|j                  d «      –— Œ y­w)ú#N)Ú
startswith)Ú.0Úlines     r!   ú	<genexpr>z<RepoEntitlement._check_apt_url_is_applied.<locals>.<genexpr>Í  s!   è ø€ ò 
àð �O‰O˜C× ñ
ùs   ‚ú
FT)r.   Úallr   Ú	load_fileÚstripÚsplitÚbool)r    r>   Úapt_files      r!   Ú_check_apt_url_is_appliedz)RepoEntitlement._check_apt_url_is_appliedÂ  sm   € ð —>‘>ˆô ñ 
ä×(Ñ(¨Ó2×8Ñ8Ó:×@Ñ@ÀÓFô
ô 
ð ñ Øô �Gœv×/Ñ/°Ó9Ð9Ó:Ð:r#   Úorig_accessÚdeltasÚallow_enableÚverbosec                 óŒ  •— t         ‰| �  ||||¬«      ry|j                  di «      }|j                  di «      }|j                  d«      }|j                  d«      }t        j                  «       }	|r|	r| j                  «       }
n| j                  «       \  }
}|
t        j                  k(  ry| j                  |«      �st        j                  d| j                  |«       |r=t        j                  t        j                  j!                  | j                  ¬	«      «       |j                  di «      }|j                  di «      j                  d«      }|r+t#        j$                  | j&                  || j(                  «       | j+                  t-        j.                  «       «       | j1                  t-        j.                  «       «       |rt        j                  d
|«       |rBt        j                  t        j2                  j!                  dj5                  |«      ¬«      «       | j7                  t-        j.                  «       |¬«       y)ak  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î   Tr3   r4   r<   r5   Fz.New aptURL, updating %s apt sources list to %srw   z%New additionalPackages, installing %rú, r{   )r°   )re   Úprocess_contract_deltasr7   r   ÚreadÚ"_check_application_status_on_cacherÛ   r   rÊ   rê   rP   ry   r'   r[   r   ÚREPO_UPDATING_APT_SOURCESr-   r   Úremove_auth_apt_repor.   rB   r“   r
   ÚProgressWrapperr}   Ú REPO_REFRESH_INSTALLING_PACKAGESr�   r‚   )r    rë   rì   rí   rî   Údelta_entitlementÚdelta_directivesÚdelta_apt_urlÚdelta_packagesÚstatus_cacherÛ   r½   Úorig_entitlementÚold_urlrm   s                 €r!   rñ   z'RepoEntitlement.process_contract_deltasÜ  sû  ø€ ô( ‰7Ñ*Ø˜ °wð +ô 
ð à"ŸJ™J }°bÓ9ÐØ,×0Ñ0°¸rÓBÐØ(×,Ñ,¨XÓ6ˆØ)×-Ñ-Ð.BÓCˆÜ(×-Ñ-Ó/ˆá¡Ø!%×!HÑ!HÓ!JÑà$(×$;Ñ$;Ó$=Ñ!Ð àÔ!2×!;Ñ!;Ò;Øà×-Ñ-¨mÕ<Ü�H‰HØ@Ø—	‘	Øôñ Ü—
‘
Ü×6Ñ6×=Ñ=Ø $§	¡	ð >ó ôð  +Ÿ™¨}¸bÓAÐØ&×*Ñ*¨<¸Ó<×@Ñ@ÀÓJˆGÙä×(Ñ(Ø—N‘N G¨T×-?Ñ-?ôð ×"Ñ"¤3×#6Ñ#6Ó#8Ô9Ø×!Ñ!¤#×"5Ñ"5Ó"7Ô8áÜ�H‰HÐ<¸nÔMáÜ—
‘
Ü×=Ñ=×DÑDØ!%§¡¨>Ó!:ð Eó ôð
 ×!Ñ!Ü×#Ñ#Ó%°Nð "ô ð r#   r°   Úcleanup_on_failurec                 óÆ  — |s| j                   }|sy|j                  d| j                  j                  d«      «       	 | j	                  |«       |j                  t        j                  j                  | j                  ¬«      «       | j                  r	ddi}g d¢}nd}g }	 t!        j"                  |||¬«       y# t
        j                  $ r' |r#| j                  t        j                  «       «       ‚ w xY w# t
        j                  $ rU |rQt$        j'                  d	j                  | j(                  «      «       | j                  t        j                  «       «       ‚ w xY w)
zïInstall contract recommended packages for the entitlement.

        :param package_list: Optional package list to use instead of
            self.packages.
        :param cleanup_on_failure: Cleanup apt files if apt install fails.
        Nr    Úpre_installrŠ   ÚDEBIAN_FRONTENDÚnoninteractive)z--allow-downgradesz$-o Dpkg::Options::="--force-confdef"z$-o Dpkg::Options::="--force-confold")r9   Úapt_optionsÚoverride_env_varsz.Apt install failed, removing apt config for {})r9   r   Ú	messagingr7   Ú_update_sources_listr   ÚUbuntuProErrorr“   r
   rö   ru   r   ÚINSTALLING_SERVICE_PACKAGESr-   rR   Úapt_noninteractiver   Úrun_apt_install_commandrP   ry   r'   )r    ru   r°   rÿ   r  r  s         r!   r‚   z RepoEntitlement.install_packages+  sC  € ñ ØŸ=™=ˆLáØà�‰Ð)¨4¯>©>×+=Ñ+=¸mÓ+LÔMð	Ø×%Ñ% hÔ/ð 	×ÑÜ×0Ñ0×7Ñ7¸d¿j¹jÐ7ÓIô	
ð ×"Ò"Ø!2Ð4DÐ EÐò‰Kð !%ÐØˆKð	Ü×'Ñ'Ø%Ø'Ø"3öøô+ ×(Ñ(ò 	Ù!Ø×&Ñ&¤s×':Ñ':Ó'<Ô=Øð	ûô4 ×(Ñ(ò 	Ù!Ü—‘ØD×KÑKØŸ	™	óôð
 ×&Ñ&¤s×':Ñ':Ó'<Ô=Øð	ús   ¾B; Â"C8 Â;:C5Ã8A(E c           	      ó†	  — d}d}d}| j                   j                  s| j                   j                  r�t        j                  d| j                   j                  t        j
                  «      }t        j                  d| j                   j                  t        j                  «      }t        j                  j                  }n¸| j                   j                  s| j                   j                  rŒt        j                  d| j                   j                  t        j
                  «      }t        j                  d| j                   j                  t        j                  «      }t        j                  j                  }t        j                  |||¬«       | j                  }| j                  }|d   j!                  di «      }| j#                  «       }|j!                  d«      }	|	s t%        j&                  | j(                  ¬«      ‚|j!                  d	«      }
|
s t%        j*                  | j(                  ¬«      ‚|j!                  d
«      }|s t%        j,                  | j(                  ¬«      ‚| j.                  r‰| j0                  s+t%        j2                  | j(                  | j4                  ¬«      ‚| j6                  j9                  | j(                  ¬«      }t        j:                  ||
| j0                  | j.                  «       g }t=        t        j>                  «      s|jA                  d«       t=        t        jB                  «      s|jA                  d«       |rV|jE                  dtF        jH                  j9                  djK                  |«      ¬«      «       	 t        jL                  |¬«       t        jV                  || jX                  j9                  |
«      ||| jZ                  | j\                  | j^                  «       |ja                  tF        jb                  j9                  | j4                  ¬«      «       	 t        jd                  |«       y# t$        jN                  $ r% | jQ                  tS        jT                  «       «       ‚ w xY w# t$        jN                  $ r' | jQ                  tS        jT                  «       d¬«       ‚ w xY w)zÕSetup apt config based on the resourceToken and directives.
        Also sets up apt proxy if necessary.

        :raise UbuntuProError: on failure to setup any aspect of this apt
           configuration
        Nr   Úhttps)Ú
http_proxyÚhttps_proxyÚproxy_scoper3   r4   ÚaptKey©rd   r<   rD   rc   ©r'   zapt-transport-httpszca-certificatesry   rð   r{   F)Úrun_apt_update)3rN   Úglobal_apt_http_proxyÚglobal_apt_https_proxyr   Úvalidate_proxyÚPROXY_VALIDATION_APT_HTTP_URLÚPROXY_VALIDATION_APT_HTTPS_URLr   ÚAptProxyScopeÚGLOBALÚua_apt_http_proxyÚua_apt_https_proxyÚUACLIENTÚsetup_apt_proxyr.   r6   r7   rV   r   ÚRepoNoAptKeyr'   ÚMissingAptURLDirectiveÚRepoNoSuitesr"   rg   ÚRepoPinFailNoOriginrR   Úrepo_pref_file_tmplr-   Úadd_ppa_pinningr   ÚAPT_METHOD_HTTPS_FILEr�   ÚCA_CERTIFICATES_FILEr   r   ÚINSTALLING_PACKAGESr�   r  r  r“   r
   rö   Úadd_auth_apt_repor0   r`   rB   Úcheck_updates_pocketru   ÚAPT_UPDATING_LISTÚupdate_sources_list)r    ru   r  r  ÚscopeÚrepo_filenameÚresource_cfgr4   rS   r  rÖ   r×   Úrepo_pref_fileÚprerequisite_pkgss                 r!   r}   z RepoEntitlement.setup_apt_configf  sÀ  € ð ˆ
ØˆØˆØ�8‰8×)Ò)¨T¯X©X×-LÒ-LÜ×,Ñ,ØØ—‘×.Ñ.Ü×2Ñ2óˆJô
 ×-Ñ-ØØ—‘×/Ñ/Ü×3Ñ3óˆKô
 ×%Ñ%×,Ñ,‰EØ�X‰X×'Ò'¨4¯8©8×+FÒ+FÜ×,Ñ,ØØ—‘×*Ñ*Ü×2Ñ2óˆJô
 ×-Ñ-ØØ—‘×+Ñ+Ü×3Ñ3óˆKô
 ×%Ñ%×.Ñ.ˆEä×ÑØ!¨{Èõ	
ð Ÿ™ˆØ×+Ñ+ˆØ! -Ñ0×4Ñ4°\À2ÓFˆ
Ø×'Ñ'Ó)ˆØ—‘ Ó)ˆÙÜ×)Ñ)¸4¿9¹9ÔEÐEØ—>‘> (Ó+ˆÙÜ×3Ñ3ÀTÇYÁYÔOÐOØ —n‘n XÓ.ˆÙÜ×)Ñ)¸4¿9¹9ÔEÐEØ×!Ò!Ø—;’;Ü ×4Ñ4Ø%)§Y¡YØŸ*™*ôð ð "×5Ñ5×<Ñ<À$Ç)Á)Ð<ÓLˆNÜ×ÑØØØ—‘Ø×&Ñ&ô	ð ÐÜ”c×/Ñ/Ô0Ø×$Ñ$Ð%:Ô;Ü”c×.Ñ.Ô/Ø×$Ñ$Ð%6Ô7áØ�M‰MØÜ×,Ñ,×3Ñ3Ø!ŸY™YÐ'8Ó9ð 4ó ôðÜ×+Ñ+Ð5FÕGô 	×ÑØØ×Ñ×%Ñ% hÓ/ØØØ×ÑØ×ÑØ×%Ñ%ô	
ð 	×Ñœ(×4Ñ4×;Ñ;ÀÇÁÐ;ÓLÔMð	Ü×#Ñ# MÕ2øô% ×,Ñ,ò Ø×&Ñ&¤s×':Ñ':Ó'<Ô=Øðûô& ×(Ñ(ò 	Ø×"Ñ"¤3×#6Ñ#6Ó#8ÈÐ"ÔOØð	ús   ÎQ Ð5R Ñ8RÒ:S Úoverride_snapshot_urlsc                 óÊ  — |�|}n| j                   }| j                  «       }| j                  j                  di «      j                  di «      j                  d«      }| j                  j                  |«      }	 |j                  d«      \  }}t        j                  j                  |«       |g|z   D ]  }|sŒt        j                  |||«       Œ y # t        $ r d}|}Y ŒTw xY w)Nr3   r4   r<   ú:Úbearer)rB   rV   r6   r7   r0   r-   rç   Ú
ValueErrorr   ÚsecretsÚ
add_secretr   Úadd_apt_auth_conf_entry)r    r2  rB   ÚcredentialsrÖ   ÚusernameÚpasswordÚurls           r!   Úupdate_apt_authzRepoEntitlement.update_apt_authÍ  sè   € ð "Ð-Ø2‰Mà ×.Ñ.ˆMØ×-Ñ-Ó/ˆà× Ñ ×$Ñ$ ]°BÓ7ß‰S�˜rÓ"ß‰S�‹]ð 	ð
 ×%Ñ%×,Ñ,¨XÓ6ˆð	#Ø!,×!2Ñ!2°3Ó!7ÑˆH�hô 	×Ñ×)Ñ)¨(Ô3Ø�: Ñ-ò 	EˆCÚÜ×+Ñ+¨C°¸8ÕDñ	Eøô	 ò 	#ØˆHØ"ŠHð	#ús   Á9C ÃC"Ã!C"r  c                 óv  — t        j                  «       j                  }| j                  }| j                  j                  «       | j                     j                  di «      }|j                  di «      }|j                  d«      }|s t        j                  | j                  ¬«      ‚| j                  j                  |«      }|j                  t        j                  j                  | j                  ¬«      «       t!        j"                  ||| j$                  | j&                  «       t!        j(                  ||«       | j*                  r;| j,                  j                  | j                  ¬«      }t        j.                  |«       |r4|j                  t        j0                  «       t!        j2                  «        yy)zªRemove any repository apt configuration files.

        :param run_apt_update: If after removing the apt update
            command after removing the apt files.
        r3   r4   r<   r  rŠ   r  N)r   r)   r*   r.   rK   Úentitlementsr'   r7   r   r!  r0   r-   ru   r   ÚREMOVING_APT_CONFIGURATIONrR   r   rõ   rB   r`   Úremove_apt_list_filesr"   r$  Úensure_file_absentÚAPT_UPDATING_LISTSÚrun_apt_update_command)	r    ru   r  r*   r.  r3   Úaccess_directivesrÖ   r0  s	            r!   r“   z!RepoEntitlement.remove_apt_configå  s[  € ô ×(Ñ(Ó*×1Ñ1ˆØŸ™ˆØ×-Ñ-×:Ñ:Ó<¸T¿Y¹YÑG×KÑKØ˜2ó
ˆð (ŸO™O¨L¸"Ó=ÐØ$×(Ñ(¨Ó2ˆÙÜ×3Ñ3ÀTÇYÁYÔOÐOà×%Ñ%×,Ñ,¨XÓ6ˆà×ÑÜ×/Ñ/×6Ñ6¸T¿Z¹ZÐ6ÓHô	
ô 	× Ñ Ø˜8 T×%7Ñ%7¸×9KÑ9Kô	
ô 	×!Ñ! (¨FÔ3à×!Ò!Ø!×5Ñ5×<Ñ<À$Ç)Á)Ð<ÓLˆNÜ×%Ñ% nÔ5áØ×Ñœh×9Ñ9Ô:Ü×&Ñ&Õ(ð r#   )F)FT)NTr   )T)8Ú__name__Ú
__module__Ú__qualname__r,   r$  r0   rg   r
  rÒ   Úsupports_purger*  Úpropertyr	   ÚintÚstrr"   r.   r1   r   r9   r   r>   rB   rE   rV   rè   r^   ÚabcÚabstractmethodr`   r   r   rf   rt   r
   rö   rƒ   r…   rœ   r�   r‘   r–   r•   r   r   ÚNamedMessagerÛ   rê   r   r   rñ   r‚   r}   r>  r“   Ú__classcell__)rm   s   @r!   r   r   $   s  ø„ ØH€NØ@ÐØ€Mð €Fð Ðð $)Ð ð €Nð !Ðð ð 5¨¨c°4¨Ñ#8ò ó ðð ðO˜3ò Oó ðOð ð*¨ò *ó ð*ð ð˜$˜s™)ò ó ðð  ð
˜ #™ò 
ó ð
ð ð
˜t C™yò 
ó ð
ð ð
˜H S™Mò 
ó ð
ð Có ð8 4ó ð Ø×Ñð˜sò ó ó ðð 16ñØ)-ðà	ˆt�XÐ/Ñ0Ð0Ñ	1õð,˜có ð¨×(;Ñ(;ð Àó ð.˜só ð*¨×)<Ñ)<ó *ðX?¸×9LÑ9Ló ?ðB%ð ×%Ñ%ó	%òNò&1ð/à	Ð  (¨8×+@Ñ+@Ñ"AÐAÑ	Bó/òb;ð< #ØñMà˜#˜s˜(‘^ðMð �S˜#�X‘ðMð ð	Mð
 ðMð 
õMðd -1Ø#'ñ	9à×%Ñ%ð9ð ˜t C™yÑ)ð9ð !ð	9ð
 
ó9ðve¨×)<Ñ)<ð eÀó eðP =AñEØ&.¨t°C©yÑ&9óEð6  $ñ$)à×%Ñ%ð$)ð ÷$)r#   r   ))rN  r8   Úloggingr¢   Úos.pathr   Útypingr   r   r   r   r   r	   Úuaclientr
   r   r   r   r   r   r   r   r   r   Úuaclient.entitlementsr   Ú(uaclient.entitlements.entitlement_statusr   r   r   Úuaclient.files.state_filesr   Úget_event_loggerr[   Ú	getLoggerÚreplace_top_level_logger_namerG  rP   r¤   ÚUAEntitlementr   r   r#   r!   ú<module>r]     s‰   ðÛ 
Û Û Û 	Ý ß :× :÷÷ ÷ õ '÷ñ õ
 9à%ˆ×%Ñ%Ó'€Ø€g×ÑÐ:˜×:Ñ:¸8ÓDÓE€ð P€ôe)�d×(Ñ(õ e)r#   