ó
    x[hú5  ã            	       ó|  • S SK r S SKrS SKrS SKJr  S SKJrJrJrJ	r	J
r
  S SKJr  S SKJrJr  S SKJr  S SKJr  S SKJr  \R,                  " \5      rS	rS
\0rSrSrSS0rSr " S S5      r " S S\R@                  5      r! " S S\!5      r"S r#S r$S1S jr%S2S jr&S r'\"\RP                  44\!\RP                  \RR                  44/r*S r+\S:X  a¥  S SK,r,S SK-r-S SKJ.r.  \,R^                  " SS 9r0\0Rc                  S!S"S#\S$9  \0Rc                  S%S&S'S(SS)9  \0Re                  5       r3\&" \3Rh                  \3Rj                  S*9r6S+\6;   a   \6S+   Ro                  5       \6S+'   \;" \Rx                  " \6S.SS/S095        gg! \8 a=    \-Rr                  Ru                  S,5        \6S+	 \." \6S+   5      Ro                  5       \6S-'    N]f = f)3é    N)Ú	b64decode)ÚdmiÚnetÚsourcesÚ
url_helperÚutil)Úug_util)Ú
EventScopeÚ	EventType)ÚNoDHCPLeaseError)ÚEphemeralDHCPv4)ÚDataSourceHostnamez3http://metadata.google.internal/computeMetadata/v1/Úmetadata_urlzLhttp://metadata.google.internal/computeMetadata/v1/instance/guest-attributesÚhostkeyszMetadata-FlavorÚGoogleÚens4c                   ó$   • \ rS rSrS rSS jrSrg)ÚGoogleMetadataFetcheré   c                 ó(   • Xl         X l        X0l        g ©N©Úmetadata_addressÚnum_retriesÚsec_between_retries)Úselfr   r   r   s       ÚA/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceGCE.pyÚ__init__ÚGoogleMetadataFetcher.__init__   s   € Ø 0ÔØ&ÔØ#6Õ ó    c                 ó  • S n U R                   U-   nU(       a  US-  n[        R                  " U[        U R                  U R
                  S9nUR                  S:X  aG  U(       a"  [        R                  " UR                  5      nU$ UR                  R                  S5      n U$ [        R                  SXR                  5         U$ ! [        R                   a#  nSn[        R                  X�U5         S nAU$ S nAff = f)Nz/?recursive=True)ÚurlÚheadersÚretriesÚsec_betweenéÈ   úutf-8zurl %s returned code %szurl %s raised exception %s)r   r   ÚreadurlÚHEADERSr   r   Úcoder   Údecode_binaryÚcontentsÚdecodeÚLOGÚdebugÚUrlError)	r   ÚpathÚis_textÚis_recursiveÚvaluer"   ÚrespÚexcÚmsgs	            r   Ú	get_valueÚGoogleMetadataFetcher.get_value$   së   € Øˆð	FØ×'Ñ'¨$Ñ.ˆCÞØÐ)Ñ)�Ü×%Ò%ØÜØ×(Ñ(Ø ×4Ñ4ñ	ˆDð �y‰y˜CÓÞÜ ×.Ò.¨t¯}©}Ó=�Eð
 ˆð !ŸM™M×0Ñ0°Ó9‘Eð ˆô —	‘	Ð3°T¿9¹9ÕEØˆøô ×"Ñ"ó 	&Ø.ˆCÜ�I‰I�c ×%Ð%ð ˆûð	&ús   „A
C ÃC?ÃC:Ã:C?r   N)F)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r8   Ú__static_attributes__© r    r   r   r      s   † ò7÷
r    r   c                   ó¼   • \ rS rSrSrSr\R                  \R                  \R                  10rS rS r\S 5       rS rS rS	 rSS
 jr\S 5       r\S 5       rSrg)ÚDataSourceGCEé>   ÚGCEFc                 ó„  • [         R                  R                  XX#5        S U l        U(       a6  [        R
                  " X5      u  pE[        R                  " U5      u  U l        n[        5       U l        [        R                  " [        R                  " USS/0 5      [        /5      U l        U R                  S   U l        g )NÚ
datasourcerC   r   )r   Ú
DataSourcer   Údefault_userr	   Únormalize_users_groupsÚextract_defaultÚdictÚmetadatar   ÚmergemanydictÚget_cfg_by_pathÚBUILTIN_DS_CONFIGÚds_cfgr   )r   Úsys_cfgÚdistroÚpathsÚusersÚ_groupsÚ_user_configs          r   r   ÚDataSourceGCE.__init__I   s›   € Ü×Ñ×#Ñ# D°6ÔAØ ˆÔÞÜ&×=Ò=¸gÓNÑˆUÜ07×0GÒ0GÈÓ0NÑ-ˆTÔ Ü›ˆŒÜ×(Ò(ä×$Ò$ W¨|¸UÐ.CÀRÓHÜ!ðó
ˆŒð !%§¡¨NÑ ;ˆÕr    c                 óÚ  • U R                  5       n0 nU R                  (       Ga  [        R                  " 5       n[        U;   a+  UR                  [        5        UR                  S[        5        [        R                  SU5        [        U5      S:¼  d   S5       eU Hk  n[        U R                  US9n U    [        U R                  US9n S S S 5        US	   (       d  ME  X@R                  l        [        R                  S
U5          O   U R                  R                   c   [        R#                  SU R$                  5        O[        U R                  US9nUR'                  S	5      (       d`  UR'                  S5      (       a%  [        R#                  UR'                  S5      5        g[        R                  UR'                  S5      5        gUR'                  S5      U l        UR'                  S5      U l        g! [         a+  n[        R                  SUU5         S nAS S S 5        GMŽ  S nAff = f! , (       d  f       GNl= f! [         a    [        R                  SU5         GMÌ  f = f)Nr   z"Looking for the primary NIC in: %sé   z3The instance has to have at least one candidate NIC)Úiface)ÚaddressÚ
url_paramsz,Error fetching IMD with candidate NIC %s: %sz$Unable to obtain a DHCP lease for %sÚsuccesszPrimary NIC found: %s.z(Did not find a fallback interface on %s.Úplatform_reports_gceÚreasonFú	meta-dataú	user-dataT)Úget_url_paramsÚperform_dhcp_setupr   Úfind_candidate_nicsÚDEFAULT_PRIMARY_INTERFACEÚremoveÚinsertr.   r/   Úlenr   rQ   Úread_mdr   Ú	Exceptionr   Úfallback_interfaceÚwarningÚ
cloud_nameÚgetrK   Úuserdata_raw)r   r[   ÚretÚcandidate_nicsÚcandidate_nicÚnetwork_contextÚes          r   Ú	_get_dataÚDataSourceGCE._get_dataX   s  € Ø×(Ñ(Ó*ˆ
ØˆØ×"×"Ð"Ü ×4Ò4Ó6ˆNÜ(¨NÓ:Ø×%Ñ%Ô&?Ô@Ø×%Ñ% aÔ)BÔCÜ�I‰IÐ:¸NÔKä�NÓ# qÓ(ðEàDóEØ(ã!/�Ü"1Ø—K‘KØ'ñ#�ðÚ(ð%Ü")Ø(,×(=Ñ(=Ø+5ñ#™C÷ )ð$ �y—>‘>Ø5B—K‘KÔ2Ü—I‘IÐ6¸ÔFÙñ7 "0ð8 �{‰{×-Ñ-Ñ5Ü—‘Ø>ÀÇÁôøô  $×"7Ñ"7ÀJÑOˆCà�w‰w�y×!Ñ!Ø�w‰wÐ-×.Ñ.Ü—‘˜CŸG™G HÓ-Ô.ð ô —	‘	˜#Ÿ'™' (Ó+Ô,ØØŸ™ Ó,ˆŒØŸG™G KÓ0ˆÔØøô?  )ó %ÜŸI™IØ NØ -Ø !ôó
 %÷ )šûð%ú÷ )žûô (ó Ü—I‘IØ>Àôó ð	úsZ   Â5IÂ7H3Â9G;ÃIÇ;
H0ÈH+ÈH3È IÈ+H0È0H3È3
I	È=IÉIÉ I*É)I*c                 ó   • g r   r?   ©r   s    r   Úlaunch_indexÚDataSourceGCE.launch_index‘   s   € ð r    c                 ó    • U R                   S   $ )Núinstance-id©rK   rw   s    r   Úget_instance_idÚDataSourceGCE.get_instance_id–   s   € Ø�}‰}˜]Ñ+Ð+r    c                 óJ   • U R                   S   n[        XR                  5      $ )Núpublic-keys-data)rK   Ú_parse_public_keysrG   )r   Úpublic_keys_datas     r   Úget_public_ssh_keysÚ!DataSourceGCE.get_public_ssh_keys™   s$   € ØŸ=™=Ð);Ñ<ÐÜ!Ð"2×4EÑ4EÓFÐFr    c                 ó&   • U H  n[        U6   M     g r   )Ú#_write_host_key_to_guest_attributes)r   r   Úkeys      r   Úpublish_host_keysÚDataSourceGCE.publish_host_keys�   s   € ÛˆCÜ/°Ó5ò r    c                 óX   • [        U R                  S   R                  S5      S   S5      $ )Núlocal-hostnameÚ.r   F)r   rK   Úsplit)r   ÚfqdnÚ
resolve_ipÚmetadata_onlys       r   Úget_hostnameÚDataSourceGCE.get_hostname¡   s.   € ä!Ø�M‰MÐ*Ñ+×1Ñ1°#Ó6°qÑ9¸5ó
ð 	
r    c                 ó    • U R                   S   $ )Núavailability-zoner|   rw   s    r   Úavailability_zoneÚDataSourceGCE.availability_zone§   s   € à�}‰}Ð0Ñ1Ð1r    c                 ó@   • U R                   R                  SS5      S   $ )NÚ-rX   r   )r•   Úrsplitrw   s    r   ÚregionÚDataSourceGCE.region«   s    € à×%Ñ%×,Ñ,¨S°!Ó4°QÑ7Ð7r    )rG   rO   rK   r   rn   N)FFF)r:   r;   r<   r=   Údsnamerb   r
   ÚNETWORKr   ÚBOOT_NEW_INSTANCEÚBOOTÚdefault_update_eventsr   rt   Úpropertyrx   r}   rƒ   rˆ   r‘   r•   rš   r>   r?   r    r   rA   rA   >   s�   † à€FØÐà×ÑØ×'Ñ'Ø�N‰Nð
