+
    ˜qgjÍ(  ã                   ó”  € ^ RI t ^ RIt^ RIHtHtHtHt ^ RIHtH	t	 ^ RI
Ht ^ RIHt ^ RIHt ^ RIHt ] P&                  ! ]4      tRtR	]/tR
tRt]].tRtRtRtRt]t]]]]].,          t ! R R]P@                  ]PB                  4      t" ! R R]"4      t#RR lt$]#]PJ                  33]"]PJ                  ]PL                  33.t'R t(R# )é    N)ÚdmiÚsourcesÚ
url_helperÚutil)Ú
EventScopeÚ	EventType)ÚNoDHCPLeaseError)ÚEphemeralDHCPv4)ÚDataSourceOracle)Ú	openstackziid-dsopenstackzinstance-idzOpenStack NovazOpenStack ComputeÚOpenTelekomCloudzSAP CCloud VMÚHUAWEICLOUDzSamsung Cloud Platformc                   óú   a a€ ] tR t^,t oRt]P                  tRt]	P                  ]P                  ]P                  ]P                  ]P                  0/tV 3R ltR tR tR t]R 4       tR tR	 tR
 tRtVtV ;t# )ÚDataSourceOpenStackÚ	OpenStackFc                óø   <€ \         \        V `  WV4       R V n        \        P
                  ! V P                  4      V n        R V n        / V n	        \        P                  V n        \        P                  V n        R # ©N)Úsuperr   Ú__init__Úmetadata_addressr   Úfetch_ssl_detailsÚpathsÚssl_detailsÚversionÚfilesr   ÚUNSETÚec2_metadataÚnetwork_json)ÚselfÚsys_cfgÚdistror   Ú	__class__s   &&&&€ÚG/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenStack.pyr   ÚDataSourceOpenStack.__init__>   sZ   ø€ ÜÔ! 4Ñ1°'À5ÔIØ $ˆÔÜ×1Ò1°$·*±*Ó=ˆÔØˆŒØˆŒ
Ü#ŸM™MˆÔÜ#ŸM™MˆÖó    c                óˆ   € \         P                  P                  V 4      pV: R V P                  : RV P                  : R2pV# )z [z,ver=Ú])r   Ú
DataSourceÚ__str__Údsmoder   )r   ÚrootÚmstrs   &  r#   r)   ÚDataSourceOpenStack.__str__G   s1   € Ü×!Ñ!×)Ñ)¨$Ó/ˆÛ#'¨¯¬°d·l´lÐCˆØˆr%   c           	     ó  € R P                  V P                  P                  R7      R.pV P                  P	                  RV4      pV Uu. uF#  p\
        P                  ! V4      '       g   K!  VNK%  	  pp\        V4      \        V4      8w  d9   \        P                  R\        \        V4      \        V4      ,
          4      4       \        V4      '       d   TpM\        P                  R4       Tp. p/ pV F/  p\        P                  ! VR4      pVP                  V4       WvV&   K1  	  V P!                  4       p	\"        P$                  ! 4       p
