fv7"ddlZddlZddlZddlmZddlmZmZmZddl m Z eje Z GddejZddZddZdd Zd ZGd d eZeej*ffeej*ej,ffgZd Zy)N)partial)dmisourcesutil)enicZeZdZdZdZdZdZdZedZ dZ dZ d Z ed Z y ) DataSourceNoCloudNoCloudc$tjj||||d|_tj j |jdtj j |jdg|_d|_d|_ y)Nnocloud nocloud-net)/file://) r DataSource__init__seedospathjoinseed_dir seed_dirssupported_seed_startsselfsys_cfgdistropathss E/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceNoCloud.pyrzDataSourceNoCloud.__init__si##D'65A GGLL 3 GGLL 7  %5"c~tjj|}|d|jd|jdS)Nz [seed=z ][dsmode=])rr__str__rdsmode)rroots rr"zDataSourceNoCloud.__str__$s-!!))$/,0$))T[[IIrctjd}|jtjdtjd|jz}|jtjd|j z|jtjd|zt t |t |z}|jd|S)Nz TYPE=vfatz TYPE=iso9660zLABEL=%szLABEL_FATBOOT=%sT)reverse)rfind_devs_withextendupperlowerlistsetsort)rlabelfslist label_listdevlists r _get_deviceszDataSourceNoCloud._get_devices(s$$[1 d)).9:((ekkm)CD $--j5;;=.HIJ$--.@5.HIJs6{S_45 T "rcn d|jd}g}idddd} i}tjd}|r+t||r|j dt |d|i} i}t|r|j d t |d|i}d dgd dgd}|jD]M} tj|fi|}|j |tjd|t ||}n|jjdr&|j d|jd|dd<d |jvr5d|jvr't ||j}|j dd} |jjdd} | y|j!| D]e} tjd|  tj"| | |}t ||}tjd| |j | nt/|dk(ry d|dvr|dd} d }|j0D]}| j3|s|}n|stjd| |y tj4| } tj6| d\}}}tjd| tj8|d|g|d<||d <||d <|j | tj8|d|g|d<|j;|djdg|_|jt<j>k(r"tjd ||jy d!jA||_!|d|_"|d |_#|d |_$|d|_%|djd"|_&y##t $rtjtdYy wxYw#t $rtjtd Yy wxYw#t$rYwxYw#t$rtj%d| | YwxYw#t&$r)} | j(t(j*k7rYd} ~ d} ~ wtj,$rtjtd| Y wxYw)$Nr ) instance-idr#) meta-data user-data vendor-datanetwork-configsystem-serial-numberrr6zUnable to parse dmi dataFcmdlinez!Unable to parse command line datar7r8r9)requiredoptionalzUsing seeded data from %sseedfromds_config_seedfrom ds_configc.tj|fi|SN)rpathprefix2dict)mpdatas r_pp2d_callbackz3DataSourceNoCloud._get_data.._pp2d_callbackus''3d3 3rfs_labelcidatazAttempting to use data from %sz)device %s with label=%s not a valid seed.zUsing data from %sz(Failed to mount %s when looking for datarz Seed from %s not supported by %s)timeoutzUsing seeded cache data from %sr#z&%s: not claiming datasource, dsmode=%s,znetwork-interfacesT)'r#r read_dmi_dataload_cmdline_dataappend_merge_new_seed ExceptionrlogexcLOGrrCdebug ValueErrords_cfggetr2mount_cbwarningOSErrorerrnoENOENTMountFailedErrorlenr startswith sub_dmi_vars read_seeded mergemanydict_determine_dsmoderDSMODE_DISABLEDrrmetadata userdata_rawvendordata_raw_network_config _network_eni)rdefaultsfoundmydatamdserial pp2d_kwargsrseededrFr.dever> seedfoundprotomd_seedudvds r _get_datazDataSourceNoCloud._get_data4s$kk  "   B&&'=>F+B7 U#(+r1BC  B $ Y'(+r1BC%k2&(89 NN D --dBkB T" 5t<(8   ;;??: & LL- ..2kk*.EF;  + $++ %+*D$VT[[9F LL % 4  H5  ((/ II>D !!%"-VV u:?  , ,k*:6HI33 &&u- %I  t-."&D ""+/;;=%iD """rc"tjS)z=Return unknown when 'cloud-name' key is absent from metadata.)rMETADATA_UNKNOWNr|s r_get_cloud_namez!DataSourceNoCloud._get_cloud_names'''rcf|jjdrd}nd}|d|jdS)z/Return the subplatform metadata source details.z/devz config-diskzseed-dirz ())rr])rsubplatform_types r_get_subplatformz"DataSourceNoCloud._get_subplatforms/ 99   ', ) ,dii88rc|j}|syt|d|jg}t|}|sy||k(S)Nr)dirs)get_instance_idgetattrr_quick_read_instance_id)rrcurrentrquick_ids rcheck_instance_idz#DataSourceNoCloud.check_instance_idsI&&(t[4==/:*57""rc|j0|j$tj|j|_|jSrB)rfrgrconvert_eni_datar|s rnetwork_configz DataSourceNoCloud.network_configs?    '  ,'*';';Dzhttp://zhttps://)rrF)r DSMODE_LOCALDSMODE_NETWORKparse_cmdline_datarUr])rr;pairsidstrr#r>s rrLrLs w++, 7112 E v!%w7  t 88J' ""#:;!(!7!7X  $$%56!(!5!5X$DN#$ rc|tj}d|z}d|z|vsd|z|vsyd}|jD]&}|j|s|jdd}(|djd}t |dkDr|dd}nd}d d d d }|D],}|dk(r |jdd\} } | |vr|| } | || <.y #t $r|} d} Y wxYw)Nz %s z %s;Fr5=;rzlocal-hostnamer4r>)hisT)r get_cmdlinesplitr]r\rO) ds_idrr;arglinetoktmpkvpairss2litemkvs rrr4s""$wG UNg %%7)BG}}( >>% iiQ'G( !*  3 C 3x!|ab'!}: FC  2:  ZZQ'FQ 8AAQ   AA s"C CCcz|j}|jdi}t|dtst j |d}t j |d|g|d<|jdr't j |jd|d<d|vr|d|d<d|vr|d|d<|S)Nr6r9r7r8)copyrU isinstancedictrrr`)currnretnewmds rrNrN\s ((*C JJ{B 'E f[)4 0vk23))3{+;U*CDC  zz"# $vzz:J/K L f!+.K#M2M JrceZdZdZdZy)DataSourceNoCloudNetcBtj||||d|_y)Nr)r rrrs rrzDataSourceNoCloudNet.__init__os""4&%@%<"rcrttjddd}dtjk(r|ytj t jdxsdj}||jjdfvr#tjd ||dk(r|yy ) zCheck dmi and kernel commandline 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 namez24.1zgUse 'nocloud' instead, which uses the seedfrom protocolscheme (http// or file://) to decide how to run.) deprecateddeprecated_version extra_messager Tr:r5zJMachine is configured by dmi serial number to run on single datasource %s.F) rr deprecater parse_cmdlineparse_cmdline_or_dmirrKr*rrQrR)rlog_deprecatedrls r ds_detectzDataSourceNoCloudNet.ds_detectss! NN:%C   G113 3  --   4 5 ; %'  dkk'')=9 9 II(  & rN)rrrrrrrrrrns ="rrc6tj|tSrB)rlist_from_depends datasources)dependss rget_datasource_listrs  $ $Wk ::rrB)rYloggingr functoolsr cloudinitrrr cloudinit.netr getLoggerrrQrr rrLrrNrDEP_FILESYSTEM DEP_NETWORKrrrrrrs  ((g!e$**e$P.>%P$','X//12G22G4G4GHI ;r