
    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$**=
#MM#MM    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    !!))$/#'dll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  pU(       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kk44 8  %	
 {{<#At!t'='=a'@AtAx=CI%II>c$i#h-/1 x==DKKEFDC++C=FNN6""V 
 ((*
^^%
)6600.."'	 
	 II3X5HIIIDDNN$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6t7K7K7M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 '''-KK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NS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)zCrawl 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+    ""$KK!?!? #224G ..0
 ,,gkk(.C-DE;;'111[[R(%5 67#KK7#KK6#KK
3y)

'++gr23[[&	'")"<"<R"@D
 kk-(	(#*#=#=c#BD 
 Q  %g&F&FG CQ( 33 CQ(&  	'KK<a@"&D	'  	(KK=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)zCrawl 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23q6::(('2 	?299** : C 2237Q>		?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     DLL$4$45F$GG{{}}(()>?22237KKv99;;q!%%n59I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mmO  	''NN!!	
*
-^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    $$Wk::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)//1C1C Vr	2 	  6 68971173F3FGH;r&   