Ë
    x[h“6  ã            
       ór  — U d Z ddlZddlZddlZddlmZmZ ddlmZ ddl	m
Z
mZmZ ddlmZ ddlmZ ddlmZ dd	lmZ  ed
dg«      Zddgedg ee«      z   dœZeed<    ej4                  e«      ZdZdZdZde fd„Z!de fd„Z"d$defd„Z#d$d„Z$defd„Z%de de&fd„Z'de fd„Z(de fd„Z)d e*d!eded"eddf
d#„Z+y)%z1ubuntu_pro: Configure Ubuntu Pro support servicesé    N)ÚAnyÚList)Úurlparse)ÚperformanceÚsubpÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚPER_INSTANCEzubuntu-advantageÚubuntu_advantageÚcc_ubuntu_proÚubuntuÚ
ubuntu_pro)ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmetaÚREDACTEDzUUnable to determine if this is an Ubuntu Pro instance. Fallback to normal Pro attach.)Ú
http_proxyÚhttps_proxyÚglobal_apt_http_proxyÚglobal_apt_https_proxyÚua_apt_http_proxyÚua_apt_https_proxyÚpro_sectionc                 óL  — d| vry | d   }t        |t        «      s8dt        |«      j                  › �}t        j                  |«       t        |«      ‚d|vry |d   }t        |t        «      s8dt        |«      j                  › �}t        j                  |«       t        |«      ‚y )NÚfeaturesz.'ubuntu_pro.features' should be a dict, not a Údisable_auto_attachzB'ubuntu_pro.features.disable_auto_attach' should be a bool, not a )Ú
isinstanceÚdictÚtypeÚ__name__ÚLOGÚerrorÚRuntimeErrorÚbool)r   r   Úmsgr    s       ú@/usr/lib/python3/dist-packages/cloudinit/config/cc_ubuntu_pro.pyÚvalidate_schema_featuresr+   *   s¼   € Ø˜Ñ$Øð ˜:Ñ&€HÜ�h¤Ô%ðÜ�X“×'Ñ'Ð(ð*ð 	ô 	�	‰	�#ŒÜ˜3ÓÐð  HÑ,ØØ"Ð#8Ñ9ÐÜÐ)¬4Ô0ðÜÐ/Ó0×9Ñ9Ð:ð<ð 	ô 	�	‰	�#ŒÜ˜3ÓÐð 1ó    Ú
pro_configc                 ó’  — g }t        | j                  «       «      D ]U  \  }}|t        vrt        j	                  d|«       Œ%|€Œ(	 t        |«      }|j                  dvr|j                  d|› �«       ŒW |r)t        dj                  dj                  |«      «      «      ‚y# t        t        f$ r |j                  d|› �«       Y Œ©w xY w)a·  Validate user-provided ua:config option values.

    This function supplements flexible jsonschema validation with specific
    value checks to aid in triage of invalid user-provided configuration.

    Note: It does not log/raise config values as they could be urls containing
    sensitive auth info.

    @param pro_config: Dictionary of config value under 'ubuntu_pro'.

    @raises: ValueError describing invalid values provided.
    z4Not validating unknown ubuntu_pro.config.%s propertyN)ÚhttpÚhttpsz-Expected URL scheme http/https for ua:config:zExpected a URL for ua:config:z$Invalid ubuntu_pro configuration:
{}ú
)ÚsortedÚitemsÚKNOWN_PRO_CONFIG_PROPSr%   Úwarningr   ÚschemeÚappendÚAttributeErrorÚ
ValueErrorÚformatÚjoin)r-   ÚerrorsÚkeyÚvalueÚ
parsed_urls        r*   Úsupplemental_schema_validationr@   E   sã   € ð €FÜ˜Z×-Ñ-Ó/Ó0ò A‰
ˆˆUØÔ,Ñ,Ü�K‰KØFØôð Øˆ]àð	AÜ! %›ˆJØ× Ñ Ð(9Ñ9Ø—‘ØCÀCÀ5ÐIôøðAñ& ÜØ3×:Ñ:¸4¿9¹9ÀVÓ;LÓMó
ð 	
ð øô ¤
Ð+ò 	AØ�M‰MÐ9¸#¸Ð?Ö@ð	Aús   Á-B Â #CÃCc                 óZ  — | €y t        | t        «      s"t        dt        | «      j                  › d�«      ‚t        | «       g }t        | j                  «       «      D ]£  \  }}d }i }|€t        j                  d|«       ddd|g}nd|› d�}t        j                  d|«       t        j                  d	|«      r|› d
t        j                  |«      › �}n|› d
|› �}ddd|g}d|d d |gz   i}	 t        j                  |fi |¤Ž Œ¥ |rQ|D ]  \  }
}t        j'                  d|
|«       Œ t        dj)                  dj+                  d„ |D «       «      «      «      ‚y # t        j                  $ rA}t        |«      }	|�|	j!                  |t"        «      }	|j%                  ||	f«       Y d }~�ŒId }~ww xY w)Nz+ubuntu_pro: config should be a dict, not a z%; skipping enabling config parameterszDisabling Pro config for %sÚproÚconfigÚunsetz	=REDACTEDzEnabling Pro config %sz\sú=ÚsetÚ	logstringéÿÿÿÿz#Failure enabling/disabling "%s":
%sz3Failure enabling/disabling Ubuntu Pro config(s): {}ú, c              3   óD   K  — | ]  \  }}d j                  |«      –— Œ y­w)z"{}"N)r:   )Ú.0ÚparamÚ_s      r*   ú	<genexpr>z!set_pro_config.<locals>.<genexpr>“   s   è ø€ ÒM±8°5¸!˜&Ÿ-™-¨×.ÑMùs   ‚ )r!   r"   r'   r#   r$   r@   r2   r3   r%   ÚdebugÚreÚsearchÚescaper   ÚProcessExecutionErrorÚstrÚreplacer   r7   r5   r:   r;   )r-   Úenable_errorsr=   r>   Úredacted_key_valueÚsubp_kwargsÚ
config_cmdÚ	key_valueÚeÚerr_msgrL   r&   s               r*   Úset_pro_configr]   l   sÚ  € ØÐØÜ�j¤$Ô'ÜðÜ�zÓ"×+Ñ+Ð,ð -3ð3ó
ð 	
ô
 # :Ô.à€MÜ˜Z×-Ñ-Ó/Ó0ò 1‰
