Ë
    [h³?  ã                   ó  — 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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(  rld dlmZ  ej8                  ej:                  ¬«       ed   Z e	j>                  e«      \  Z Z!Z"Z# e$de › �«        e$de!› �«        e$de"› �«        e$de#› �«       yy)é    N)Úpartial)ÚdmiÚ	lifecycleÚsourcesÚutil)Úenic                   ór   ‡ — e Zd ZdZd„ Zˆ fd„Zd„ Zd„ Zed„ «       Z	de
fd„Zd	„ Zd
„ Zd„ Zed„ «       Zˆ xZS )Ú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¨'°6¸5ÔAØˆŒ	ä�G‰G�L‰L˜Ÿ™¨Ó3Ü�G‰G�L‰L˜Ÿ™¨Ó7ð
ˆŒð ˆŒØ%5ˆÔ"Ø#ˆÔØ ˆÕó    c                 óÈ   •— t         ‰| �  «       dz   | j                  rd| j                  › d�ndz   | j                  t        j
                  k7  rd| j                  › d�z   S dz   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(   zDataSourceNoCloud.__str__&   ss   ø€ ô ‰G‰OÓØñà(,¯	ª	�˜Ÿ	™	�{ !Ñ$°rñ;ð
 —;‘;¤'×"8Ñ"8Ò8ð ˜4Ÿ;™;˜- qÐ)ñ	ð		
ð ñð		
r"   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_devices3   s±   € Ü×$Ñ$ [Ó1ˆØ�‰”d×)Ñ)¨.Ó9Ô:ä×(Ñ(¨°e·k±k³mÑ)CÓDˆ
Ø×Ñœ$×-Ñ-¨j¸5¿;¹;»=Ñ.HÓIÔJØ×Ñœ$×-Ñ-Ð.@À5Ñ.HÓIÔJä”s˜6“{¤S¨£_Ñ4Ó5ˆØ�‰˜TˆÔ"Øˆr"   c                 ó¢	  — 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«      }
|
�¤|
j!                  «       dk7  rt#        j$                  ddd¬«       | j'                  |
«      D ]e  }	 t        j                  d|«       	 t        j(                  ||	|«      }t        ||«      }t        j                  d|«       |j	                  |«        n |sy	d|d   v rÃ|d   d   }d	}| j4                  D ]  }|j7                  |«      sŒ|} n |s| j9                  |«       y	t        j:                  |«      }t        j<                  |d ¬«      \  }}}}t        j                  d |«       t        j>                  |d   |g«      |d<   ||d<   ||d<   |j	                  |«       t        j>                  |d   |g«      |d<   | jA                  |d   j                  d!«      g«      | _         | j                   tB        jD                  k(  r"t        j                  d"| | j                   «       y	d#jG                  |«      | _$        |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.        j0                  k7  r‚ Y d }~�ŒÈd }~wt        j2                  $ r t        j                  t        d|«       Y �Œüw xY w)&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 datar=   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_callback€   s   € Ü×'Ñ'¨Ñ3¨dÑ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   rI   ÚdebugÚ
ValueErrorÚds_cfgÚgetr1   r   Ú	deprecater9   Ú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   ÚseededrL   r5   ÚdevÚerD   Ú	seedfoundÚprotoÚmd_seedÚudÚvdÚ_s                       r!   Ú	_get_datazDataSourceNoCloud._get_data?   sÚ  € à$Ø—k‘kñ
ˆð
 ˆàØØØ"ñ	
ˆð
	ð ˆBÜ×&Ñ&Ð'=Ó>ˆFÙÔ+¨B°Ô7Ø—‘˜UÔ#Ü(¨°+¸rÐ1BÓC�ð
	àˆBÜ  Ô$Ø—‘˜YÔ'Ü(¨°+¸rÐ1BÓC�ð % kÐ2Ø&Ð(8Ð9ñ
ˆð
 —N‘Nò 	ˆDðÜ×-Ñ-¨dÑB°kÑB�Ø—‘˜TÔ"Ü—	‘	Ð5°tÔ<Ü(¨°Ó8�Ùð	ð �;‰;�?‰?˜:Ô&Ø�L‰LÐ-Ô.Ø.2¯k©k¸*Ñ.EˆF�;Ñ 
Ñ+ð ˜$Ÿ+™+Ñ%¨+¸¿¹Ñ*DÜ$ V¨T¯[©[Ó9ˆFØ�L‰L˜Ô%ò	4ð —‘—‘ 
¨HÓ5ˆØÐØ�{‰{‹} Ò(Ü×#Ñ#Ø5Ø'-Ø"Lõð
 ×(Ñ(¨Ó/ò �ðÜ—I‘IÐ>ÀÔDð
!Ü!%§¡Ø °ó"˜ô -¨V°VÓ<�Fä—I‘IÐ2°CÔ8Ø—L‘L Ô%Ùð)ñ> Øð ˜ Ñ,Ñ,Ø˜kÑ*¨:Ñ6ˆHØˆIØ×3Ñ3ò �Ø×&Ñ& uÕ-Ø %�IÙðñ Ø×+Ñ+¨HÔ5Øô ×'Ñ'¨Ó1ˆHô "&×!1Ñ!1°(ÀDÔ!IÑˆG�R˜˜QÜ�I‰IÐ7¸ÔBô #'×"4Ñ"4Ø˜Ñ$ gÐ.ó#ˆF�;Ñð #%ˆF�;ÑØ$&ˆF�=Ñ!Ø�L‰L˜Ô"ô #×0Ñ0Ø�KÑ  (Ð+ó
ˆˆ{Ñð ×,Ñ,Ø�KÑ ×$Ñ$ XÓ.Ð/ó
ˆŒð �;‰;œ'×1Ñ1Ò1Ü�I‰IØ8¸$ÀÇÁôð à—H‘H˜U“OˆŒ	Ø˜{Ñ+ˆŒØ" ;Ñ/ˆÔØ$ ]Ñ3ˆÔØ%Ð&6Ñ7ˆÔØ" ;Ñ/×3Ñ3Ð4HÓIˆÔØøôY ò 	Ü�K‰KœÐ7Ô8Ùð	ûô ò 	Ü�K‰KœÐ@ÔAÙð	ûô" ò ÚðûôF &ò !ÜŸ™ØGØØ!ôò
 !ð!ûô ò Ø—w‘w¤%§,¡,Ò.Øõ /ûä×,Ñ,ò Ü—K‘KÜÐGÈ÷ðúsy   šAO# Á,P Â$A	P5ÇQ,Ç,QÈ3Q,Ï##P	ÐP	Ð#P2Ð1P2Ð5	QÑQÑ Q)Ñ%Q,Ñ(Q)Ñ)Q,Ñ,	SÑ5RÒ1SÓS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)   € à×"Ò"Ü+/¯;©;¬=¡%¸iˆDÔØ×"Ñ"Ð"r"   rD   c                 óH   — t         j                  d| | j                  |«       y)ú!Stage-specific level and message.zN%s only uses seeds starting with %s - will try to use %s in the network stage.N)r\   Úinfor   ©r   rD   s     r!   ri   z(DataSourceNoCloud._log_unusable_seedfromé   s"   € ä�‰ð$àØ×&Ñ&Øõ	
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   rh   )r   Úsubplatform_types     r!   Ú_get_subplatformz"DataSourceNoCloud._get_subplatform÷   s/   € à�9‰9×Ñ Ô'Ø,Ñà)ÐÚ,¨d¯i«iÐ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                   €H| j                  �<t        j                  ddd¬«       t	        j
                  | j                  «      | _         | j                   S )Nz$Eni network configuration in NoCloudrO   z,You can use network v1 or network v2 insteadrP   )r   r   r   ra   r   Úconvert_eni_datar†   s    r!   Únetwork_configz DataSourceNoCloud.network_config  sX   € à×ÑÐ'Ø× Ñ Ð,Ü×#Ñ#ØEØ'-àFõ	ô (+×';Ñ';¸D×<MÑ<MÓ'N�Ô$Ø×#Ñ#Ð#r"   )Ú__name__Ú
__module__Ú__qualname__Údsnamer   r(   r9   r�   Úpropertyr‡   Ústrri   rŽ   r’   rš   r�   Ú__classcell__)r+   s   @r!   r
   r
      sa   ø„ à€Fò
!ô
ò
òbðH ñ#ó ð#ð

¨só 
ò(ò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)Nr;   r<   )rB   )rW   r   rI   Ú	load_yamlr^   )r”   Úiid_keyÚfillÚdrK   ru   s         r!   r—   r—     sž   € Ø€|Øˆà€GØ€DÜ˜Ô 7¨d¡?Ø�G‰}Ðàò 	ˆØˆ9Øð	Ü×'Ñ'¨°[°MÔBˆDÜ—‘  [Ñ 1Ó2ˆBÙ�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)   TrD   ©zhttp://zhttps://zftp://zftps://)r   r   F)r   ÚDSMODE_LOCALr*   Úparse_cmdline_datar`   rh   )r¨   rA   ÚpairsÚidstrr)   rD   s         r!   rW   rW   4  sÆ   € à	”w×+Ñ+Ð,Ø	œ7×1Ñ1Ð2ð€Eð ò ‰ˆˆvÜ! %¨¨wÔ7ØØ�tÑñ à—8‘8˜JÓ'ˆÙØ×"Ñ"Ø<ôô ")×!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;Fr&   ú=é   ú;© zlocal-hostnamer;   rD   )ÚhÚiÚsT)r   Úget_cmdlineÚsplitrh   ÚlenrZ   )Úds_idr¨   rA   ÚarglineÚtokÚtmpÚkvpairsÚs2lÚitemÚkÚvs              r!   r­   r­   U  s  € Ø€Ü×"Ñ"Ó$ˆØ�wÑ€Gà�U‰N˜gÑ%¨°%©¸7Ñ)BØà€Gð �}‰}‹ò (ˆØ�>‰>˜%Õ Ø—i‘i  QÓ'‰Gð(ð �!‰*×
Ñ
˜3Ó
€CÜ
ˆ3ƒx�!‚|Ø�a�b�'‰àˆð ! }¸:Ñ
F€CØò 
ˆØ�2Š:Øð	Ø—Z‘Z  QÓ'‰FˆQ�ð �‰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 )Nr<   r?   r=   r>   )Úcopyr`   Ú
isinstanceÚdictr   r¦   rl   )Úcurrx   ÚretÚnewmds       r!   rY   rY   }  s¼   € Ø
�(‰(‹*€Cà�J‰J�{ BÓ'€EÜ�f˜[Ñ)¬4Ô0Ü—‘˜v kÑ2Ó3ˆÜ×)Ñ)¨3¨{Ñ+;¸UÐ*CÓD€CˆÑà‡z�zÐ"Ô#Ü $§¡¨v¯z©zÐ:JÓ/KÓ LˆÐÑà�fÑØ! +Ñ.ˆˆKÑØ˜ÑØ# MÑ2ˆˆMÑØ€Jr"   c                   ó$   — e Zd Zd„ Zdefd„Zd„ Zy)ÚDataSourceNoCloudNetc                 óB   — t         j                  | |||«       d| _        y )Nr«   )r
   r   r   r   s       r!   r   zDataSourceNoCloudNet.__init__�  s    € Ü×"Ñ" 4¨°&¸%Ô@ð&
ˆÕ"r"   rD   c                 óH   — t         j                  d| | j                  |«       y)r‰   z6%s only uses seeds starting with %s - %s is not valid.N)r\   rc   r   r‹   s     r!   ri   z+DataSourceNoCloudNet._log_unusable_seedfrom™  s    € ä�‰ØDØØ×&Ñ&Øõ		
r"   c                 ó  — 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| j                  j                  d
i «      j                  di «      j                  d«      rt        j                  d| «       yy)zùCheck 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.rP   r   Tr@   r&   zJMachine is configured by dmi serial number to run on single datasource %s.Ú
datasourcer   rD   zMMachine is configured by system configuration to run on single datasource %s.F)r   r   ra   r   Úparse_cmdlineÚparse_cmdline_or_dmir   rV   r1   r¡   r\   r]   r   r`   )r   Úlog_deprecatedrv   s      r!   Ú	ds_detectzDataSourceNoCloudNet.ds_detect¢  sü   € ô !Ü×ÑØ:Ø%ðCô
ˆð œG×1Ñ1Ó3Ò3ÙÔØä×-Ñ-Ü×ÑÐ4Ó5Ò;¸ó
ç
‰%‹'ð 	ð �d—k‘k×'Ñ'Ó)¨=Ð9Ñ9Ü�I‰Ið(àôð
 ˜Ò&ÙÔ Øà�L‰L×Ñ˜\¨2Ó.ß‰S�˜BÓß‰S�‹_ðô �I‰Ið(àôð
 Ør"   N)rž   rŸ   r    r   r£   ri   rÔ   r´   r"   r!   rÌ   rÌ   �  s   „ ò
ð
¨só 
ó-r"   rÌ   c                 ó6   — t        j                  | t        «      S rH   )r   Úlist_from_dependsÚdatasources)Údependss    r!   Úget_datasource_listrÙ   Ú  s   € Ü×$Ñ$ W¬kÓ:Ð:r"   Ú__main__)Úargv)Úlevelr²   zseeded: zud: zvd: z	network: rH   )%re   Úloggingr   Ú	functoolsr   Ú	cloudinitr   r   r   r   Úcloudinit.netr   Ú	getLoggerrž   r\   r   r
   r—   rW   r­   rY   rÌ   ÚDEP_FILESYSTEMÚDEP_NETWORKr×   rÙ   ÚsysrÛ   ÚbasicConfigÚDEBUGrD   rk   r}   r~   r   ÚnetworkÚprintr´   r"   r!   ú<module>ré      s%  ðó Û Û 	Ý ç 3Ó 3Ý à€g×Ñ˜Ó!€ôD$˜×*Ñ*ô D$óNó.óB%òPô$@Ð,ô @ðJ ˜×/Ñ/Ð1Ð2Ø˜G×2Ñ2°G×4GÑ4GÐHÐIð€ò;ð ˆzÒÝà€G×Ñ˜gŸm™mÕ,Ø�A‰w€HØ/˜t×/Ñ/°Ó9Ñ€GˆR��WÙ	ˆH�W�IÐ
ÔÙ	ˆD��ˆ+ÔÙ	ˆD��ˆ+ÔÙ	ˆI�g�YÐ
Õ ð r"   