+
    ˜qgjöD  ã                   óô  € R t ^ RIt^ RIt^ RIt^ RIt^ RIt^ RIHtHt ^ RI	H
t
 ^ RIHtHtHtHtHtHtHt ^ RIt^ RIHt ^ RIHt ^ RIHt ^ RIHtHtHtHtHt ^ R	I H!t! ]PD                  ! ]#4      t$R
t%Rt&Rt'RRRRRRRRRRRR/t(R R lt)R3R R llt* ! R R]4      t+ ! R R]4      t, ! R R]4      t-R  R! lt. ! R" R#]P^                  4      t0R4R$ R% llt1R4R& R' llt2 ! R( R)]4      t3 ! R* R+4      t4]&]3Pj                  3R, R- llt6]0]Pn                  33.t8R. t9]#R/8X  dU   ^ RI:t:R0t;]:Px                  ! ];R17      t=]=P}                  4        ]?! ]P€                  ! ]6! ]3Pj                  R27      4      4       R# R# )5a•  Datasource for LXD, reads /dev/lxd/sock representation of instance data.

Notes:
 * This datasource replaces previous NoCloud datasource for LXD.
 * Older LXD images may not have updates for cloud-init so NoCloud may
   still be detected on those images.
 * Detect LXD datasource when /dev/lxd/sock is an active socket file.
 * Info on dev-lxd API: https://documentation.ubuntu.com/lxd/en/latest/dev-lxd/
N)ÚFlagÚauto)ÚJSONDecodeError)ÚAnyÚDictÚListÚOptionalÚTupleÚUnionÚcast)ÚHTTPAdapter)ÚHTTPConnection)ÚHTTPConnectionPool)Úatomic_helperÚsourcesÚsubpÚ
url_helperÚutil)Úfind_fallback_nicz/dev/lxd/sockz1.0z
http://lxdúcloud-init.user-dataú	user-datazcloud-init.network-configúnetwork-configúcloud-init.vendor-dataúvendor-dataúuser.user-datazuser.network-configúuser.vendor-datac                ó$   € V ^8„  d   QhR\         /# ©é   Úreturn©Ústr)Úformats   "ÚA/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceLXD.pyÚ__annotate__r$   /   s   € ÷ ñ ¤cñ ó    c                  ó‚  € R p \         P                  ! R4      '       dg    \         P                   ! R.4      w  rTP                  4       R
9   d8   \        P                  ! 4       R,          ^,          pTR8X  d   R# TR8X  d   R# R	# V #   \         P                   d#   p\        P	                  RT4       T u Rp?# Rp?ii ; i)Úeth0zsystemd-detect-virtzHUnable to run systemd-detect-virt: %s. Rendering default network config.NÚunameÚppc64leÚenp0s5Ús390xÚenc9Úenp5s0)ÚkvmÚqemu)r   ÚwhichÚProcessExecutionErrorÚLOGÚwarningÚstripr   Úsystem_info)Údefault_nameÚ	virt_typeÚ_ÚerrÚarchs        r#   Ú_get_fallback_interface_namer;   /   s²   € Ø€LÜ‡z‚zÐ'×(Ò(ð	 ÜŸ9š9Ð&;Ð%<Ó=‰LˆIð �?‰?Óð !
ô 
ô ×#Ò#Ó% gÕ.¨qÕ1ˆDØ�yÔ ÙØ˜”ÙáØÐøô% ×)Ñ)ô 	 Ü�K‰Kð5àôð
  Õûð	 ús    B ÂB>ÂB9Â3B>Â9B>c                ó~   € V ^8„  d   QhR\         \        \        ,          ,          R\        \        \        3,          /# )r   Únicsr   )r   r   r!   r   r   )r"   s   "r#   r$   r$   I   s-   € ÷ #ñ #Ü
