
    ܍~c0                        d dl Z d dlZd dlmZ d dlmZ d dlmZmZ d dlm	Z	  ej
        e          Z G d dej                  ZddZdd	Zdd
Zd Z G d de          Zeej        ffeej        ej        ffgZd ZdS )    N)dmi)log)sourcesutil)enic                   h    e Zd ZdZd Zd Zd Zd Zed             Z	d Z
d Zd	 Zed
             ZdS )DataSourceNoCloudNoCloudc                    t           j                            | |||           d | _        t          j                            |j        d          t          j                            |j        d          g| _        d | _        d| _	        d S )Nnocloudznocloud-net)/zfile://)
r   
DataSource__init__seedospathjoinseed_dir	seed_dirssupported_seed_startsselfsys_cfgdistropathss       E/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceNoCloud.pyr   zDataSourceNoCloud.__init__   sp    ##D'65AAA	GLL33GLL77
 %5"""    c                 j    t           j                            |           }|d| j        d| j        dS )Nz [seed=z	][dsmode=])r   r   __str__r   dsmode)r   roots     r   r    zDataSourceNoCloud.__str__$   s5    !))$//,0DD$)))T[[[IIr   c                    t          j        d          }|                    t          j        d                     t          j        d|                                z            }|                    t          j        d|                                z                       |                    t          j        d|z                       t          t          |          t          |          z            }|                    d           |S )Nz	TYPE=vfatzTYPE=iso9660zLABEL=%szLABEL_FATBOOT=%sT)reverse)r   find_devs_withextendupperlowerlistsetsort)r   labelfslist
label_listdevlists        r   _get_deviceszDataSourceNoCloud._get_devices(   s    $[11d).99:::(ekkmm)CDD
$-j5;;==.HIIJJJ$-.@5.HIIJJJs6{{S__455T"""r   c                 	   d| j         d}g }i ddd d}	 i }t          j        d          }|r7t          ||          r'|                    d           t          |d|i          }n+# t          $ r t          j        t          d           Y d	S w xY w	 i }t          |          r'|                    d
           t          |d|i          }n+# t          $ r t          j        t          d           Y d	S w xY wddgddgd}| j
        D ]f}	 t          j        |fi |}|                    |           t                              d|           t          ||          } n# t          $ r Y cw xY w| j                            d          r+|                    d           | j        d         |d         d<   d| j        v r3d| j        v r*t          || j                  }|                    d           d }	| j                            dd          }
|
|                     |
          D ]}	 t                              d|           	 t          j        ||	|          }n,# t          $ r t                              d||
           Y ^w xY wt          ||          }t                              d|           |                    |            nX# t&          $ r }|j        t(          j        k    r Y d }~d }~wt          j        $ r t          j        t          d|           Y w xY wt/          |          dk    rd	S d|d         v r|d         d         }d	}| j        D ]}|                    |          r|} n|st                              d||            d	S t          j        |d           \  }}}t                              d|           t          j        |d         |g          |d<   ||d<   ||d<   |                    |           t          j        |d         |g          |d<   |                     |d                             d          g          | _         | j         t:          j        k    r#t                              d | | j                    d	S d!                    |          | _         |d         | _!        |d         | _"        |d         | _#        |d         | _$        |d                             d"          | _%        d#S )$Nr   )instance-idr!    )	meta-data	user-datavendor-datanetwork-configzsystem-serial-numberr   r4   zUnable to parse dmi dataFcmdlinez!Unable to parse command line datar5   r6   r7   )requiredoptionalzUsing seeded data from %sseedfromds_config_seedfrom	ds_configc                 &    t          j        | fi |S N)r   pathprefix2dict)mpdatas     r   _pp2d_callbackz3DataSourceNoCloud._get_data.<locals>._pp2d_callbacku   s    '33d333r   fs_labelcidatazAttempting to use data from %sz)device %s with label=%s not a valid seed.zUsing data from %sz(Failed to mount %s when looking for datar   z Seed from %s not supported by %s)timeoutzUsing seeded cache data from %sr!   z&%s: not claiming datasource, dsmode=%s,znetwork-interfacesT)&r!   r   read_dmi_dataload_cmdline_dataappend_merge_new_seed	Exceptionr   logexcLOGr   r@   debug
