3 \me.@sddlZddlZddlmZddlmZddlmZmZm Z m Z ddl m Z m Z mZmZddlmZddlmZddlmZdd lmZdd lmZejeZd ZGd d d e ZddZddZ ee!e"dddZ#GdddZ$dS)N) signature) ModuleType)DictList NamedTupleOptional)configimporter type_utilsutil) ALL_DISTROS) ConfigMerger)ReportEventStack) FREQUENCIES)InitZcc_c@s"eZdZUeeeee dS) ModuleDetailsN) __name__ __module__ __qualname__rmodulestrname frequencyrrun_argsrr/usr/lib/python3.6/modules.pyrs rcCsX|jdd}|jjdr.|dt|d}|j}|s>dS|jtsTdt|f}|S)N-_z.pyrz%s%s)replacelowerendswithlenstrip startswith MOD_PREFIX)rZ canon_namerrrform_module_name&s   r&cCst|d s d|jks d|jkr6td|d|d|jdtkrftd|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_module2s     r-)module_detailscfgreturncCs2t|jjjdi}|sdS|j|js.dSdS)NZactivate_by_schema_keysTF) frozensetrr'get intersectionkeys)r.r/Zactivate_by_schema_keys_keysrrr _is_activeHsr5c@sxeZdZdedddZeejdddZe e ddd Z e e dd d Z e e d d dZdddZddZdS)ModulesN)initcCs2||_||_d|_|dkr(tdddd}||_dS)Nzmodule-reporterz module-descF)r descriptionZreporting_enabled)r7 cfg_files _cached_cfgrreporter)selfr7r9r;rrr__init__TszModules.__init__)r0cCs<|jdkr0t|jj|jj|j|jjd}|j|_tj|jS)N)paths datasourceZadditional_fnsZbase_cfg) r:r r7r>r?r9r/copydeepcopy)r<Zmergerrrrr/as  z Modules.cfgcCshg}||jkr|S|jj|}|s&|Sx:|D]0}|s:q.t|trX|jd|jiq.t|tri}t|dkr|dj|d<t|dkr|dj|d<t|dkr|dd|d<|r|j|q.t|trJi}d }d |kr|d j|d<d }d |kr|d j|d<d|kr2|dp,g|d<|r`|r`|j|q.t d |t j |fq.W|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,rfreqrNargsFrTrz3Failed to read '%s' item in config, unknown type %s) r/r2 isinstancerappendr#listr"dict TypeErrorr obj_name)r<rZ module_listZcfg_modsitemcontentsZvalidrrr _read_modulesosL              zModules._read_modulesc Csg}x|D]}|d}|jd}|jdp,g}t|}|s s"