”4œ•9Õ
ð#ä	Œ#Œsˆ(…^ñ#r%   c                ó¸   € \        4       pV'       d   \        P                  RV4       M \        4       p\        P                  RV4       R^RRRRVRRR	R
R/././# )zCReturn network config V1 dict representing instance network config.zCLXD datasource generating network from discovered active device: %szVLXD datasource generating network from systemd-detect-virt platform default device: %sÚversionÚconfigÚtypeÚphysicalÚnameÚsubnetsÚdhcpÚcontrolr   )r   r2   Údebugr;   )r=   Úprimary_nics   & r#   Úgenerate_network_configrI   I   sz   € ô $Ó%€KßÜ�	‰	ðàõ	
ô 3Ó4ˆÜ�	‰	ð+àô	
ð 	�1Øà˜
Ø˜Ø˜V V¨Y¸Ð?Ð@ðð
ð	ð 	r%   c                   ó8   a a€ ] tR t^ot oV 3R ltR tRtVtV ;t# )ÚSocketHTTPConnectionc                ó@   <€ \         SV `  R 4       Wn        RV n        R# ©Ú	localhostN)ÚsuperÚ__init__Úsocket_pathÚsock©ÚselfrQ   Ú	__class__s   &&€r#   rP   ÚSocketHTTPConnection.__init__p   s   ø€ Ü‰Ñ˜Ô%Ø&ÔØˆŽ	r%   c                óÀ   € \         P                   ! \         P                  \         P                  4      V n        V P                  P	                  V P
                  4       R # ©N)ÚsocketÚAF_UNIXÚSOCK_STREAMrR   ÚconnectrQ   ©rT   s   &r#   r\   ÚSocketHTTPConnection.connectu   s6   € Ü—M’M¤&§.¡.´&×2DÑ2DÓEˆŒ	Ø�	‰	×Ñ˜$×*Ñ*Ö+r%   )rR   rQ   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rP   r\   Ú__static_attributes__Ú__classdictcell__Ú__classcell__©rU   Ú__classdict__s   @@r#   rK   rK   o   s   ù‡ € õ÷
,ò ,r%   rK   c                   ó8   a a€ ] tR t^zt oV 3R ltR tRtVtV ;t# )ÚSocketConnectionPoolc                ó2   <€ Wn         \        SV `	  R 4       R# rM   )rQ   rO   rP   rS   s   &&€r#   rP   ÚSocketConnectionPool.__init__{   s   ø€ Ø&ÔÜ‰Ñ˜Ö%r%   c                ó,   € \        V P                  4      # rX   )rK   rQ   r]   s   &r#   Ú	_new_connÚSocketConnectionPool._new_conn   s   € Ü# D×$4Ñ$4Ó5Ð5r%   )rQ   )	r_   r`   ra   rb   rP   rm   rc   rd   re   rf   s   @@r#   ri   ri   z   s   ù‡ € õ&÷6ò 6r%   ri   c                   ó4   a € ] tR t^ƒt o RR ltRR ltRtV tR# )ÚLXDSocketAdapterNc                ó    € \        \        4      # rX   )ri   ÚLXD_SOCKET_PATH)rT   ÚurlÚproxiess   &&&r#   Úget_connectionÚLXDSocketAdapter.get_connection„   s   € Ü#¤OÓ4Ð4r%   c                ó:   € V P                  VP                  V4      # rX   )ru   rs   )rT   ÚrequestÚverifyrt   Úcerts   &&&&&r#   Úget_connection_with_tls_contextÚ0LXDSocketAdapter.get_connection_with_tls_context‰   s   € ð ×"Ñ" 7§;¡;°Ó8Ð8r%   © rX   )NN)r_   r`   ra   rb   ru   r{   rc   rd   ©rg   s   @r#   rp   rp   ƒ   s   ø‡ € ô5÷
9ò 9r%   rp   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Úmetadata_typer   )r!   Údict)r"   s   "r#   r$   r$   �   s   € ÷ ñ ¬cð Ädñ r%   c                ó8  € \        V\        4      '       d   V# Vf   / #  \        P                  ! V4      pTf'   \
        P                  ! RP                  YR7      4      hT#   \         d-   p\
        P                  ! RP                  YR7      4      ThRp?ii ; i)a"  Convert raw instance data from str, bytes, YAML to dict

:param metadata_type: string, one of as: meta-data, vendor-data, user-data
    network-config

:param metadata_value: str, bytes or dict representing or instance-data.