\        P&                  ! VV	P(                  V	P*                  RR7      w  r¼V'       d   \        P                  R	Wk,          4       M:\        P                  R
V\-        \"        P$                  ! 4       V
,
          4      4       VP	                  V4      V n        \1        V4      # u upi )z"http://[fe80::a9fe:a9fe%25{iface}])Úifacezhttp://169.254.169.254Úmetadata_urlsz,Removed the following from metadata urls: %sz+Empty metadata url list! using default listr   F)ÚurlsÚmax_waitÚtimeoutÚconnect_synchronouslyzUsing metadata source: '%s'z2Giving up on OpenStack md from %s after %s seconds)Úformatr!   Úfallback_interfaceÚds_cfgÚgetr   Úis_resolvable_urlÚsetÚLOGÚdebugÚlistÚlenÚwarningr   Úcombine_urlÚappendÚget_url_paramsÚtimeÚ	monotonicÚwait_for_urlÚmax_wait_secondsÚtimeout_secondsÚintr   Úbool)r   ÚDEF_MD_URLSr1   ÚxÚfilteredÚmd_urlsÚurl2baseÚurlÚmd_urlÚ
url_paramsÚ
start_timeÚ	avail_urlÚ	_responses   &            r#   Úwait_for_metadata_serviceÚ-DataSourceOpenStack.wait_for_metadata_serviceL   sŸ  € à0×7Ñ7Ø—k‘k×4Ñ4ð 8ó ð %ð	
ˆð �{‰{�‰˜°Ó<ˆÙ#ÓA™t˜!¤t×'=Ò'=¸a×'@—A�A™tˆÐAÜˆx‹=œC ›IÔ%Ü�I‰IØ>Ü”c˜$“i¤# h£-Õ/Ó1ôô ˆx�=Š=Ø‰Dä�K‰KÐEÔFØˆDàˆØˆÛˆCÜ×+Ò+¨C°Ó=ˆFØ�N‰N˜6Ô"Ø"�VÓñ ð
 ×(Ñ(Ó*ˆ
Ü—^’^Ó%ˆ
Ü)×6Ò6ØØ×0Ñ0Ø×.Ñ.Ø"'ô	 
Ñˆ	÷ Ü�I‰IÐ3°XÕ5HÕIä�I‰IØDØÜ”D—N’NÓ$ zÕ1Ó2ôð !)§¡¨YÓ 7ˆÔÜ�I‹ÐùòK Bs   Á	G>Á,G>c                óJ   € \         P                  ! V P                  4       4      # r   )r   Úinstance_id_matches_system_uuidÚget_instance_id)r   r    s   &&r#   Úcheck_instance_idÚ%DataSourceOpenStack.check_instance_id{   s   € ä×6Ò6°t×7KÑ7KÓ7MÓNÐNr%   c                óæ  € V P                   \        P                  8w  d   V P                   # \        P                  ! V P
                  P                  RR4      4      '       d   RV n         V P                   # V P                  \        P                  8X  d   \        P                  R4       R# \        P                  R4       \        P                  ! V P                  RR7      V n         V P                   # )z@Return a network config dict for rendering ENI or netplan files.Úapply_network_configTNz<Unexpected call to network_config when network_json is None.z(network config provided via network_json)Ú
known_macs)Ú_network_configr   r   r   Úis_falser7   r8   r   r;   r?   r<   r   Úconvert_net_json)r   s   &r#   Únetwork_configÚ"DataSourceOpenStack.network_config   s¶   € ð ×Ñ¤7§=¡=Ô0Ø×'Ñ'Ð'ô
 �=Š=˜Ÿ™Ÿ™Ð)?ÀÓF×GÒGØ#'ˆDÔ Ø×'Ñ'Ð'Ø×Ñ¤§¡Ô-ä�K‰KØNôñ ä�	‰	Ð<Ô=Ü(×9Ò9Ø×Ñ¨$ô 
ˆÔð ×#Ñ#Ð#r%   c                ó®  € V P                   '       dN    \        V P                  V P                  P                  4      ;_uu_ 4        V P	                  4       pRRR4       M V P	                  4       pV P                  XP                  R4      .4      V n        V P                  \        P                  8X  d   R# VP                  R/ 4      p\        P                   ! V\"        .4      pW0n        VP                  R4      V n        VP                  R4      V n        VP                  R4      V n        VR,          V n        V P.                  P1                  VP                  R	/ 4      4       VP                  R
4      p \        P2                  ! V4      V n        VP                  R4      p \        P2                  ! V4      V n        R#   + '       g   i     ELc; i  \
        \        P                  3 d0   p\        P                  ! \        \        T4      4        Rp?R# Rp?ii ; i  \        P                   d0   p\        P                  ! \        \        T4      4        Rp?R# Rp?ii ; i  \6         d)   p\        P9                  RT4       RT n         Rp?ELRp?ii ; i  \6         d)   p\        P9                  RT4       RT n         Rp?R# Rp?ii ; i)zíCrawl metadata, parse and persist that data for this instance.

@return: True when metadata discovered indicates OpenStack datasource.
    False when unable to contact metadata service or when metadata
    format is invalid or disabled.
NFr*   Úmetadatazec2-metadataÚnetworkdataÚuserdatar   r   Ú
vendordataz"Invalid content in vendor-data: %sÚvendordata2z#Invalid content in vendor-data2: %sT)Úperform_dhcp_setupr
   r!   r6   Ú_crawl_metadatar	   r   ÚInvalidMetaDataExceptionr   Úlogexcr;   ÚstrÚ_determine_dsmoder8   r*   ÚDSMODE_DISABLEDÚmergemanydictÚDEFAULT_METADATAre   r   r   Úuserdata_rawr   r   ÚupdateÚconvert_vendordataÚvendordata_rawÚ
