ó
    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   € Ü×Ñ×#Ñ# D°6ÔAØˆŒ	ä�G‰G�L‰L˜Ÿ™¨Ó3Ü�G‰G�L‰L˜Ÿ™¨Ó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   ø€ ô ‰G‰OÓØñà(,¯	¯	�˜Ÿ	™	�{ !Ñ$°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Ô:ä×(Ò(¨°e·k±k³mÑ)CÓDˆ
Ø×Ñœ$×-Ò-¨j¸5¿;¹;»=Ñ.HÓIÔJØ×Ñœ$×-Ò-Ð.@À5Ñ.HÓIÔJä”s˜6“{¤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(                  " X¹U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_callbackÚ3DataSourceNoCloud._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   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Û  € à$Ø—k‘kñ
ˆð
 ˆàØØØ"ñ	
ˆð
	ð ˆBÜ×&Ò&Ð'=Ó>ˆFÞÔ+¨B×7Ñ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¯[©[Ó9ˆFØ�L‰L˜Ô%ò	4ð —‘—‘ 
¨HÓ5ˆØÑØ�{‰{‹} Ó(Ü×#Ò#Ø5Ø'-Ø"Lòð
 ×(Ñ(¨Ö/�ðÜ—I‘IÐ>ÀÔDð
!Ü!%§¢Ø°ó"˜ô -¨VÓ<�Fä—I‘IÐ2°CÔ8Ø—L‘L Ô%Ùñ) 0ö> Øð ˜ Ñ,Ó,Ø˜kÑ*¨:Ñ6ˆHØˆIØ×3Ô3�Ø×&Ñ& u×-Ó-Ø %�IÙñ 4ö Ø×+Ñ+¨HÔ5Øô ×'Ò'¨Ó1ˆHô (,×'7Ò'7¸È$Ñ'OÑ$ˆG�R˜˜WÜ�I‰IÐ7¸ÔBô #'×"4Ò"4Ø˜Ñ$ gÐ.ó#ˆF�;Ñð #%ˆ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ˆÔØøô[ ó 	Ü�KŠKœÐ7Ô8Ùð	ûô ó 	Ü�KŠKœÐ@ÔAÙð	ûô" ó ÛðûôF &ó !ÜŸ™ØGØØ!ôó
 !ð!ûô ó Ø—w‘w¤%§,¡,Ó.Øö /ûä×,Ñ,ó Ü—K’KÜÐ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+   € à×"×"Ü+/¯;ª;¯=©=¡%¸iˆDÔØ×"Ñ"Ð"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   € à�9‰9×Ñ ×'Ñ'Ø,Ñà)ÐÛ,¨d¯i¬iÐ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ÑBˆDÜ—’  [Ñ 1Ó2ˆBÞ�g“mØ‘{Ò"ñ $‰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Óñ à—8‘8˜JÓ'ˆÞØ×"Ñ"Ø<÷ñ ô ")×!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  pšX—;   a  Xy   n	X¡U	'   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à�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Øˆ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à�J‰J�{ BÓ'€EÜ�f˜[Ñ)¬4×0Ñ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                   ó.   • \ 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)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.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×;¸ó
ç
‰%‹'ð 	ð —k‘k×'Ñ'Ó)¨=Ð9Ó9Ü�I‰Ið(àôð
 ˜Ó&ÙÔ Øà�L‰L×Ñ˜\¨2Ó.ß‰S�˜BÓß‰S�‹_õô �I‰Ið(àôð
 Ø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   € Ü×$Ò$ W¬kÓ:Ð: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Ñ2°G×4GÑ4GÐHÐIð€ò;ð ˆzÓÝà×Ò˜gŸm™mÒ,Ø�A‰w€HØ#×/Ò/°Ó9Ñ€GˆR��WÙ	ˆH�W�IÐ
ÔÙ	ˆD��ˆ+ÔÙ	ˆD��ˆ+ÔÙ	ˆI�g�YÐ
Õ ð r$   