:raises: InvalidMetaDataError on invalid instance-data content.
NzAInvalid {md_type}. Expected str, bytes or dict but found: {value})Úmd_typeÚvaluez:Invalid {md_type} format. Expected YAML but found: {value})Ú
isinstancer�   r   Ú	load_yamlÚAttributeErrorr   ÚInvalidMetaDataExceptionr"   )r€   Úmetadata_valueÚparsed_metadataÚexcs   &&  r#   Ú_raw_instance_data_to_dictrŒ   �   s¤   € ô �.¤$×'Ò'ØÐØÒØˆ	ðÜŸ.š.¨Ó8ˆð ÒÜ×.Ò.ðß‘v m�vÓJó
ð 	
ð Ðøô ô Ü×.Ò.ðß‘v m�vÓJó
ð ð	ûðús    A" Á"BÁ-'BÂBc                   ó*  a a€ ] tR t^¬t oRt]P                  t]P                  t]P                  P                  R,           t
RtV3R lV 3R llt]V3R lR l4       tV3R lR ltV3R	 lR
 ltV3R lR lt]V3R lR l4       tV3R ltRtVtV ;t# )ÚDataSourceLXDÚLXDTc                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Úci_pkl_versionr   N)Úint)r"   rg   s   "€r#   r$   ÚDataSourceLXD.__annotate__À   s   ø€ ÷ (ñ (©ð (°ñ (r%   c                ó4   <€ \         SV `  V4       R V n        R# )TN)rO   Ú	_unpickleÚskip_hotplug_detect)rT   r‘   rU   s   &&€r#   r•   ÚDataSourceLXD._unpickleÀ   s   ø€ Ü‰Ñ˜.Ô)Ø#'ˆÖ r%   c                ó    <€ V ^8„  d   QhRS[ /# r   ©Úbool)r"   rg   s   "€r#   r$   r“   Å   s   ø€ ÷ ñ ‘tñ r%   c                 óD  € \         P                  P                  \        4      '       g   \        P                  R\        4       R# \        P                  ! \         P                  ! \        4      P                  4      '       g   \        P                  R\        4       R# R# )z@Check platform environment to report if this datasource may run.z%s does not exist.Fz%s is not a socketT)