ValueErrorr?   Úvendordata2_raw)r   ÚresultsÚeÚmdÚvdÚvd2s   &     r#   Ú	_get_dataÚDataSourceOpenStack._get_data˜   s8  € ð ×"×"Ð"ðä$Ø—K‘K §¡×!?Ñ!?÷õ ð #×2Ñ2Ó4�G÷ð ðØ×.Ñ.Ó0�ð
 ×,Ñ,¨g¯k©k¸(Ó.CÐ-DÓEˆŒØ�;‰;œ'×1Ñ1Ô1ÙØ�[‰[˜ RÓ(ˆÜ×Ò Ô%5Ð 6Ó7ˆØŒØ#ŸK™K¨Ó7ˆÔØ#ŸK™K¨Ó6ˆÔØ#ŸK™K¨
Ó3ˆÔØ˜yÕ)ˆŒØ�
‰
×Ñ˜'Ÿ+™+ g¨rÓ2Ô3à�[‰[˜Ó&ˆð	'Ü")×"<Ò"<¸RÓ"@ˆDÔð
 �k‰k˜-Ó(ˆð	(Ü#*×#=Ò#=¸cÓ#BˆDÔ ñ
 ÷Q÷ ð ûô %¤g×&FÑ&FÐGô Ü—’œC¤ Q£Ô(Ýûðûô ×3Ñ3ô Ü—’œC¤ Q£Ô(Ýûðûô& ô 	'Ü�K‰KÐ<¸aÔ@Ø"&ˆD×Òûð	'ûô ô 	(Ü�K‰KÐ=¸qÔAØ#'ˆD× Ð áûð		(ús}   ”2G ÁGÁG Á!H$ Å9I+ Æ&J! ÇG	ÇG ÇG ÇH!Ç2$HÈH!È$I(È9$I#É#I(É+JÉ6JÊJÊ!KÊ,KËKc                ó�  €  V P                  4       '       g   \        P                  ! R4      h T P                  4       p \        T P                  T P                  TP                  TP                  R7      pT#   \         d5   p\        P                  ! RP	                  \        T4      R7      4      hRp?ii ; i  \        P                   d%   p\        P                  ! \        T4      4      hRp?i\        P                  \        3 d9   pRP	                  T P                  R7      p\        P                  ! T4      ThRp?ii ; i)z¶Crawl metadata service when available.

@returns: Dictionary with all metadata discovered for this datasource.
@raise: InvalidMetaDataException on unreadable or broken
    metadata.
z No active metadata service foundz,IOError contacting metadata service: {error})ÚerrorN)r   Úretriesr3   zBroken metadata address {addr})Úaddr)rU   r   rl   ÚIOErrorr5   rn   rB   Úread_metadata_servicer   r   Únum_retriesrG   r   ÚNonReadableÚBrokenMetadata)r   rz   rQ   ÚresultÚmsgs   &    r#   rk   Ú#DataSourceOpenStack._crawl_metadataÍ   s.  € ð
	Ø×1Ñ1×3Ò3Ü×6Ò6Ø6óð ð 4ð ×(Ñ(Ó*ˆ
ð	?Ü*Ø×%Ñ%Ø ×,Ñ,Ø"×.Ñ.Ø"×2Ñ2ô	ˆFð ˆøô/ ô 	Ü×2Ò2Ø>×EÑEÜ˜a›&ð Fó óð ûð	ûô  ×$Ñ$ô 	;Ü×2Ò2´3°q³6Ó:Ð:ûÜ×(Ñ(¬'Ð2ô 	?Ø2×9Ñ9Ø×*Ñ*ð :ó ˆCô ×2Ò2°3Ó7¸QÐ>ûð		?úsF   ‚A9 ˜A9 Á 7B; Á9B8Â/B3Â3B8Â;EÃC/Ã/EÄEÄ3E Å Ec                ó®  € RV P                   P                  R4      9   p\        P                  ! 4       '       g   R# \        P
                  ! R4      pV\        9   d   R# \        P
                  ! R4      \        9   d   R# V'       d   \        P                  ! 4       '       d   R# \        P                  ! ^4      P                  R4      \        8X  d   R# R# )z<Return True when a potential OpenStack platform is detected.ÚOracleÚdatasource_listTzsystem-product-namezchassis-asset-tagÚproduct_nameF)r    r8   r   Úis_x86r   Úread_dmi_dataÚVALID_DMI_PRODUCT_NAMESÚVALID_DMI_ASSET_TAGSÚoracleÚ_is_platform_viableÚget_proc_envÚDMI_PRODUCT_NOVA)r   Úaccept_oracler�   s   &  r#   Ú	ds_detectÚDataSourceOpenStack.ds_detectò   s˜   € à  D§L¡L×$4Ñ$4Ð5FÓ$GÑGˆÜ�{Š{�}Š}áä×(Ò(Ð)>Ó?ˆØÔ2Ô2ÙÜ×ÒÐ2Ó3Ô7KÔKÙßœv×9Ò9×;Ò;ÙÜ×Ò˜qÓ!×%Ñ% nÓ5Ô9IÔIÙÙr%   )r_   r*   r   r   re   r   r   r   rs   rx   rv   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Údsnamer   r   r_   rj   r   ÚNETWORKr   ÚBOOT_NEW_INSTANCEÚBOOTÚBOOT_LEGACYÚHOTPLUGÚsupported_update_eventsr   r)   rU   rZ   Úpropertyrb   r~   rk   r™   Ú__static_attributes__Ú__classdictcell__Ú__classcell__)r"   Ú__classdict__s   @@r#   r   r   ,   s•   ù‡ € à€Fà—m‘m€Oð Ðð 	×ÑØ×'Ñ'Ø�N‰NØ×!Ñ!Ø×Ñð	
ðÐõ*òò
-ò^Oð ñ$ó ð$ò03òj#÷Jò r%   r   c                   ó   € ] tR tRtRtRtRtR# )ÚDataSourceOpenStackLocali  aa  Run in init-local using a dhcp discovery prior to metadata crawl.

In init-local, no network is available. This subclass sets up minimal
networking with dhclient on a viable nic so that it can talk to the
metadata service. If the metadata service provides network configuration
then render the network configuration for that instance based on metadata.
T© N)r›   rœ   r�   rž   Ú__doc__rj   r§   r­   r%   r#   r¬   r¬     s   † ñð Ôr%   r¬   c                 óR   € \         P                  ! WW#R 7      pVP                  4       # ))r   r3   r‚   )r   ÚMetadataReaderÚread_v2)Úbase_urlr   r3   r‚   Úreaders   &&&& r#   r…   r…     s&   € Ü×%Ò%Ø°7ô€Fð �>‰>ÓÐr%   c                 ó8   € \         P                  ! V \        4      # r   )r   Úlist_from_dependsÚdatasources)Údependss   &r#   Úget_datasource_listr¸      s   € Ü×$Ò$ W¬kÓ:Ð:r%   )Né   r¹   ))ÚloggingrC   Ú	cloudinitr   r   r   r   Úcloudinit.eventr   r   Úcloudinit.net.dhcpr	   Úcloudinit.net.ephemeralr
   Úcloudinit.sourcesr   r”   Úcloudinit.sources.helpersr   Ú	getLoggerr›   r;   ÚDEFAULT_IIDrr   r—   ÚDMI_PRODUCT_COMPUTEr’   ÚDMI_ASSET_TAG_OPENTELEKOMÚDMI_ASSET_TAG_SAPCCLOUDÚDMI_ASSET_TAG_HUAWEICLOUDÚ"DMI_ASSET_TAG_SAMSUNGCLOUDPLATFORMr“   ÚSourceMixinr(   r   r¬   r…   ÚDEP_FILESYSTEMÚDEP_NETWORKr¶   r¸   r­   r%   r#   Ú<module>rË      s  ðó Û ç 4Ó 4ß 1Ý /Ý 3Ý 8Ý /à×Ò˜Ó!€ð  €à�;ðÐ ð
 $Ð Ø)Ð Ø+Ð-@ÐAÐ Ø.Ð ð *Ð Ø)Ð Ø%=Ð "Ø.Ð Ø ØØØ&Øð	õ Ð ôV˜)×/Ñ/°×1CÑ1Cô Vôr	Ð2ô 	ôð  × 6Ñ 6Ð8Ð9Ø˜7×1Ñ1°7×3FÑ3FÐGÐHð€ô;r%   