ðÐò<ò7ðr ñó ðò,òGò6ô
ð ñ2ó ð2ð ñ8ó ó8r    rA   c                   ó   • \ rS rSrSrSrg)ÚDataSourceGCELocalé°   Tr?   N)r:   r;   r<   r=   rb   r>   r?   r    r   r£   r£   °   s   † ØÓr    r£   c                 ó  • [         < S[        < SU < 3nUR                  S5      n[        R                  " UU[
        SSS9nUR                  5       (       a  [        R                  SU 5        g [        R                  SU 5        g )NÚ/r'   ÚPUTF)r"   Údatar#   Úrequest_methodÚcheck_statusz&Wrote %s host key to guest attributes.z0Unable to write %s host key to guest attributes.)	ÚGUEST_ATTRIBUTES_URLÚHOSTKEY_NAMESPACEÚencoder   r(   r)   Úokr.   r/   )Úkey_typeÚ	key_valuer"   r5   s       r   r†   r†   ´   si   € ß,×.?ÂÐ
J€CØ× Ñ  Ó)€IÜ×ÒØØÜØØñ€Dð ‡w�w‡y�yÜ�	‰	Ð:¸HÕEä�	‰	ÐDÀhÕOr    c                 óª  •  U R                  S S5      SS  u  pUS:w  a  g [        R                  " U5      nSU;  a  gUS   nSn [
        R
                  R                  XE5      n[
        R
                  R                  [
        R                  R                  5      U:„  $ ! [        [        4 a     gf = f! [         a     gf = f! [         a     gf = f)Né   é   Fz
google-sshÚexpireOnz%Y-%m-%dT%H:%M:%S%z)
r�   Ú
ValueErrorÚAttributeErrorÚjsonÚloadsÚdatetimeÚstrptimeÚnowÚtimezoneÚutc)Ú
public_keyÚschemaÚjson_strÚjson_objÚ
expire_strÚ
format_strÚexpire_times          r   Ú_has_expiredrÅ   Ä   sã   € ðà%×+Ñ+¨D°!Ó4°Q°RÐ8Ñˆð
 �ÓØðÜ—:’:˜hÓ'ˆð
 ˜Ó!Øà˜*Ñ%€JØ&€JðÜ×'Ñ'×0Ñ0°ÓHˆô
 ×Ñ× Ñ ¤×!2Ñ!2×!6Ñ!6Ó7¸+ÑEÐEøô1 œÐ'ó Ùðûô ó Ùðûô ó Ùðús4   ‚B ¡B5 ÁC ÂB2Â1B2Â5
CÃCÃ
CÃCc                 ó  • / nU (       d  U$ U  Hw  nU(       a  [        S U 5       5      (       d  M#  UR                  SS5      n[        U5      S:w  a  MF  Uu  pVUSU4;   d  MT  [        U5      (       a  Mf  UR	                  U5        My     U$ )Nc              3   ó>   #   • U  H  n[        U5      S :  v •  M     g7f)é€   N)Úord)Ú.0Úcs     r   Ú	<genexpr>Ú%_parse_public_keys.<locals>.<genexpr>ï   s   é € Ð$Fº:°a¤S¨£V¨c¦\º:ùs   ‚Ú:rX   r³   Ú	cloudinit)Úallr�   rg   rÅ   Úappend)r‚   rG   Úpublic_keysr¾   Úsplit_public_keyÚuserr‡   s          r   r�   r�   æ   sŠ   € ð
 €KÞØÐÛ&ˆ
Þ¤Ñ$F¹:Ó$F×!FÑ!FÙØ%×+Ñ+¨C°Ó3ÐÜÐÓ  AÓ%ÙØ$‰	ˆØ�K Ð.Õ.´|ÀC×7HÓ7HØ×Ñ˜sÖ#ñ 'ð Ðr    Tc                 ó,  • U c  [         n S S SS S.n[        5       US'   U(       a  US   (       d  SUS'   U$ [        R                  " U 5      (       d   [        R                  SU 5        SU -  US'   U$ / SQn[        XR                  UR                  5      n0 nU HF  u  pxpšnS nU H  nUR                  XÚU5      nUc  M  UnM     U	(       a  Uc  S	nX÷-  US'   Us  $ XÆU'   MH     [        R                  " US
   =(       d    S5      n[        R                  " US   =(       d    S5      nUR                  S5      UR                  S5      /nUR                  SS5      R                  5       nUS:w  aV  UR                  S5      (       d@  UR                  UR                  S5      5        UR                  UR                  S5      5        SR                  U Vs/ s H  nU(       d  M  UPM     sn5      nUR!                  5       US'   US   (       a  US   R#                  S5      S   US'   SU;   aY  US   R%                  S5      nUR                  S5      nUS:X  a  ['        U5      nOU(       a  [        R)                  SU5        UUS'   XcS'   SUS'   U$ s  snf )NF)r_   r`   r\   r^   r]   zNot running on GCE.r^   z%s is not resolvablezaddress "%s" is not resolvable))r{   )zinstance/idTTF)r”   )zinstance/zoneTTF)r‹   )zinstance/hostnameTTF)úinstance-data)zinstance/attributesFFT)úproject-data)zproject/attributesFFTz)required key %s returned nothing. not GCErÖ   z{}r×   ÚsshKeyszssh-keyszblock-project-ssh-keysÚ ÚtrueÚ
r€   r”   r¦   éÿÿÿÿr`   r'   zuser-data-encodingÚbase64z(unknown user-data-encoding: %s, ignoringr_   Tr\   )Ú	MD_V1_URLr]   r   Úis_resolvable_urlr.   r/   r   r   r   r8   r·   r¸   rm   ÚlowerrÑ   ÚjoinÚ
splitlinesr�   r­   r   rk   )rZ   r[   Úplatform_checkro   Úurl_mapÚmetadata_fetcherÚmdÚmkeyrR   Úrequiredr2   r3   r4   r1   Ú	new_valuer7   Úinstance_dataÚproject_dataÚ
valid_keysÚblock_projectr‡   r‚   ÚudÚencodings                           r   rh   rh   ú   s›  € à�Üˆð ØØØñ	€Cô #7Ó"8€CÐÑæ˜cÐ"8×9Ø-ˆˆH‰Øˆ
ô ×!Ò! '×*Ñ*Ü�	‰	Ð(¨'Ô2Ø8¸7ÑBˆˆH‰Øˆ
ò€Gô -Ø×'Ñ'¨×)GÑ)GóÐð 
€Bã8?Ñ4ˆ�X¨ØˆÛˆDØ(×2Ñ2°4À,ÓOˆIØÓ$Ø!’ñ ö ˜™Ø=ˆCØ™JˆC�‰MØŠJØˆ4‹ñ 9@ô —J’J˜r /Ñ2×:°dÓ;€MÜ—:’:˜b Ñ0×8°DÓ9€LØ×#Ñ# IÓ.°×0AÑ0AÀ*Ó0MÐN€JØ!×%Ñ%Ð&>ÀÓC×IÑIÓK€MØ˜Ó }×'8Ñ'8¸×'CÑ'CØ×Ñ˜,×*Ñ*¨:Ó6Ô7Ø×Ñ˜,×*Ñ*¨9Ó5Ô6Ø—y‘y±Ó!C²¨#¼s§#±Ñ!CÓDÐØ-×8Ñ8Ó:€BÐÑà	Ð
×Ø"$Ð%8Ñ"9×"?Ñ"?ÀÓ"DÀRÑ"HˆÐÑà�mÓ#à˜;Ñ'×.Ñ.¨wÓ7ˆØ ×$Ñ$Ð%9Ó:ˆØ�xÓÜ˜2“‰BÞÜ�K‰KÐBÀHÔMØˆˆKÑàˆÑØ€Cˆ	�Nà€Jùò' "Ds   ÇJÇ#Jc                  óô   • [         R                  " S5      =(       d    Sn U S:X  d  U S:X  a  g[         R                  " S5      =(       d    SnUR                  S5      (       a  g[        R	                  SX5        g	)
Nzsystem-product-namezN/AzGoogle Compute Enginer   Tzsystem-serial-numberzGoogleCloud-z6Not running on google cloud. product-name=%s serial=%sF)r   Úread_dmi_dataÚ
startswithr.   r/   )ÚpnameÚserials     r   r]   r]   G  sm   € Ü×ÒÐ3Ó4×=¸€EØÐ'Ó'¨5°HÓ+<Øô ×ÒÐ5Ó6×?¸%€FØ×Ñ˜×(Ñ(Øä‡I�IØ@À%ôð r    c                 ó8   • [         R                  " U [        5      $ r   )r   Úlist_from_dependsÚdatasources)Údependss    r   Úget_datasource_listrù   _  s   € Ü×$Ò$ W¬kÓ:Ð:r    Ú__main__)Ú	b64encodezQuery GCE Metadata Service)Údescriptionz
--endpointÚURLz The url of the metadata service.)ÚmetavarÚhelpÚdefaultz--no-platform-checkrã   zIgnore smbios platform checkÚstore_false)Údestrÿ   Úactionr   )rZ   rã   r`   z/User-data cannot be decoded. Writing as base64
zuser-data-b64rX   )Ú,z: )ÚindentÚ	sort_keysÚ
separatorsr   )NNT)=r¹   r·   ÚloggingrÝ   r   rÏ   r   r   r   r   r   Úcloudinit.distrosr	   Úcloudinit.eventr
   r   Úcloudinit.net.dhcpr   Úcloudinit.net.ephemeralr   Úcloudinit.sourcesr   Ú	getLoggerr:   r.   rÞ   rN   r«   r¬   r)   rd   r   rF   rA   r£   r†   rÅ   r�   rh   r]   ÚDEP_FILESYSTEMÚDEP_NETWORKr÷   rù   ÚargparseÚsysrû   ÚArgumentParserÚparserÚadd_argumentÚ
parse_argsÚargsÚendpointrã   r¨   r-   ÚUnicodeDecodeErrorÚstderrÚwriteÚprintÚdumpsr?   r    r   Ú<module>r     s  ðó
 Û Û Ý ç 9Õ 9Ý %ß 1Ý /Ý 3Ý 0à×Ò˜Ó!€àA€	Ø# YÐ/Ð ð#ð ð Ð Ø˜hÐ
'€Ø"Ð ÷ñ ô@o8�G×&Ñ&ô o8ôd˜ô òPò FôDô(JòZð$ ˜'×0Ñ0Ð2Ð3Ø�W×+Ñ+¨W×-@Ñ-@ÐAÐBð€ò;ð ˆzÓÛÛÝ à×$Ò$Ð1MÑN€FØ
×ÑØØØ/Øð	 ñ ð ×ÑØØØ+ØØð ñ ð ×ÑÓ€DÙ˜4Ÿ=™=¸×9LÑ9LÑM€DØ�dÓð	JØ $ [Ñ 1× 8Ñ 8Ó :ˆD�Ññ 
ˆ$�*Š*�T !¨tÀÑ
LÕMðG øð6 "ó 	JØ�J‰J×ÑØBôð �[Ð!á$-¨d°;Ñ.?Ó$@×$GÑ$GÓ$IˆD�Ó!ð	Jús   ÅE8 Å8A F;Æ:F;