ÚosÚpathÚexistsrr   r2   r3   ÚstatÚS_ISSOCKÚlstatÚst_moder}   r%   r#   Ú	ds_detectÚDataSourceLXD.ds_detectÄ   s\   € ô �w‰w�~‰~œo×.Ò.Ü�K‰KÐ,¬oÔ>ÙÜ—’œrŸxšx¬Ó8×@Ñ@×AÒAÜ�K‰KÐ,¬oÔ>ÙÙr%   c                ó    <€ V ^8„  d   QhRS[ /# r   r™   )r"   rg   s   "€r#   r$   r“   Ï   s   ø€ ÷ ñ ™4ñ r%   c                ó8  € \        4       V n        \        RV P                  P                  R4      4      V n        V P                  P                  R/ 4      pVP                  R/ 4      pV'       d&   V P                  P                  \        RV4      4       RV P                  9   d   V P                  R,          V n        RV P                  9   d#   \        RV P                  R,          4      V n        RV P                  9   d   V P                  R,          V n        R# )z=Crawl LXD socket API instance data and return True on successú	meta-datar@   úuser.meta-datar   r   r   T)	Úread_metadataÚ_crawled_metadatarŒ   ÚgetÚmetadataÚupdateÚuserdata_rawÚ_network_configÚvendordata_raw)rT   r@   Úuser_metadatas   &  r#   Ú	_get_dataÚDataSourceLXD._get_dataÏ   sî   € ä!.£ˆÔÜ2Ø˜×/Ñ/×3Ñ3°KÓ@ó
ˆŒð ×'Ñ'×+Ñ+¨H°bÓ9ˆØŸ
™
Ð#3°RÓ8ˆßØ�M‰M× Ñ Ü*Ð+;¸]ÓKôð ˜$×0Ñ0Ô0Ø $× 6Ñ 6°{Õ CˆDÔØ˜t×5Ñ5Ô5Ü#=Ø  $×"8Ñ"8Ð9IÕ"Jó$ˆDÔ ð ˜D×2Ñ2Ô2Ø"&×"8Ñ"8¸Õ"GˆDÔÙr%   c                ó    <€ V ^8„  d   QhRS[ /# r   r    )r"   rg   s   "€r#   r$   r“   å   s   ø€ ÷ 
ñ 
¡#ñ 
r%   c                ó8   € RP                  \        \        R7      # )z.Return subplatform details for this datasourcez"LXD socket API v. {ver} ({socket}))ÚverrY   )r"   ÚLXD_SOCKET_API_VERSIONrr   r]   s   &r#   Ú_get_subplatformÚDataSourceLXD._get_subplatformå   s   € à3×:Ñ:Ü&¬ð ;ó 
ð 	
r%   c                ó    <€ V ^8„  d   QhRS[ /# r   r    )r"   rg   s   "€r#   r$   r“   ë   s   ø€ ÷ Iñ I©Cñ Ir%   c                ó  € \        \        P                  R7      pVP                  R/ 4      p\	        V\
        4      '       g   \        P                  ! V4      pVP                  R4      V P                  P                  R4      8H  # )z%Return True if instance_id unchanged.©Úmetadata_keysr§   zinstance-id)	r©   ÚMetaDataKeysÚ	META_DATAr«   r…   r�   r   r†   r¬   )rT   Úsys_cfgÚresponseÚmds   &&  r#   Úcheck_instance_idÚDataSourceLXD.check_instance_idë   s`   € ä ¬|×/EÑ/EÔFˆØ�\‰\˜+ rÓ*ˆÜ˜"œd×#Ò#Ü—’ Ó#ˆBØ�v‰v�mÓ$¨¯©×(9Ñ(9¸-Ó(HÑHÐHr%   c                ó    <€ V ^8„  d   QhRS[ /# r   )r�   )r"   rg   s   "€r#   r$   r“   ô   s   ø€ ÷ 0ñ 0¡ñ 0r%   c                ó.  € V P                   \        P                  8X  Ed   V P                  \        P                  8X  d   V P	                  4        \        V P                  \        4      '       dÅ   V P                  P                  R4      '       d/   \        P                  R4       V P                  R,          V n         MuV P                  P                  R4      '       dU   V P                  R,          P                  4        UUu. uF  w  rVR,          R8X  g   K  VNK  	  ppp\        V4      V n         V P                   \        P                  8X  d%   \        P                  R4       \        4       V n         \        \        V P                   4      # u uppi )z~Network config read from LXD socket config/user.network-config.

If none is present, then we generate fallback configuration.
r   z,LXD datasource using provided network configÚdevicesrA   Únicz8LXD datasource generating network config using fallback.)r¯   r   ÚUNSETrª   r²   r…   r�   r«   r2   rG   ÚitemsrI   r   )rT   ÚkÚvrÇ   s   &   r#   Únetwork_configÚDataSourceLXD.network_configó   s5  € ð ×Ñ¤7§=¡=Õ0Ø×%Ñ%¬¯©Ô6Ø—‘Ô Ü˜$×0Ñ0´$×7Ò7Ø×)Ñ)×-Ñ-Ð.>×?Ò?Ü—I‘IÐLÔMØ+/×+AÑ+AØ(õ,�DÕ(ð ×+Ñ+×/Ñ/°	×:Ò:ð
 %)×$:Ñ$:¸9Õ$E×$KÑ$KÔ$Mô*á$M™D˜AØ˜V�9¨Ñ-÷ ˜Ù$Mð ñ *ô
 ,CÀ7Ó+K�DÔ(Ø×Ñ¤7§=¡=Ô0ä�I‰IØJôô $;Ó#<ˆDÔ ä”D˜$×.Ñ.Ó/Ð/ùó*s   ÄFÄFc                óŽ   <€ V ^8„  d   Qh/ S[ S[S[3,          ;R&   S[S[ S[S[3,          ,          ;R&   S[S[R3,          ;R&   # )r   r¯   rª   .Úsensitive_metadata_keys)r
   r   r!   r   r	   )r"   rg   s   "€r#   r$   r“   ¬   sM   ø‡ ‚ ñ ™4¡˜9Õ%Ñ5ñ	 ñ
  ¡¡d©C iÕ 0Õ1ÑAñ ñ #¡3¨ 8�_ñ 	ò r%   )rª   r¯   r¬   r–   r®   r°   )r¨   r   r   r   r   )r_   r`   ra   rb   Údsnamer   rÉ   r¯   rª   Ú
