a 'Dg?@s8ddlZddlZddlZddlmZddlmZmZmZm Z ddl m Z e e ZGdddejZdddZdd d Zdd d Zd dZGdddeZeejffeejejffgZddZe dkr4ddlmZejejdedZe e\Z Z!Z"Z#e$de e$de!e$de"e$de#dS)N)partial)dmi lifecyclesourcesutil)enicsveZdZdZddZfddZddZdd Zed d Z e d d dZ ddZ ddZ ddZeddZZS)DataSourceNoCloudNoCloudcCsVtj||||d|_tj|jdtj|jdg|_d|_d|_ d|_ d|_ dS)Nnocloud nocloud-net)/file://) r DataSource__init__seedospathjoinseed_dir seed_dirssupported_seed_starts_network_config _network_eniselfsys_cfgZdistropathsrG/usr/lib/python3.9/site-packages/cloudinit/sources/DataSourceNoCloud.pyrszDataSourceNoCloud.__init__csDtd|jr d|jdnd|jtjkr>d|jdndS)z@append seed and dsmode info when they contain non-default values z[seed=]z[dsmode=)super__str__rdsmoderDSMODE_NETWORKr __class__rrr#&s zDataSourceNoCloud.__str__cCs|td}|tdtd|}|td||td|tt|t|@}|jdd|S)Nz TYPE=vfatz TYPE=iso9660zLABEL=%szLABEL_FATBOOT=%sT)reverse)rZfind_devs_withextendupperlowerlistsetsort)rlabelZfslistZ label_listZdevlistrrr _get_devices3s  zDataSourceNoCloud._get_devicesc Csd|jd}g}idddd}z8i}td}|rTt||rT|dt|d|i}Wn tyvtt dYd S0z(i}t|r|d t|d|i}Wn tytt d Yd S0d dgd dgd}|j D]X}z>tj |fi|}||t d|t||}Wq4Wqt y0Yq0q|jdr^|d|jd|dd<d |jvrd|jvrt||j}|ddd} |jdd} | dur| dkrtjdddd|| D]} zvt d| zt| | |}Wn*t y"t d| | YWqYn0t||}t d| || WqWnXty} z| jtjkrpWYd} ~ n,d} ~ 0tjytt d| Yn0qt|d krd Sd|dvrx|dd} d }|jD]}| |r|}qq|s|| d St| } tj| dd!\}}}}t d"| t |d|g|d<||d <||d <||d<|| t |d|g|d<|!|dd#g|_|jt"j#krt d$||jd Sd%$||_%|d|_&|d |_'|d |_(|d|_)|dd&|_*d'S)(Nr ) instance-idr$r!) meta-data user-data vendor-datanetwork-configsystem-serial-numberrr3zUnable to parse dmi dataFcmdlinez!Unable to parse command line datar4r5r6)requiredZoptionalzUsing seeded data from %sseedfromZds_config_seedfromZ ds_configcSstj|fi|SN)rpathprefix2dict)Zmpdatarrr_pp2d_callbacksz3DataSourceNoCloud._get_data.._pp2d_callbackZfs_labelZcidatazCustom fs_label keys24.3z(This key isn't supported by ds-identify.Z deprecatedZdeprecated_versionZ 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 datar)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 ExceptionrZlogexcLOGrr<debug ValueErrorZds_cfggetr,r deprecater1Zmount_cbwarningOSErrorerrnoENOENTZMountFailedErrorlenr startswith_log_unusable_seedfromZ sub_dmi_vars read_seeded mergemanydictZ_determine_dsmoderZDSMODE_DISABLEDrrmetadataZ userdata_rawZvendordata_rawrr)rdefaultsfoundZmydatamdserialZ pp2d_kwargsrseededr>r0dever:Z seedfoundprotomd_seedudvdnetworkrrr _get_data?s                                    zDataSourceNoCloud._get_datacCs|jstrdnd|_|jS)NZlxdr )Z_platform_typerZis_lxdr&rrr platform_typeszDataSourceNoCloud.platform_typer:cCstd||j|dS)!Stage-specific level and message.zN%s only uses seeds starting with %s - will try to use %s in the network stage.N)rHinforrr:rrrrSs z(DataSourceNoCloud._log_unusable_seedfromcCstjS)z=Return unknown when 'cloud-name' key is absent from metadata.)rZMETADATA_UNKNOWNr&rrr_get_cloud_namesz!DataSourceNoCloud._get_cloud_namecCs$|jdrd}nd}d||jfS)z/Return the subplatform metadata source details.z/devz config-diskzseed-dirz%s (%s))rrR)rZsubplatform_typerrr_get_subplatforms z"DataSourceNoCloud._get_subplatformcCs:|}|sdSt|d|jg}t|d}|s2dS||kS)Nr)dirs)Zget_instance_idgetattrr_quick_read_instance_id)rrcurrentrkZquick_idrrrcheck_instance_ids z#DataSourceNoCloud.check_instance_idcCs8|jdur2|jdur2tjddddt|j|_|jS)Nz$Eni network configuration in NoCloudr?z,You can use network v1 or network v2 insteadr@)rrrrLrZconvert_eni_datar&rrrnetwork_configs  z DataSourceNoCloud.network_config)__name__ __module__ __qualname__dsnamerr#r1rcpropertyrdstrrSrirjrorp __classcell__rrr'rrs  &  rc Cs|dur g}d}i}t|r,||vr,||S|D]^}|dur>q0z s6     ! (E