ˆˆUØ!ÐØˆØˆ=Ü�I‰IÐ3°SÔ9Ø ¨7°CÐ8‰Jà$' 5¨	Ð!2ÐÜ�I‰IÐ.Ð0BÔCÜ�y‰y˜ Ô&Ø"˜e 1¤R§Y¡Y¨uÓ%5Ð$6Ð7‘	à"˜e 1 U GÐ,�	Ø ¨5°)Ð<ˆJØ&¨
°3°B¨Ð;MÐ:NÑ(NÐOˆKð	1Ü�I‰I�jÑ0 KÓ0ð!1ñ, Ø)ò 	N‰LˆE�5Ü�K‰KÐ>ÀÀuÕMð	NäØA×HÑHØ—	‘	ÑM¸}ÔMÓMóó
ð 	
ð øô ×)Ñ)ò 	1Ü˜!“fˆGØ!Ð-Ø!Ÿ/™/¨%´Ó:�Ø× Ñ  # w ×0Ò0ûð		1ús   Ã*EÅF*Å)6F%Æ%F*c                 ó0  — |€g }ndt        |t        «      rt        j                  d«       |g}n;t        |t        «      s+t        j                  dt        |«      j                  «       g }|rddd| g}ndd| g}|dd t        gz   }t        j                  dd	j                  |«      «       	 t        j                  |d
dh|¬«       |syg d¢|z   }	 t        j                  |dd
dh¬«      \  }}		 t!        j"                  |«      }
g }|
j'                  dg «      D ]5  }|d   dk(  rt        j                  d|d   «       Œ%|j)                  |«       Œ7 |r~g }|D ]Z  }|j'                  d«      }|�|j)                  |«       d|› d|d   › �}nd|d   › d|d   › �}t        j                  t        |«       Œ\ t        ddj                  |«      z   «      ‚y# t        j                  $ rO}t        |«      j                  | t        «      }d|› �}t        j                  t        |«       t        |«      |‚d}~ww xY w# t        j                  $ r#}t        ddj                  |«      z   «      |‚d}~ww xY w# t         j$                  $ r}t        d|› �«      |‚d}~ww xY w) z=Call ua command line client to attach and/or enable services.NzNubuntu_pro: enable should be a list, not a string; treating as a single enablezIubuntu_pro: enable should be a list, not a %s; skipping enabling servicesrB   Úattachz--no-auto-enablerH   zAttaching to Ubuntu Pro. %sú r   é   )ÚrcsrG   zFailure attaching Ubuntu Pro:
)rB   Úenablez--assume-yesz--formatÚjsonTé   )Úcapturerb   z!Error while enabling service(s): rI   zPro response was not json: r<   Úmessage_codezservice-already-enabledzService `%s` already enabled.ÚservicezFailure enabling `z`: ÚmessagezFailure of type `r#   z(Failure enabling Ubuntu Pro service(s): )r!   rT   r%   r5   Úlistr#   r$   r   rO   r;   r   rS   rU   r   Úlogexcr'   rd   ÚloadsÚJSONDecodeErrorÚgetr7   )Útokenrc   Ú
attach_cmdÚredacted_cmdr[   Úerr)   ÚcmdÚenable_stdoutrM   Úenable_resprV   ÚerrÚerror_servicesrh   s                  r*   Úconfigure_prorx   ˜   sº  € à€~Ø‰Ü	�FœCÔ	 Ü�‰ð5ô	
ð �‰Ü˜¤Ô%Ü�‰ð0ä�‹L×!Ñ!ô	
ð
 ˆñ Ø˜XÐ'9¸5ÐA‰
à˜X uÐ-ˆ
Ø˜c˜r�?¤h ZÑ/€LÜ‡I�IÐ+¨S¯X©X°lÓ-CÔDð'ä�	‰	�* 1 a &°LÕAñ ØÚ
?À&Ñ
H€CðÜŸ9™9 S°$¸QÀ¸FÔCÑˆ�qðÜ—j‘j Ó/ˆð< !#€MØ�‰˜x¨Ó,ò "ˆØˆ~ÑÐ";Ò;Ü�I‰IÐ5°s¸9±~ÔFØØ×Ñ˜SÕ!ð	"ñ Ø$&ˆØ ò 	"ˆCØ—g‘g˜iÓ(ˆGØÐ"Ø×%Ñ% gÔ.Ø*¨7¨)°3°s¸9±~Ð6FÐG‘à)¨#¨f©+¨°c¸#¸i¹.Ð9IÐJ�Ü�K‰Kœ˜SÕ!ð	"ô Ø6Ø�i‰i˜Ó'ñ(ó
ð 	
ð øôo ×%Ñ%ò 'Ü�‹V�^‰^˜E¤8Ó,ˆØ/°¨tÐ4ˆÜ�‰”C˜ÔÜ˜3Ó QÐ&ûð	'ûô ×%Ñ%ò ÜØ/°$·)±)¸FÓ2CÑCó
àð	ûðûô ×Ñò ÜØ)¨-¨Ð9ó
àð	ûðúsI   Â+G ÃH5 Ã.I. ÇH2Ç#A
H-È-H2È5I+ÉI&É&I+É.JÊJÊJÚcloudc                 ó@  — t        j                  d«      ry	 | j                  j                  «        	 | j                  j                  dg«       y# t        $ r t        j                  t        d«       ‚ w xY w# t        $ r t        j                  t        d«       ‚ w xY w)z.Install ubuntu-advantage-tools if not present.rB   NzPackage update failedzubuntu-advantage-toolsz(Failed to install ubuntu-advantage-tools)	r   ÚwhichÚdistroÚupdate_package_sourcesÚ	Exceptionr   rk   r%   Úinstall_packages)ry   s    r*   Úmaybe_install_ua_toolsr€   ü   s†   € ä‡z�z�%ÔØðØ�‰×+Ñ+Ô-ðØ�‰×%Ñ%Ð'?Ð&@ÕAøô	 ò Ü�‰”CÐ0Ô1Øðûô
 ò Ü�‰”CÐCÔDØðús   ˜A ³A8 Á%A5Á8%BÚreturnc                 óŽ  — t        | j                  di «      j                  dd«      «      }|ryddlm} ddlm} 	 t        j                  dd¬	«      5   |«       }d d d «       |j
                  S # 1 sw Y   j
                  S xY w# |$ r9}t        j                  d
|«       t        j                  t        «       Y d }~yd }~ww xY w)Nr   r    Fr   )ÚUserFacingError)Úshould_auto_attachz6Checking if the instance can be attached to Ubuntu ProÚalways©Úlog_modez%Error during `should_auto_attach`: %s)r(   rn   Úuaclient.api.exceptionsrƒ   Ú4uaclient.api.u.pro.attach.auto.should_auto_attach.v1r„   r   ÚTimedr%   rO   r5   ÚERROR_MSG_SHOULD_AUTO_ATTACH)r   r    rƒ   r„   ÚresultÚexs         r*   Ú_should_auto_attachrŽ     sº   € ÜØ�‰˜
 BÓ'×+Ñ+Ð,AÀ5ÓIóÐñ Øõ 8õð	Ü×ÑØDØô
ñ 	*ñ (Ó)ˆF÷		*ð ×$Ñ$Ð$÷	*ð ×$Ñ$Ð$ûð	 ò Ü�	‰	Ð9¸2Ô>Ü�‰Ô0Ô1Üûðús5   ¼B ÁA/ÁB Á/BÁ4B ÂB ÂCÂ/B?Â?Cc                 ó  — | j                  d«      }|s"d}t        j                  |«       t        |«      ‚| j                  d«      }|r%t        j	                  ddj                  |«      «       t        || j                  d«      ¬«       y )Nro   z8`ubuntu_pro.token` required in non-Pro Ubuntu instances.Úenable_betaz<Ignoring `ubuntu_pro.enable_beta` services in Pro attach: %srI   rc   )ro   rc   )rn   r%   r&   r'   rO   r;   rx   )r   ro   r)   r�   s       r*   Ú_attachr‘   (  so   € Ø�O‰O˜GÓ$€EÙØHˆÜ�	‰	�#ŒÜ˜3ÓÐØ—/‘/ -Ó0€KÙÜ�	‰	ØJØ�I‰I�kÓ"ô	
ô ˜ k§o¡o°hÓ&?Ö@r,   c                 ó¤  — ddl m}m} ddlm}m} | j                  d«      }| j                  d«      } |||¬«      }	 t        j                  dd¬	«      5   ||¬
«       d d d «       y # 1 sw Y   y xY w# |$ r |€|�t        j                  d«       Y y Y y |$ r5}d|j                  › �}	t        j                  |	«       t        |	«      |‚d }~ww xY w)Nr   )ÚAlreadyAttachedErrorrƒ   )ÚFullAutoAttachOptionsÚfull_auto_attachrc   r�   )rc   r�   zAttaching to Ubuntu Pror…   r†   )ÚoptionszŠThe instance is already attached to Pro. Leaving enabled services untouched. Ignoring config directives ubuntu_pro: enable and enable_betaz!Error during `full_auto_attach`: )rˆ   r“   rƒ   Ú2uaclient.api.u.pro.attach.auto.full_auto_attach.v1r”   r•   rn   r   rŠ   r%   r5   r)   r&   r'   )
r   r“   rƒ   r”   r•   rc   r�   r–   r�   r)   s
             r*   Ú_auto_attachr˜   7  sÐ   € ÷ N÷ð �_‰_˜XÓ&€FØ—/‘/ -Ó0€KÙ#ØØô€Gð(Ü×ÑÐ8À8ÔLñ 	.Ù WÕ-÷	.÷ 	.ñ 	.ûàò ØÐ" fÐ&8ä�K‰Kð6öñ '9ð ò (Ø1°"·&±&°Ð:ˆÜ�	‰	�#ŒÜ˜3Ó RÐ'ûð(ús;   ¾A4 Á
A(ÁA4 Á(A1Á-A4 Á1A4 Á4CÂCÂ0C
Ã
CÚnameÚcfgÚargsc                 óF  — d }t        t        j                  |«      «      }|rXt        |«      dkD  rt	        ddj                  |«      z  «      ‚t        j                  ddj                  |«      «       ||d      }d|v r |rt        j                  d|d   «       |d   }|€t        j                  d| «       y t        |t        «      s8d	t        |«      j                  › �}t        j                  |«       t	        |«      ‚d
|v r"d}t        j                  |«       t	        |«      ‚t        |«       t        |j!                  d«      «       t#        |«       t        j                  d«       t%        |«      rt'        |«       y |j)                  «       dhk  st+        |«       y y )Nre   zLUnable to configure Ubuntu Pro. Multiple deprecated config keys provided: %srI   z^Deprecated configuration key(s) provided: %s. Expected "ubuntu_pro"; will attempt to continue.r   r   z;Ignoring deprecated key %s and preferring ubuntu_pro configz=Skipping module named %s, no 'ubuntu_pro' configuration foundz%'ubuntu_pro' should be a dict, not a ÚcommandszPDeprecated configuration "ubuntu-advantage: commands" provided. Expected "token"rC   zETo discover more log info, please check /var/log/ubuntu-advantage.logr   )rj   ÚDEPRECATED_KEYSÚintersectionÚlenr'   r;   r%   r5   rO   r!   r"   r#   r$   r&   r€   r]   rn   r+   rŽ   r˜   Úkeysr‘   )r™   rš   ry   r›   r   Ú
deprecatedr)   s          r*   Úhandler£   Y  sš  € Ø€KÜ”o×2Ñ2°3Ó7Ó8€JÙÜˆz‹?˜QÒÜð%Ø'+§y¡y°Ó'<ñ=óð ô 	�‰ð@à�I‰I�jÓ!ô	
ð
 ˜* Q™-Ñ(ˆØ�sÑáÜ�K‰KØMØ˜1‘ôð ˜,Ñ'ˆØÐÜ�	‰	ØKØô	
ð 	Ü˜¤TÔ*ðÜ�[Ó!×*Ñ*Ð+ð-ð 	ô 	�	‰	�#ŒÜ˜3ÓÐØ�[Ñ ð ð 	ô 	�	‰	�#ŒÜ˜3ÓÐä˜5Ô!Ü�;—?‘? 8Ó,Ô-ô ˜[Ô)Ü‡I�IØOôô ˜;Ô'Ü�[Õ!ð ×ÑÓ J <Ò/Ü�Õð 0r,   )N),Ú__doc__rd   ÚloggingrP   Útypingr   r   Úurllib.parser   Ú	cloudinitr   r   r   Úcloudinit.cloudr	   Úcloudinit.configr
   Úcloudinit.config.schemar   Úcloudinit.settingsr   rF   rž   rj   r   Ú__annotations__Ú	getLoggerr$   r%   r   r‹   r4   r"   r+   r@   r]   rx   r€   r(   rŽ   r‘   r˜   rT   r£   © r,   r*   ú<module>r°      s&  ðò 8ã Û Û 	ß Ý !ç -Ñ -Ý !Ý #Ý .Ý +áÐ)Ð+=Ð>Ó?€ð ØˆzØØ ,˜~±°_Ó0EÑEñ	€€jó ð €g×Ñ˜Ó!€Ø€ð&ð ðÐ ð ¨$ó  ð6$
¨tó $
ñN)
˜só )
óXa
ðH %ó ð % Tð %¨dó %ð8A˜ó Að(˜dó (ðDB�ð B˜6ð B¨%ð B°tð BÀô Br,   