DataSourcerÐ   r–   r•   Ústaticmethodr£   r²   r¸   rÃ   ÚpropertyrÍ   Ú__annotate_func__rc   rd   re   rf   s   @@r#   rŽ   rŽ   ¬   sŸ   ù‡ € à€Fà(/¯©€OØ4;·M±MÐð 	×Ñ×2Ñ2ð
õ	
ð ð Ð÷(ó (ð ÷ó ð÷ð ÷,
ð 
÷Ið Ið ÷0ó ð0÷Q … r%   rŽ   c                óP   € V ^8„  d   QhR\         P                  R\        R\        /# )r   Úsessionrs   Údo_raise)ÚrequestsÚSessionr!   rš   )r"   s   "r#   r$   r$     s*   € ÷ ñ Ü×ÑðÜ$'ðÜ37ñr%   c           	      ó€  € \        WV4      pVP                  '       g>   \        P                  R VVP                  VP
                  P                  R4      4       / #  VP                  4       #   \         dF   p\        P                  ! RP                  YP
                  P                  R4      R7      4      ThRp?ii ; i)úSkipping %s on [HTTP:%d]:%súutf-8zFUnable to process LXD config at {url}. Expected JSON but found: {resp})rs   ÚrespN)Ú_do_requestÚokr2   rG   Ústatus_codeÚcontentÚdecodeÚjsonr   r   rˆ   r"   )r×   rs   rØ   Úurl_responser‹   s   &&&  r#   Ú_get_json_responseræ     s³   € ô ˜w¨XÓ6€LØ�?�?ˆ?Ü�	‰	Ø)ØØ×$Ñ$Ø× Ñ ×'Ñ'¨Ó0ô		
ð ˆ	ðØ× Ñ Ó"Ð"øÜô Ü×.Ò.ð/ß/5©vØ×2Ñ2×9Ñ9¸'ÓBð 06ó 0ó
ð
 ð	ûðús   ÁA- Á-B=Á8A B8Â8B=c                óp   € V ^8„  d   QhR\         P                  R\        R\        R\         P                  /# )r   r×   rs   rØ   r   )rÙ   rÚ   r!   rš   ÚResponse)r"   s   "r#   r$   r$   ,  s8   € ÷ ñ Ü×ÑðÜ$'ðÜ37ðä×Ññr%   c           	      óò  € \        ^^ R4       F_  pV P                  V4      pRVP                  8X  d;   \        P                  ! R4       \
        P                  RVP                  VV4       K_   M	  \
        P                  RXP                  V4       V'       d^   VP                  '       gL   \        P                  ! RP                  VP                  VVP                  P                  R4      R7      4      hV# )	é   iô  gš™™™™™¹?z,[GET] [HTTP:%d] %s, retrying %d more time(s)z[GET] [HTTP:%d] %sz3Invalid HTTP response [{code}] from {route}: {resp}rÝ   )ÚcodeÚrouterÞ   éÿÿÿÿ)Úranger«   rá   ÚtimeÚsleepr2   r3   rG   rà   r   rˆ   r"   râ   rã   )r×   rs   rØ   ÚretriesrÁ   s   &&&  r#   rß   rß   ,  sÕ   € ô ˜˜Q Ö#ˆØ—;‘;˜sÓ#ˆØ�(×&Ñ&Ô&ô �JŠJ�sŒOÜ�K‰KØ>Ø×$Ñ$ØØö	ñ ñ $ô ‡I�IÐ" H×$8Ñ$8¸#Ô>ß˜ŸŸ˜Ü×.Ò.ØA×HÑHØ×)Ñ)ØØ×%Ñ%×,Ñ,¨WÓ5ð Ió ó
