
    x[h?                     
   S SK r S SKrS SKrS SKJr  S SKJrJrJrJ	r	  S SK
Jr  \R                  " \5      r " S S\R                  5      rSS jrSS jrSS	 jrS
 r " S S\5      r\\R,                  44\\R,                  \R.                  44/rS r\S:X  ai  S SKJr  \R8                  " \R:                  S9  \S   r\	R>                  " \5      u  r r!r"r#\$" S\  35        \$" S\! 35        \$" S\" 35        \$" S\# 35        gg)    N)partial)dmi	lifecyclesourcesutil)enic                   ~   ^  \ rS rSrSrS rU 4S jrS rS r\	S 5       r
S\4S	 jrS
 rS rS r\	S 5       rSrU =r$ )DataSourceNoCloud   NoCloudc                 <   [         R                  R                  XX#5        S U l        [        R
                  R                  UR                  S5      [        R
                  R                  UR                  S5      /U l        S U l        SU l	        S U l
        S U l        g )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   DataSourceNoCloud.__init__   su    ##D6A	GGLL3GGLL7
 %5"#     c                    > [         TU ]  5       S-   U R                  (       a  SU R                   S3OS-   U R                  [        R
                  :w  a  SU R                   S3-   $ S-   $ )z@append seed and dsmode info when they contain non-default values z[seed=] z[dsmode=)super__str__r   dsmoder   DSMODE_NETWORK)r   	__class__s    r"   r*   DataSourceNoCloud.__str__&   ss     GO(,				{!$r;
 ;;'"8"88 4;;-q)			
 		
