ó
    x[hÍ(  ã                   óŠ  • S SK r S SKrS SKJrJrJrJr  S SKJrJ	r	  S SK
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\\/rSrSrSrSr\r\\\\\/-  r " S S\R@                  \RB                  5      r" " S S\"5      r#SS jr$\#\RJ                  44\"\RJ                  \RL                  44/r'S r(g)é    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                   óð   ^ • \ rS rSrSr\R                  rSr\	R                  \R                  \R                  \R                  \R                  10rU 4S jrS rS rS r\S 5       rS	 rS
 rS rSrU =r$ )ÚDataSourceOpenStacké,   Ú	OpenStackFc                 óö   >• [         [        U ]  XU5        S U l        [        R
                  " U R                  5      U l        S U l        0 U l	        [        R                  U l        [        R                  U l        g ©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                 óˆ   • [         R                  R                  U 5      nU< SU R                  < SU R                  < S3nU$ )Nz [z,ver=Ú])r   Ú
DataSourceÚ__str__Údsmoder   )r    ÚrootÚmstrs      r$   r*   ÚDataSourceOpenStack.__str__G   s1   € Ü×!Ñ!×)Ñ)¨$Ó/ˆÛ#'¨¯¬°d·l´lÐCˆØˆr&   c           	      óÜ  • SR                  U R                  R                  S9S/nU R                  R	                  SU5      nU Vs/ s H"  n[
        R                  " U5      (       d  M   UPM$     nn[        U5      [        U5      :w  a4  [        R                  S[        [        U5      [        U5      -
  5      5        [        U5      (       a  UnO[        R                  S5        Un/ n0 nU H/  n[        R                  " US5      nUR                  U5        XvU'   M1     U R!                  5       n	["        R$                  " 5       n
[        R&                  " UU	R(                  U	R*                  SS	9u  p¼U(       a  [        R                  S
Xk   5        O6[        R                  SU[-        ["        R$                  " 5       U
-
  5      5        UR	                  U5      U l        [1        U5      $ s  snf )Nz"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_URLSr2   Ú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™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   • [         R                  " U R                  5       5      $ 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                 óØ  • U R                   [        R                  :w  a  U R                   $ [        R                  " U R
                  R                  SS5      5      (       a  SU l         U R                   $ U R                  [        R                  :X  a  [        R                  S5        g[        R                  S5        [        R                  " U R                  SS9U l         U R                   $ )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_falser8   r9   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                 óz  • U R                   (       aE   [        U R                  U R                  R                  5         U R	                  5       nSSS5        O U R	                  5       nU R                  WR                  S5      /5      U l        U R                  [        R                  :X  a  gUR                  S0 5      n[        R                   " U["        /5      nX0l        UR                  S5      U l        UR                  S5      U l        UR                  S5      U l        US   U l        U R.                  R1                  UR                  S	0 5      5        UR                  S
5      n [        R2                  " U5      U l        UR                  S5      n [        R2                  " U5      U l        g! , (       d  f       GNZ= f! [
        [        R                  4 a.  n[        R                  " [        [        U5      5         SnAgSnAff = f! [        R                   a.  n[        R                  " [        [        U5      5         SnAgSnAff = f! [6         a'  n[        R9                  SU5        SU l         SnANüSnAff = f! [6         a'  n[        R9                  SU5        SU l         SnAgSnAff = f)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"   r7   Ú_crawl_metadatar	   r   ÚInvalidMetaDataExceptionr   Úlogexcr<   ÚstrÚ_determine_dsmoder9   r+   ÚDSMODE_DISABLEDÚmergemanydictÚDEFAULT_METADATArf   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˜   s+  € ð ×"×"ðä$Ø—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|   “*G ½F3ÁG ÁH Å*I ÆJ	 Æ3
GÆ=G ÇG ÇHÇ$HÈHÈIÈ$$IÉIÉ
JÉJÊJÊ	
J:ÊJ5Ê5J:c                 óv  •  U R                  5       (       d  [        R                  " S5      e U R                  5       n [        U R                  U R                  UR                  UR                  S9nU$ ! [         a1  n[        R                  " SR	                  [        U5      S95      eSnAff = f! [        R                   a$  n[        R                  " [        U5      5      eSnAf[        R                  [        4 a5  nSR	                  U R                  S9n[        R                  " U5      UeSnAff = f)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   Úretriesr4   zBroken metadata address {addr})Úaddr)rV   r   rm   ÚIOErrorr6   ro   rC   Úread_metadata_servicer   r   Únum_retriesrH   r   ÚNonReadableÚBrokenMetadata)r    r{   rR   ÚresultÚmsgs        r$   rl   Ú#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Ð>ûð		?ús:   ‚+A5 ¿4B3 Á5
B0Á?,B+Â+B0Â3D8ÃC&Ã&D8Ä0D3Ä3D8c                 ó–  • SU R                   R                  S5      ;   n[        R                  " 5       (       d  g[        R
                  " S5      nU[        ;   a  g[        R
                  " S5      [        ;   a  gU(       a  [        R                  " 5       (       a  g[        R                  " S5      R                  S5      [        :X  a  gg)	z<Return True when a potential OpenStack platform is detected.ÚOracleÚdatasource_listTzsystem-product-namezchassis-asset-tagé   Úproduct_nameF)r!   r9   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   rf   r   r   r   rt   ry   rw   r   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Údsnamer   r   r`   rk   r   ÚNETWORKr   ÚBOOT_NEW_INSTANCEÚBOOTÚBOOT_LEGACYÚHOTPLUGÚsupported_update_eventsr   r*   rV   r[   Úpropertyrc   r   rl   r›   Ú__static_attributes__Ú__classcell__)r#   s   @r$   r   r   ,   s“   ø† à€Fà—m‘m€Oð Ðð 	×ÑØ×'Ñ'Ø�N‰NØ×!Ñ!Ø×Ñð	
ðÐõ*òò
-ò^Oð ñ$ó ð$ò03òj#÷Jð r&   r   c                   ó   • \ rS rSrSrSrSrg)Ú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__rk   r©   r­   r&   r$   r¬   r¬     s   † ñð Ór&   r¬   c                 óL   • [         R                  " XX#S9nUR                  5       $ )N)r   r4   rƒ   )r   ÚMetadataReaderÚread_v2)Úbase_urlr   r4   rƒ   Úreaders        r$   r†   r†     s&   € Ü×%Ò%Ø°7ñ€Fð �>‰>ÓÐr&   c                 ó8   • [         R                  " U [        5      $ r   )r   Úlist_from_dependsÚdatasources)Údependss    r$   Úget_datasource_listr¸      s   € Ü×$Ò$ W¬kÓ:Ð:r&   )Né   r¹   ))ÚloggingrD   Ú	cloudinitr   r   r   r   Úcloudinit.eventr   r   Úcloudinit.net.dhcpr	   Úcloudinit.net.ephemeralr
   Úcloudinit.sourcesr   r–   Úcloudinit.sources.helpersr   Ú	getLoggerr�   r<   ÚDEFAULT_IIDrs   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&   