ð 	
ð €Or%   c                   ón   € ] tR tRt]! 4       t]! 4       t]! 4       t]! 4       t]],          ],          t	Rt
R# )r¾   iI  r}   N)r_   r`   ra   rb   r   ÚNONEÚCONFIGÚDEVICESr¿   ÚALLrc   r}   r%   r#   r¾   r¾   I  s-   † Ù‹6€DÙ‹V€FÙ‹f€GÙ“€IØ
�7Õ
˜YÕ
&„Cr%   r¾   c                   ó\   a € ] tR tRt o ]3V 3R lR lltV 3R lR ltV 3R lR ltRtV t	R	# )
Ú_MetaDataReaderiQ  c                ó    <€ V ^8„  d   QhRS[ /# )r   Úapi_versionr    )r"   rg   s   "€r#   r$   Ú_MetaDataReader.__annotate__R  s   ø€ ÷ Nñ N¡Cñ Nr%   c                óf   € Wn         \        P                  ! \        V P                   4      V n        R # rX   )rú   r   Úcombine_urlÚLXD_URLÚ_version_url)rT   rú   s   &&r#   rP   Ú_MetaDataReader.__init__R  s#   € Ø&ÔÜ&×2Ò2´7¸D×<LÑ<LÓMˆÖr%   c                ó:   <€ V ^8„  d   QhRS[ P                  RS[/# )r   r×   r   )rÙ   rÚ   r�   )r"   rg   s   "€r#   r$   rû   V  s!   ø€ ÷ 4ñ 4¡x×'7Ñ'7ð 4¹Dñ 4r%   c           
     ór  € R/ /p\         P                  ! V P                  R4      p\        W4      p\	        V4       F÷  p\         P                  ! \
        V4      p\        WRR7      pVP                  P                  R4      pVP                  '       g%   \        P                  RVVP                  V4       K|  VP                  R4      R
,          p	W‚R,          V	&   V	\        9   g   K¬  \        V	,          V9  d   W‚\        V	,          &   KÏ  \        P                  RV	V	P!                  RR	^4      4       Kù  	  V# )ab  Iterate on LXD API config items. Promoting CONFIG_KEY_ALIASES

Any CONFIG_KEY_ALIASES which affect cloud-init behavior are promoted
as top-level configuration keys: user-data, network-data, vendor-data.

LXD's cloud-init.* config keys override any user.* config keys.
Log debug messages if any user.* keys are overridden by the related
cloud-init.* key.
r@   F©rØ   rÝ   rÜ   Ú/z,Ignoring LXD config %s in favor of %s value.Úuserz
cloud-initrí   )r   rý   rÿ   ræ   Úsortedrþ   rß   râ   rã   rà   r2   rG   rá   Ú
rpartitionÚCONFIG_KEY_ALIASESr3   Úreplace)
rT   r×   r@   Ú
config_urlÚconfig_routesÚconfig_routeÚconfig_route_urlÚconfig_route_responseÚresponse_textÚcfg_keys
   &&        r#   Ú_process_configÚ_MetaDataReader._process_configV  s   € ð ! "�~ˆÜ×+Ò+¨D×,=Ñ,=¸xÓHˆ
ô +¨7Ó?ˆô
 # =Ö1ˆLÜ)×5Ò5´g¸|ÓLÐÜ$/Ø°Eô%Ð!ð 2×9Ñ9×@Ñ@ÀÓIˆMØ(×+×+Ð+Ü—	‘	Ø1Ø$Ø)×5Ñ5Ø!ô	ñ à"×-Ñ-¨cÓ2°2Õ6ˆGð )6�8Õ˜WÑ%àÔ,Ö,ô & gÕ.°fÔ<Ø:GÔ-¨gÕ6Ó7ä—K‘KØFØØŸ™¨°¸aÓ@öñ9 2ðB ˆr%   c                ó&   <€ V ^8„  d   QhRS[ RS[/# )r   r½   r   )r¾   r�   )r"   rg   s   "€r#   r$   rû   Œ  s   ø€ ÷ ñ ©ð ¹$ñ r%   c               ó¤  € \         P                  ! 4       ;_uu_ 4       pVP                  V P                  \	        4       4       R V P
                  /p\        P                  V9   dI   \        P                  ! V P                  R4      p\        W$4      P                  P                  R4      VR&   \        P                  V9   d!   VP                  V P                  V4      4       \        P                   V9   d;   \        P                  ! V P                  R4      p\#        W%RR7      pV'       d   WcR&   VuuRRR4       #   + '       g   i     R# ; i)Ú_metadata_api_versionr§   rÝ   rÇ   Fr  N)rÙ   rÚ   Úmountrÿ   rp   rú   r¾   r¿   r   rý   rß   râ   rã   rô   r­   r  rõ   ræ   )rT   r½   r×   rÂ   Úmd_routers   rÇ   s   &$     r#   Ú__call__Ú_MetaDataReader.__call__Œ  sü   € Ü×Ò×Ô 7Ø�M‰M˜$×+Ñ+Ô-=Ó-?Ô@à/°×1AÑ1AÐBˆBÜ×%Ñ%¨Ô6Ü%×1Ò1Ø×%Ñ% {ó�ô #.Øó#ç‘'Ÿ&™& ›/ð �;‘ô ×"Ñ" mÔ3Ø—	‘	˜$×.Ñ.¨wÓ7Ô8Ü×#Ñ# }Ô4Ü ×,Ò,¨T×->Ñ->À	ÓJ�Ü,¨WÀEÔJ�ßØ$+�y‘MØ÷%  ××Óús   žDD>Ä>E	)rÿ   rú   N)