r$   c                    [         R                  " S5      nUR                  [         R                  " S5      5        [         R                  " SUR                  5       -  5      nUR                  [         R                  " SUR	                  5       -  5      5        UR                  [         R                  " SU-  5      5        [        [        U5      [        U5      -  5      nUR                  SS9  U$ )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_devicesDataSourceNoCloud._get_devices3   s    $$[1d)).9:((ekkm)CD
$--j5;;=.HIJ$--.@5.HIJs6{S_45T"r$   c                  
   SU R                   S.n/ n0 SSS S.n 0 n[        R                  " S5      nU(       a/  [        XE5      (       a  UR	                  S5        [        USU05      n 0 n[        U5      (       a  UR	                  S
5        [        USU05      nSS/SS/S.nU R                   HM  n [        R                  " U40 UD6nUR	                  U5        [        R                  SU5        [        X85      n  O   U R                  R                  S5      (       a&  UR	                  S5        U R                  S   US   S'   SU R                  ;   a6  SU R                  ;   a&  [        X0R                  5      nUR	                  S5        S n	U R                  R                  SS5      n
U
b  U
R!                  5       S:w  a  ["        R$                  " SSSS9  U R'                  U
5       Hd  n [        R                  SU5         [        R(                  " XU5      n[        X85      n[        R                  SU5        UR	                  U5          O   U(       d  g	SUS   ;   a  US   S   nS	nU R4                   H  nUR7                  U5      (       d  M  Un  O   U(       d  U R9                  U5        g	[        R:                  " U5      n[        R<                  " US S9u  nnnn[        R                  S U5        [        R>                  " US   U/5      US'   UUS'   UUS'   UUS'   UR	                  U5        [        R>                  " US   U/5      US'   U RA                  US   R                  S!5      /5      U l         U R                   [B        RD                  :X  a!  [        R                  S"X R                   5        g	S#RG                  U5      U l$        US   U l%        US   U l&        US   U l'        US   U l(        US   R                  S$5      U l)        g%! [         a    [        R                  " [        S5         g	f = f! [         a    [        R                  " [        S5         g	f = f! [         a     GM  f = f! [         a    [        R+                  SUU
5         GM  f = f! [,         a+  nUR.                  [.        R0                  :w  a  e  S nAGM  S nAf[        R2                   a!    [        R                  " [        SU5         GM#  f = f)&Nr   )instance-idr+   r(   )	meta-data	user-datavendor-datanetwork-configsystem-serial-numberr   r@   zUnable to parse dmi dataFcmdlinez!Unable to parse command line datarA   rB   rC   )requiredoptionalzUsing seeded data from %sseedfromds_config_seedfrom	ds_configc                 0    [         R                  " U 40 UD6$ N)r   pathprefix2dict)mpdatas     r"   _pp2d_callback3DataSourceNoCloud._get_data.<locals>._pp2d_callback   s    ''3d33r$   fs_labelcidatazCustom fs_label keys24.3z(This key isn't supported by ds-identify.
deprecateddeprecated_versionextra_messagez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 data)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   rM   debug
ValueErrords_cfggetr4   r   	deprecater<   mount_cbwarningOSErrorerrnoENOENTMountFailedErrorr   
startswith_log_unusable_seedfrom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   seededrP   r8   deverH   	seedfoundprotomd_seedudvdnetworks                       r"   	_get_dataDataSourceNoCloud._get_data?   s   $kk

 "	

	 B&&'=>F+B77U#(+r1BC
	B $$Y'(+r1BC %k2&(89

 NND--dBkBT"		5t<(8 # ;;??:&&LL-..2kk*.EF;
+ $++%+*D$V[[9FLL%	4 
H5{{}(##5'-"L
 ((/II>D
!!%" -V<FII2C8LL%) 0>  ,,k*:6HI33&&u-- %I 4 ++H5 ''1H (,'7'7$'O$GRWII7B #'"4"4$g.#F; #%F;$&F=!'.F#$LL" #00K (+
{ ,,K $$X./
 ;;'111II8$ HHUO	{+";/$]3%&67";/334HI[  	KK78	  	KK@A	"  F & !G!
 !!  ww%,,. /,, KKG sy   AP )1P? 3A	Q*-R%Q<2R%%P<;P<?%Q'&Q'*
Q98Q9<!R"R%!R""R%%
T/S3TTc                     U R                   (       d#  [        R                  " 5       (       a  SOSU l         U R                   $ )Nlxdr   )_platform_typer   is_lxdr   s    r"   platform_typeDataSourceNoCloud.platform_type   s+    ""+/;;==%iD"""r$   rH   c                 H    [         R                  SU U R                  U5        g)!Stage-specific level and message.zN%s only uses seeds starting with %s - will try to use %s in the network stage.N)ra   infor   r   rH   s     r"   rn   (DataSourceNoCloud._log_unusable_seedfrom   s"    $&&	
r$   c                 "    [         R                  $ )z=Return unknown when 'cloud-name' key is absent from metadata.)r   METADATA_UNKNOWNr   s    r"   _get_cloud_name!DataSourceNoCloud._get_cloud_name   s    '''r$   c                 t    U R                   R                  S5      (       a  SnOSnU< SU R                   < S3$ )z/Return the subplatform metadata source details.z/devzconfig-diskzseed-dirz ())r   rm   )r   subplatform_types     r"   _get_subplatform"DataSourceNoCloud._get_subplatform   s2    99'',),dii88r$   c                     U R                  5       nU(       d  g [        U SU R                  /5      n[        US9nU(       d  g XB:H  $ )Nr   )dirs)get_instance_idgetattrr   _quick_read_instance_id)r   r   currentr   quick_ids        r"   check_instance_id#DataSourceNoCloud.check_instance_id   sG     &&( t[4==/:*5""r$   c                     U R                   cH  U R                  b;  [        R                  " SSSS9  [        R
                  " U R                  5      U l         U R                   $ )Nz$Eni network configuration in NoCloudrT   z,You can use network v1 or network v2 insteadrU   )r   r   r   rf   r   convert_eni_datar   s    r"   network_config DataSourceNoCloud.network_config  sX    '  ,##E'-F	 (+';';D<M<M'N$###r$   )r   r   r   r+   rt   r   r   r   r   ru   rv   )__name__
__module____qualname____firstlineno__dsnamer   r*   r<   r   propertyr   strrn   r   r   r   r   __static_attributes____classcell__)r-   s   @r"   r
   r
      sa    F
!

cJ # #

s 
(9# $ $r$   r
   c                    U c  / n Sn0 n[        U5      (       a	  X;   a  X!   $ U  HL  nUc  M   [        R                  " US/S9n[        R                  " US   5      nU(       a  X;   a  XQ   s  $ ML  MN     g ! [         a     M^  f = f)Nr?   r@   )rF   )r\   r   rM   	load_yamlrc   )r   iid_keyfilldrO   rz   s         r"   r   r     s    |GD7?}9	''[MBD[ 12Bgm{" $r    		s   >A66
BBc                 |   S[         R                  4S[         R                  4/nU H  u  p4[        X0U5      (       d  M  SU ;   a    gU R	                  S5      nU(       aV  UR                  S5      (       a  [         R                  U S'     gUR                  S5      (       a  [         R                  U S'     gX@S'     g   g)	Nz
ds=nocloudzds=nocloud-netr+   TrH   zhttp://zhttps://zftp://zftps://)r   r   F)r   DSMODE_LOCALr,   parse_cmdline_datare   rm   )r   rE   pairsidstrr+   rH   s         r"   r\   r\   5  s    	w++,	7112E !%w77t 88J'""<  ")!7!7X  $$%566!(!5!5X  $N' ( r$   c                    Uc  [         R                  " 5       nSU-  nSU -  U;   d
  SU -  U;   d  gSnUR                  5        H-  nUR                  U 5      (       d  M  UR                  SS5      nM/     US   R                  S5      n[	        U5      S:  a  USS  nOSnS	S
SS.nU H-  nUS:X  a  M   UR                  SS5      u  pX;   a  Xy   n	XU	'   M/     g! [
         a    Un	S n
 N"f = f)Nz %s z %s;Fr(   =   ; zlocal-hostnamer?   rH   )hisT)r   get_cmdlinesplitrm   lenr_   )ds_idr   rE   arglinetoktmpkvpairss2litemkvs              r"   r   r   V  s   ""$wGUNg%%7)BG }}>>%  iiQ'G  !*

3
C
3x!|ab' !}:
FC2:	ZZQ'FQ 8AQ    	AA	s   3CC*)C*c                    U R                  5       nUR                  S0 5      n[        US   [        5      (       d  [        R
                  " US   5      n[        R                  " U S   U/5      US'   UR                  S5      (       a(  [        R
                  " UR                  S5      5      US'   SU;   a  US   US'   SU;   a  US   US'   U$ )Nr@   rC   rA   rB   )copyre   
isinstancedictr   r   rq   )curr}   retnewmds       r"   r^   r^   ~  s    
((*CJJ{B'Ef[)400vk23))3{+;U*CDCzz"## $vzz:J/K Lf!+.K#M2MJr$   c                   .    \ rS rSrS rS\4S jrS rSrg)DataSourceNoCloudNeti  c                 >    [         R                  XX#5        SU l        g )Nr   )r
   r   r   r   s       r"   r   DataSourceNoCloudNet.__init__  s    ""4&@&
"r$   rH   c                 H    [         R                  SU U R                  U5        g)r   z6%s only uses seeds starting with %s - %s is not valid.N)ra   rh   r   r   s     r"   rn   +DataSourceNoCloudNet._log_unusable_seedfrom  s     D&&		
r$   c                 0   [        [        R                  SSSS9nS[        R                  " 5       :X  a  U" 5         g[        R
                  " [        R                  " S5      =(       d    S5      R                  5       nX R                  R                  5       S4;   a$  [        R                  S	U 5        US:X  a  U" 5         gU R                  R                  S
0 5      R                  S0 5      R                  S5      (       a  [        R                  SU 5        gg)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.rU   r   TrD   r(   zJMachine is configured by dmi serial number to run on single datasource %s.
datasourcer   rH   zMMachine is configured by system configuration to run on single datasource %s.F)r   r   rf   r   parse_cmdlineparse_cmdline_or_dmir   r[   r4   r   ra   rb   r   re   )r   log_deprecatedr{   s      r"   	ds_detectDataSourceNoCloudNet.ds_detect  s     !:%C
 G1133--45;

%' 	 kk'')=99II(
 & LL\2.SBS_ II(
 r$   )r   N)	r   r   r   r   r   r   rn   r   r   r   r$   r"   r   r     s    

s 
-r$   r   c                 8    [         R                  " U [        5      $ rL   )r   list_from_dependsdatasources)dependss    r"   get_datasource_listr     s    $$Wk::r$   __main__)argv)levelr   zseeded: zud: zvd: z	network: rL   )%rj   loggingr   	functoolsr   	cloudinitr   r   r   r   cloudinit.netr   	getLoggerr   ra   r   r
   r   r\   r   r^   r   DEP_FILESYSTEMDEP_NETWORKr   r   sysr   basicConfigDEBUGrH   rp   r   r   r   r   printr   r$   r"   <module>r      s     	  3 3 !E$** E$P.B%P$@, @J //12G22G4G4GHI; zgmm,AwH#//9GRW	HWI
	D+	D+	IgY
  r$   