ValueErrords_cfggetr0   mount_cbwarningOSErrorerrnoENOENTMountFailedErrorlenr   
startswithread_seededmergemanydict_determine_dsmoder   DSMODE_DISABLEDr   r   metadatauserdata_rawvendordata_raw_network_config_network_eni)r   defaultsfoundmydatamdserialpp2d_kwargsr   seededrC   r,   dever;   	seedfoundprotomd_seedudvds                      r   	_get_datazDataSourceNoCloud._get_data4   s   $k
 

 "	
 

	 B&'=>>F D+B77 DU###(+r1BCC 	 	 	K788855		B $$ DY'''(+r1BCC 	 	 	K@AAA55	 %k2&(89
 

 N 	 	D-dBBkBBT"""		5t<<<(88    ;??:&& 	FLL-....2k*.EF;
+ $+%%+*D*D$VT[99FLL%%%	4 	4 	4 
H55((//  II>DDD
!!%" " & ! ! !G!  
 !! -VV<<FII2C888LL%%%E   w%,.. /....,   KG     u::??5 ,,,k*:6HI3  &&u--  %IE  		<hMMMu !% 04 H H HWb"II7BBB #'"4$g.# #F; #%F;$&F=!LL""" #0K (+
 
{ ,,K $$X../
 
 ;'111II8$   5HHUOO	{+";/$]3%&67";/334HIItsz   AA% %$BB8C
 
$C21C2AE
E)(E)&KIK&J?KJAK
LK,,-LLc                     t          | d          sd | _        | j        st          j                    rdnd| _        | j        S )N_platform_typelxdr   )hasattrrt   r   is_lxdr   s    r   platform_typezDataSourceNoCloud.platform_type   sK     t-.. 	'"&D" 	H+/;=="G%%iD""r   c                     t           j        S )z=Return unknown when 'cloud-name' key is absent from metadata.)r   METADATA_UNKNOWNrx   s    r   _get_cloud_namez!DataSourceNoCloud._get_cloud_name   s    ''r   c                 Z    | j                             d          rd}nd}|d| j         dS )z/Return the subplatform metadata source details.z/devzconfig-diskzseed-dirz ())r   rZ   )r   subplatform_types     r   _get_subplatformz"DataSourceNoCloud._get_subplatform   s@    9'' 	*,),,,diii88r   c                     |                                  }|sd S t          | d| j        g          }t          |          }|sd S ||k    S )Nr   )dirs)get_instance_idgetattrr   _quick_read_instance_id)r   r   currentr   quick_ids        r   check_instance_idz#DataSourceNoCloud.check_instance_id   sa     &&(( 	4 t[4=/::*555 	47""r   c                 h    | j         %| j        t          j        | j                  | _         | j         S r?   )rb   rc   r   convert_eni_datarx   s    r   network_configz DataSourceNoCloud.network_config   s3    ' ,'*';D<M'N'N$##r   N)__name__
__module____qualname__dsnamer   r    r0   rr   propertyry   r|   r   r   r    r   r   r	   r	      s        F6 6 6J J J
 
 
Y Y Yv # # X#( ( (9 9 9# # # $ $ X$ $ $r   r	   c                     | g } d}i }t          |          r||v r||         S | D ]W}|	 t          j        |dg          }t          j        |d                   }|r||v r
||         c S H# t          $ r Y Tw xY wd S )Nr2   r4   )r9   )rI   r   r@   	load_yamlrP   )r   iid_keyfilldrB   rg   s         r   r   r      s    |GD 7d??G} 	 	9	'[MBBBD[ 122B #gmm'{""" 	 	 	D	 4s   >A..
A;:A;c                     dt           j        fdt           j        fg}|D ]"\  }}t          || |          rd| vr|| d<    dS #dS )Nz
ds=nocloudzds=nocloud-netr!   TF)r   DSMODE_LOCALDSMODE_NETWORKparse_cmdline_data)r   r8   pairsidstrr!   s        r   rI   rI     sq    	w+,	712E   veT733 	 t##!'X44	 5r   c                    |t          j                    }d|z  }d| z  |v s	d| z  |v sdS d}|                                D ]-}|                    |           r|                    dd          }.|d                             d          }t	          |          dk    r|dd          }nd}d	d
dd}|D ]I}|dk    r		 |                    dd          \  }	}
n# t
          $ r |}	d }
Y nw xY w|	|v r||	         }	|
||	<   JdS )Nz %s z %s;Fr3   =   ;r   zlocal-hostnamer2   r;   )hisT)r   get_cmdlinesplitrZ   rY   rL   )ds_idr   r8   arglinetoktmpkvpairss2litemkvs              r   r   r   &  sZ   "$$wGUNg%%%7)B)BuG }} ( (>>%   	(iiQ''G !*

3

C
3xx!||abb' !}:
F
FC 
 
2::	ZZQ''FQ 	 	 	AAAA	 88AAQ4s   <CC'&C'c                    |                                  }|                    di           }t          |d         t                    st	          j        |d                   }t	          j        | d         |g          |d<   |                    d          r*t	          j        |                    d                    |d<   d|v r|d         |d<   d|v r|d         |d<   |S )Nr4   r7   r5   r6   )copyrR   
isinstancedictr   r   r\   )currj   retnewmds       r   rK   rK   N  s    
((**CJJ{B''Ef[)400 4vk233)3{+;U*CDDCzz"## M $vzz:J/K/K L Lf!+.K#M2MJr   c                       e Zd Zd ZdS )DataSourceNoCloudNetc                 N    t                               | |||           d| _        d S )N)zhttp://zhttps://)r	   r   r   r   s       r   r   zDataSourceNoCloudNet.__init__a  s*    ""4&%@@@%<"""r   N)r   r   r   r   r   r   r   r   r   `  s#        = = = = =r   r   c                 6    t          j        | t                    S r?   )r   list_from_dependsdatasources)dependss    r   get_datasource_listr   n  s    $Wk:::r   r?   )rV   r   	cloudinitr   r   loggingr   r   cloudinit.netr   	getLoggerr   rN   r   r	   r   rI   r   rK   r   DEP_FILESYSTEMDEP_NETWORKr   r   r   r   r   <module>r      si    				       $ $ $ $ $ $ # # # # # # # #      g!!b$ b$ b$ b$ b$* b$ b$ b$J   .   (% % % %P  $= = = = =, = = = /12G2G4GHI; ; ; ; ;r   