r_   r`   ra   rb   r·   rP   r  r  rc   rd   r~   s   @r#   rø   rø   Q  s)   ø‡ € Ø*@÷ Nò N÷4ð 4÷lö r%   rø   c                ó<   € V ^8„  d   QhR\         R\        R\        /# )r   rú   r½   r   )r!   r¾   r�   )r"   s   "r#   r$   r$   ¢  s&   € ÷ %ñ %Üð%äð%ô 
ñ%r%   c                ó(   € \        V R7      ! VR7      # )aÏ  Fetch metadata from the /dev/lxd/socket routes.

Perform a number of HTTP GETs on known routes on the devlxd socket API.
Minimally all containers must respond to <LXD_SOCKET_API_VERSION>/meta-data
when the LXD configuration setting `security.devlxd` is true.

When `security.devlxd` is false, no /dev/lxd/socket file exists. This
datasource will return False from `ds_detect` in that case.

Perform a GET of <LXD_SOCKET_API_VERSION>/config` and walk all `user.*`
configuration keys, storing all keys and values under a dict key
    LXD_SOCKET_API_VERSION: config {...}.

In the presence of the following optional user config keys,
create top level aliases:
  - user.user-data -> user-data
  - user.vendor-data -> vendor-data
  - user.network-config -> network-config

:param api_version:
    LXD API version to operated with.
:param metadata_keys:
    Instance of `MetaDataKeys` indicating what keys to fetch.
:return:
    A dict with the following optional keys: meta-data, user-data,
    vendor-data, network-config, network_mode, devices.

    Below <LXD_SOCKET_API_VERSION> is a dict representation of all raw
    configuration keys and values provided to the container surfaced by
    the socket under the /1.0/config/ route.
)rú   r¼   )rø   )rú   r½   s   &&r#   r©   r©   ¢  s   € ôF  {Õ3Ø#ôð r%   c                 ó8   € \         P                  ! V \        4      # rX   )r   Úlist_from_dependsÚdatasources)Údependss   &r#   Úget_datasource_listr   Ñ  s   € Ü×$Ò$ W¬kÓ:Ð:r%   Ú__main__z*Query LXD metadata and emit a JSON object.)Údescriptionr¼   rX   )T)AÚ__doc__Úloggingrœ   rY   rŸ   rï   Úenumr   r   Újson.decoderr   Útypingr   r   r   r   r	   r
   r   rÙ   Úrequests.adaptersr   Úurllib3.connectionr   Úurllib3.connectionpoolr   Ú	cloudinitr   r   r   r   r   Úcloudinit.netr   Ú	getLoggerr_   r2   rr   r·   rþ   r  r;   rI   rK   ri   rp   rŒ   rÒ   rŽ   ræ   rß   r¾   rø   rö   r©   ÚDEP_FILESYSTEMr  r   Úargparser"  ÚArgumentParserÚparserÚ
parse_argsÚprintÚ
json_dumpsr}   r%   r#   Ú<module>r5     s  ðñó Û 	Û Û Û ß Ý (ß @× @Ñ @ã Ý )õ .Ý 5ç DÕ DÝ +à×Ò˜Ó!€à!€ØÐ Ø
€ð ˜KØÐ!1Ø˜mØ�kØÐ+Ø˜ðÐ õ÷4#ôL,˜>ô ,ô6Ð-ô 6ô	9�{ô 	9õô:f0�G×&Ñ&ô f0÷R÷.ô:'�4ô '÷Nñ Nðd .Ø".×"2Ñ"2÷%ðT �W×+Ñ+Ð-Ð.ð€ò;ð ˆzÔÛàB€KØ×$Ò$°Ô=€FØ
×ÑÔÙ	Ø× Ò ¡¸\×=MÑ=MÔ!NÓOöñ r%   