
    }f8                        d dl Z d dlZd dlZd dlmZ d dlmZ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edk(  r`d dlmZ  ej6                  ej8                         ed   Z ej<                  e      \  ZZ Z! e"de         e"de          e"de!        yy)    N)partial)dmisourcesutil)enic                   Z    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y)DataSourceNoCloudNoCloudc                 @   t         j                  j                  | |||       d | _        t        j
                  j                  |j                  d      t        j
                  j                  |j                  d      g| _        d | _        d| _	        d | _
        d | _        y )Nnocloudnocloud-net)/file://)r   
DataSource__init__seedospathjoinseed_dir	seed_dirssupported_seed_starts_network_config_network_eniselfsys_cfgdistropathss       E/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceNoCloud.pyr   zDataSourceNoCloud.__init__   sy    ##D'65A	GGLL3GGLL7
 %5"#     c                 ~    t         j                  j                  |       }|d| j                  d| j                  dS )Nz [seed=z	][dsmode=])r   r   __str__r   dsmode)r   roots     r    r$   zDataSourceNoCloud.__str__&   s-    !!))$/,0$))T[[IIr!   c                    t        j                  d      }|j                  t        j                  d             t        j                  d|j                         z        }|j                  t        j                  d|j	                         z               |j                  t        j                  d|z               t        t        |      t        |      z        }|j                  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d)).9:((ekkm)CD
$--j5;;=.HIJ$--.@5.HIJs6{S_45T"r!   c                 n	   d| j                   d}g }i ddd d}	 i }t        j                  d      }|r+t        ||      r|j	                  d       t        |d|i      }	 i }t        |      r|j	                  d
       t        |d|i      }ddgddgd}| j                  D ]M  }	 t        j                  |fi |}|j	                  |       t        j                  d|       t        ||      } n | j                  j                  d      r&|j	                  d       | j                  d   |d   d<   d| j                  v r5d| j                  v r't        || j                        }|j	                  d       d }	| j                  j                  dd      }
|
y| j!                  |
      D ]e  }	 t        j                  d|       	 t        j"                  ||	|      }t        ||      }t        j                  d|       |j	                  |        n t/        |      dk(  ry	d|d   v r|d   d   }d	}| j0                  D ]  }|j3                  |      s|} n |st        j                  d||        y	t        j4                  |      }t        j6                  |d       \  }}}t        j                  d|       t        j8                  |d   |g      |d<   ||d<   ||d<   |j	                  |       t        j8                  |d   |g      |d<   | j;                  |d   j                  d      g      | _         | j                   t<        j>                  k(  r"t        j                  d | | j                          y	d!jA                  |      | _!        |d   | _"        |d   | _#        |d   | _$        |d   | _%        |d   j                  d"      | _&        y## t        $ r t        j                  t        d       Y y	w xY w# t        $ r t        j                  t        d       Y y	w xY w# t        $ r Y w xY w# t        $ r t        j%                  d||
       Y w xY w# t&        $ r)}|j(                  t(        j*                  k7  r Y d }~d }~wt        j,                  $ r t        j                  t        d|       Y w xY w)$Nr   )instance-idr%    )	meta-data	user-datavendor-datanetwork-configsystem-serial-numberr   r8   zUnable to parse dmi dataFcmdlinez!Unable to parse command line datar9   r:   r;   )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_callbackw   s    ''3d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   rE   debug
ValueErrords_cfggetr4   mount_cbwarningOSErrorerrnoENOENTMountFailedErrorlenr   
startswithsub_dmi_varsread_seededmergemanydict_determine_dsmoder   DSMODE_DISABLEDr   r   metadatauserdata_rawvendordata_rawr   r   )r   defaultsfoundmydatamdserialpp2d_kwargsr   seededrH   r0   dever@   	seedfoundprotomd_seedudvds                      r    	_get_datazDataSourceNoCloud._get_data6   s   $kk

 "	

	 B&&'=>F+B7U#(+r1BC
	B $Y'(+r1BC %k2&(89

 NN 	D--dBkBT"		5t<(8	 ;;??:&LL-..2kk*.EF;
+ $++%+*D$VT[[9FLL%	4 
H5((/ II>D
!!%" -VV<FII2C8LL%)> u:? ,,k*:6HI33 &&u- %I 		<hM ''1H !% 0 04 HWb"II7B #'"4"4$g.#F; #%F;$&F=!LL" #00K (+
{ ,,K $$X./
 ;;'111II8$ HHUO	{+";/$]3%&67";/334HIM  	KK78	  	KK@A	"  : & !G!
 !!  ww%,,. /,, KKGsy   AO	 ,O2 $A	P*QP+3Q	#O/.O/2#PP	P('P(+ QQQQ	R4Q??1R43R4c                 l    | j                   st        j                         rdnd| _         | j                   S )Nlxdr   )_platform_typer   is_lxdr   s    r    platform_typezDataSourceNoCloud.platform_type   s)    ""+/;;=%iD"""r!   c                 "    t         j                  S )z=Return unknown when 'cloud-name' key is absent from metadata.)r   METADATA_UNKNOWNr{   s    r    _get_cloud_namez!DataSourceNoCloud._get_cloud_name   s    '''r!   c                 f    | j                   j                  d      rd}nd}|d| j                   dS )z/Return the subplatform metadata source details.z/devzconfig-diskzseed-dirz ())r   r_   )r   subplatform_types     r    _get_subplatformz"DataSourceNoCloud._get_subplatform   s/    99',),dii88r!   c                     | j                         }|sy t        | d| j                  g      }t        |      }|sy ||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   sI     &&( t[4==/:*57""r!   c                     | j                   0| j                  $t        j                  | j                        | _         | j                   S rD   )r   r   r   convert_eni_datar{   s    r    network_configz DataSourceNoCloud.network_config   s?    '  ,'*';';D<M<M'N$###r!   N)__name__
__module____qualname__dsnamer   r$   r4   rv   propertyr|   r   r   r   r    r!   r    r	   r	      sU    F
!J
\| # #
(9# $ $r!   r	   c                     | g } d}i }t        |      r	||v r||   S | D ]C  }|	 t        j                  |dg      }t        j                  |d         }|r||v r||   c S E y # t        $ r Y Rw xY w)Nr6   r8   )r>   )rN   r   rE   	load_yamlrU   )r   iid_keyfilldrG   rk   s         r    r   r      s    |GD7d?G} 	9	''[MBD[ 12Bgm'{"	   		s   :A&&	A21A2c                 R   dt         j                  fdt         j                  fg}|D ]~  \  }}t        || |      sd| v r y| j	                  d      }|rL|j                  d      rt         j                  | d<    y|j                  d      rt         j                  | d<    y|| d<    y y)	Nz
ds=nocloudzds=nocloud-netr%   Tr@   zhttp://zhttps://zftp://zftps://)r   r   F)r   DSMODE_LOCALDSMODE_NETWORKparse_cmdline_datarW   r_   )r   r=   pairsidstrr%   r@   s         r    rN   rN     s    	w++,	7112E  v!%w7t 88J'""< ")!7!7X  $$%56!(!5!5X  $DN'( r!   c                    |t        j                         }d|z  }d| z  |v sd| z  |v syd}|j                         D ]&  }|j                  |       s|j                  dd      }( |d   j                  d      }t	        |      dkD  r|dd  }nd}d	d
dd}|D ],  }|dk(  r		 |j                  dd      \  }	}
|	|v r||	   }	|
||	<   . y# t
        $ r |}	d }
Y  w xY w)Nz %s z %s;Fr7   =   ;r   zlocal-hostnamer6   r@   )hisT)r   get_cmdlinesplitr_   r^   rQ   )ds_idr   r=   arglinetoktmpkvpairss2litemkvs              r    r   r   5  s   ""$wGUNg%%7)BG }} (>>% iiQ'G( !*

3
C
3x!|ab' !}:
FC 
2:	ZZQ'FQ 8AAQ
   	AA	s   "CCCc                 z   | j                         }|j                  di       }t        |d   t              st	        j
                  |d         }t	        j                  | d   |g      |d<   |j                  d      r't	        j
                  |j                  d            |d<   d|v r|d   |d<   d|v r|d   |d<   |S )Nr8   r;   r9   r:   )copyrW   
isinstancedictr   r   rb   )currn   retnewmds       r    rP   rP   ]  s    
((*CJJ{B'Ef[)40vk23))3{+;U*CDCzz"# $vzz:J/K Lf!+.K#M2MJr!   c                       e Zd Zd Zd Zy)DataSourceNoCloudNetc                 B    t         j                  | |||       d| _        y )Nr   )r	   r   r   r   s       r    r   zDataSourceNoCloudNet.__init__p  s     ""4&%@&
"r!   c                 r   t        t        j                  ddd      }dt        j                         k(  r |        yt        j
                  t        j                  d      xs d      j                         }|| j                  j                         dfv r#t        j                  d	|        |dk(  r |        yy
)zCheck dmi and kernel command line for dsname

        NoCloud historically used "nocloud-net" as its dsname
        for network timeframe (DEP_NETWORK), which supports http(s) urls.
        For backwards compatiblity, check for that dsname.
        z!The 'nocloud-net' datasource namez24.1zgUse 'nocloud' instead, which uses the seedfrom protocolscheme (http// or file://) to decide how to run.)
deprecateddeprecated_versionextra_messager   Tr<   r7   zJMachine is configured by dmi serial number to run on single datasource %s.F)r   r   	deprecater   parse_cmdlineparse_cmdline_or_dmir   rM   r,   r   rS   rT   )r   log_deprecatedrl   s      r    	ds_detectzDataSourceNoCloudNet.ds_detecty  s     !NN:%C
 G1133--45;

%' 	 dkk'')=99II(
 & r!   N)r   r   r   r   r   r   r!   r    r   r   o  s    
"r!   r   c                 6    t        j                  | t              S rD   )r   list_from_dependsdatasources)dependss    r    get_datasource_listr     s    $$Wk::r!   __main__)argv)levelr   zseeded: zud: zvd: rD   )#r[   loggingr   	functoolsr   	cloudinitr   r   r   cloudinit.netr   	getLoggerr   rS   r   r	   r   rN   r   rP   r   DEP_FILESYSTEMDEP_NETWORKr   r   sysr   basicConfigDEBUGr@   ra   rs   rt   ru   printr   r!   r    <module>r      s     	  ( ( g!d$** d$N.B%P$,, ,b //12G22G4G4GHI; zGgmm,AwH&d&&x0OGR	HWI
	D+	D+ r!   