[h?ddlZddlZddlZddlmZddlmZmZmZm Z ddl m Z eje ZGddejZddZddZdd Zd ZGd d eZeej,ffeej,ej.ffgZd Ze dk(rlddlmZej8ej:edZe j>e\Z Z!Z"Z#e$de e$de!e$de"e$de#yy)N)partial)dmi lifecyclesourcesutil)enicreZdZdZdZfdZdZdZedZ de fdZ d Z d Z d Zed ZxZS) DataSourceNoCloudNoCloudc@tjj||||d|_tj j |jdtj j |jdg|_d|_d|_ d|_ d|_ y)Nnocloud nocloud-net)/file://) r DataSource__init__seedospathjoinseed_dir seed_dirssupported_seed_starts_network_config _network_eniselfsys_cfgdistropathss E/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceNoCloud.pyrzDataSourceNoCloud.__init__sy##D'65A GGLL 3 GGLL 7  %5"# ct|dz|jrd|jdndz|jtj k7rd|jdzSdzS)z@append seed and dsmode info when they contain non-default values z[seed=]z[dsmode=)super__str__rdsmoderDSMODE_NETWORK)r __class__s r!r(zDataSourceNoCloud.__str__&ss GO  (,  {!$r ; ;;'"8"884;;-q)      r"ctjd}|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_devices3s$$[1 d)).9:((ekkm)CD $--j5;;=.HIJ$--.@5.HIJs6{S_45 T "r"c 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} | | j!dk7rt#j$ddd|j'| D]e} tjd|  tj(| | |}t ||}tjd| |j | n|sy d|dvr|dd} d }|j4D]}| j7|s|}n|s|j9| y tj:| } tj<| d\}}}}tjd | tj>|d|g|d<||d <||d <|j | tj>|d|g|d<|jA|djd!g|_|jtBjDk(r"tjd"||jy d#jG||_$|d|_%|d |_&|d |_'|d|_(|djd$|_)y%#t $rtjtdYy wxYw#t $rtjtd Yy wxYw#t$rYwxYw#t$rtj+d| | YwxYw#t,$r)} | j.t.j0k7rYd} ~ d} ~ wtj2$rtjtd| YwxYw)&Nr ) instance-idr)r&) meta-data user-data vendor-datanetwork-configsystem-serial-numberrr<zUnable to parse dmi dataFcmdlinez!Unable to parse command line datar=r>r?)requiredoptionalzUsing seeded data from %sseedfromds_config_seedfrom ds_configc.tj|fi|SN)rpathprefix2dict)mpdatas r!_pp2d_callbackz3DataSourceNoCloud._get_data.._pp2d_callbacks''3d3 3r"fs_labelcidatazCustom fs_label keys24.3z(This key isn't supported by ds-identify. deprecateddeprecated_version extra_messagezAttempting 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 data)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 ExceptionrlogexcLOGrrIdebug ValueErrords_cfggetr1r deprecater9mount_cbwarningOSErrorerrnoENOENTMountFailedErrorr startswith_log_unusable_seedfrom sub_dmi_vars read_seeded mergemanydict_determine_dsmoderDSMODE_DISABLEDrrmetadata userdata_rawvendordata_rawrr)rdefaultsfoundmydatamdserial pp2d_kwargsrseededrLr5deverD seedfoundprotomd_seedudvd_s r! _get_datazDataSourceNoCloud._get_data?s$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  {{}(##5'-"L ((/ II>D !!%"-VV  , ,k*:6HI33 &&u- %I ++H5''1H"&!1!1(D!I GRQ II7 B#'"4"4 $g.#F; #%F; $&F= ! LL "#00 K ( + {,, K $ $X . /   ;;'11 1 II8$  HHUO {+ ";/$]3%&67";/334HIY  KK7 8   KK@ A "  F&! G! ! !ww%,,./,,KKGsyAO#,P $A P5Q,,Q3Q,##P P  #P21P25 QQ Q)%Q,(Q))Q,, S5R1S Scl|jstjrdnd|_|jS)Nlxdr )_platform_typeris_lxdrs r! platform_typezDataSourceNoCloud.platform_types)""+/;;=%iD """r"rDcHtjd||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\inforrrDs r!riz(DataSourceNoCloud._log_unusable_seedfroms"  $   & &   r"c"tjS)z=Return unknown when 'cloud-name' key is absent from metadata.)rMETADATA_UNKNOWNrs r!_get_cloud_namez!DataSourceNoCloud._get_cloud_names'''r"cf|jjdrd}nd}|d|jdS)z/Return the subplatform metadata source details.z/devz config-diskzseed-dirz ())rrh)rsubplatform_types r!_get_subplatformz"DataSourceNoCloud._get_subplatforms/ 99   ', ) ,dii88r"c|j}|syt|d|jg}t|}|sy||k(S)Nr)dirs)get_instance_idgetattrr_quick_read_instance_id)rrcurrentrquick_ids r!check_instance_idz#DataSourceNoCloud.check_instance_idsI&&(t[4==/:*57""r"c|jH|j>% 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)Nr<r?r=r>)copyr` isinstancedictrrrl)currxretnewmds r!rYrY}s ((*C JJ{B 'E f[)4 0vk23))3{+;U*CDC  zz"# $vzz:J/K L f!+.K#M2M Jr"c$eZdZdZdefdZdZy)DataSourceNoCloudNetcBtj||||d|_y)Nr)r rrrs r!rzDataSourceNoCloudNet.__init__s ""4&%@& "r"rDcHtjd||j|y)rz6%s only uses seeds starting with %s - %s is not valid.N)r\rcrrs r!riz+DataSourceNoCloudNet._log_unusable_seedfroms  D   & &   r"cttjddd}dtjk(r|ytj t jdxsdj}||jjdfvr#tjd ||dk(r|y|jjd ijd ijd rtjd |yy)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 namez24.1zgUse 'nocloud' instead, which uses the seedfrom protocolscheme (http// or file://) to decide how to run.rPrTr@r&zJMachine is configured by dmi serial number to run on single datasource %s. datasourcer rDzMMachine is configured by system configuration to run on single datasource %s.F)rrrar parse_cmdlineparse_cmdline_or_dmirrVr1rr\r]rr`)rlog_deprecatedrvs r! ds_detectzDataSourceNoCloudNet.ds_detects!   :%C   G113 3  --   4 5 ; %'  dkk'')=9 9 II(  &  LL  \2 . SB  S_  II(  r"N)rrrrrrirrr"r!rrs  s -r"rc6tj|tSrH)rlist_from_depends datasources)dependss r!get_datasource_listrs  $ $Wk ::r"__main__)argv)levelrzseeded: zud: zvd: z network: rH)%reloggingr functoolsr cloudinitrrrr cloudinit.netr getLoggerrr\rr rrWrrYrDEP_FILESYSTEM DEP_NETWORKrrsysr basicConfigDEBUGrDrkr}r~rnetworkprintrr"r!rs%  33g!D$**D$N.B%P$@,@J//12G22G4G4GHI ; zGgmm,AwH/t//9GRW HWI  D+ D+ IgY  r"