a 'Dg4@sddlZddlZddlmZddlmZddlmZmZm Z m Z ddl m Z m Z mZmZmZmZddlmZddlmZddlmZdd lmZdd lmZeeZd Zd d gZ ddiZ!Gddde Z"ddZ#ddZ$e"e%e&dddZ'GdddZ(dS)N) signature) ModuleType)DictList NamedTupleOptional)configimporter lifecycle performance type_utilsutil) ALL_DISTROS) ConfigMerger)ReportEventStack) FREQUENCIES)InitZcc_Z cc_migratorZcc_rightscale_userdataZcc_ubuntu_advantageZ cc_ubuntu_proc@s2eZdZUeed<eed<eed<eeed<dS) ModuleDetailsmodulename frequencyrun_argsN)__name__ __module__ __qualname__r__annotations__strrrrdS|tsTdt|f}|S)N-_z.pyrz%s%s)replacelowerendswithlenstrip startswith MOD_PREFIX)rZ canon_namerrrform_module_name9s   r)cCst|drd|jvsd|jvr4td|d|d|jdtvrdtd|d|d|jddt|d rtd|d|d dS) NmetardistroszModule 'z ' with name 'z4' MUST have a 'meta' attribute of type 'MetaSchema'.z' has an invalid frequency .ZschemazX' has a JSON 'schema' attribute defined. Please define schema in cloud-init-schema,json.)hasattrr* ValueErrorr)modrrrrvalidate_moduleEs& r0)module_detailscfgreturncCs2t|jjdi}|sdS||s.dSdS)NZactivate_by_schema_keysTF) frozensetrr*get intersectionkeys)r1r2Zactivate_by_schema_keys_keysrrr _is_active[sr8c@sxeZdZdedddZeejdddZe e ddd Z e e dd d Z e e d d dZdddZddZdS)ModulesN)initcCs2||_||_d|_|dur(tdddd}||_dS)Nzmodule-reporterz module-descF)r descriptionZreporting_enabled)r: cfg_files _cached_cfgrreporter)selfr:r<r>rrr__init__gszModules.__init__)r3cCs<|jdur0t|jj|jj|j|jjd}|j|_t|jS)N)paths datasourceZadditional_fnsZbase_cfg) r=rr:rArBr<r2copydeepcopy)r?Zmergerrrrr2ts z Modules.cfgcCs`g}||jvr|S|j|}|s&|S|D].}|s6q*t|trT|d|iq*t|tri}t|dkr~|d|d<t|dkr|d|d<t|dkr|dd|d<|r||q*t|trDi}d }d |vr|d |d<d }d |vr|d |d<d|vr,|dp&g|d<|rZ|rZ||q*t d |t |fq*|S)aURead the modules from the config file given the specified name. Returns a list of module definitions. E.g., [ { "mod": "bootcmd", "freq": "always", "args": "some_arg", } ] Note that in the default case, only "mod" will be set. r/rfreqr!NargsFrTrz3Failed to read '%s' item in config, unknown type %s) r2r5 isinstancerappendr&listr%dict TypeErrorr obj_name)r?rZ module_listZcfg_modsitemcontentsZvalidrrr _read_modulessT               zModules._read_modulesc Cs.g}|D]}|d}|d}|dp,g}t|}|sr2rrT parametersr%r rUupdater ZTimedrunZdeltamessage Exceptionr Zlogexc)r?r]ZccZfailuresZ which_ranr/rrGrHrun_nameZdescZmyrepZ func_argsZfunc_signatureZ func_paramsZtimerZranZ_rerrr _run_modulessT       (.&zModules._run_modulescCs&|||d}|g}||}||S)N)r/rHrG)r_rl)r?r^rHrGZ mod_to_ber\r]rrr run_single7s zModules.run_singlecCs||}||}|jjj}g}g}|jdg}g}g} |D]} | \} } } }| durZq@| jd}t| |js|| | q@|r|t gkr||vr| |vr| | q@| | | | | | |gq@|rt dd ||rt dd |||r t dd ||| S) zRuns all modules in the given section. section_name - One of the modules lists as defined in /etc/cloud/cloud.cfg. One of: - cloud_init_modules - cloud_config_modules - cloud_final_modules Zunverified_modulesNr+z?Skipping modules '%s' because no applicable config is provided.,zSkipping modules '%s' because they are not verified on distro '%s'. To run anyway, add them to 'unverified_modules' in config.z running unverified_modules: '%s'z, )rQr_r:Zdistrorr2r5r*r8rJrrYrZjoinrl)r?Z section_namer\r]Z distro_nameZskippedZforcedZ overriddenZinapplicable_modsZ active_modsr1r/rZ_freq_argsZworked_distrosrrr run_sectionCsJ         zModules.run_section)NN)NN)rrrrr@propertyrZConfigr2rrrQrr_rlrmrqrrrrr9fs  ;C7 r9))rCZlogginginspectrtypesrtypingrrrrZ cloudinitrr r r r r Zcloudinit.distrosrZcloudinit.helpersrZcloudinit.reporting.eventsrZcloudinit.settingsrZcloudinit.stagesrZ getLoggerrrYr(rXrVrr)r0rLboolr8r9rrrr s,