o x[hK5@sddlZddlZddlmZddlmZddlmZmZm Z m Z ddl m Z m Z mZmZmZmZddlmZddlmZddlmZdd lmZdd lmZeeZd Zgd Z d diZ!Gddde Z"ddZ#ddZ$de"de%de&fddZ'GdddZ(dS)N) signature) ModuleType)DictList NamedTupleOptional)configimporter lifecycle performance type_utilsutil) ALL_DISTROS) ConfigMerger)ReportEventStack) FREQUENCIES)Initcc_)cc_emit_upstartzcc_refresh_rmc_and_interface.py cc_migratorcc_rightscale_userdatacc_ubuntu_advantage cc_ubuntu_proc@s2eZdZUeed<eed<eed<eeed<dS) ModuleDetailsmodulename frequencyrun_argsN)__name__ __module__ __qualname__r__annotations__strrr#r#:/usr/lib/python3/dist-packages/cloudinit/config/modules.pyr4s rcCsX|dd}|dr|dt|d}|}|sdS|ts*dt|f}|S)N-_z.pyrz%s%s)replacelowerendswithlenstrip startswith MOD_PREFIX)r canon_namer#r#r$form_module_name;s   r0cCst|drd|jvsd|jvrtd|d|d|jdtvr2td|d|d|jddt|d rBtd|d|d dS) NmetardistroszModule 'z ' with name 'z4' MUST have a 'meta' attribute of type 'MetaSchema'.z' has an invalid frequency .schemazX' has a JSON 'schema' attribute defined. Please define schema in cloud-init-schema,json.)hasattrr1 ValueErrorr)modrr#r#r$validate_moduleGs$   r8module_detailscfgreturncCs2t|jjdi}|sdS||sdSdS)Nactivate_by_schema_keysTF) frozensetrr1get intersectionkeys)r9r:activate_by_schema_keys_keysr#r#r$ _is_active]srBc@sxeZdZddefddZedejfddZde e fdd Z de e fd d Z d e e fd dZdddZddZdS)ModulesNinitcCs2||_||_d|_|durtdddd}||_dS)Nzmodule-reporterz module-descF)r descriptionreporting_enabled)rD cfg_files _cached_cfgrreporter)selfrDrGrIr#r#r$__init__is zModules.__init__r;cCs<|jdurt|jj|jj|j|jjd}|j|_t|jS)N)paths datasourceadditional_fnsbase_cfg) rHrrDrLrMrGr:copydeepcopy)rJmergerr#r#r$r:vs  z Modules.cfgcCsPg}||jvr |S|j|}|s|S|D]}|sqt|tr)|d|iqt|trbi}t|dkr>|d|d<t|dkrL|d|d<t|dkrZ|dd|d<|ra||qt|tri}d }d |vry|d |d<d }d |vr|d |d<d|vr|dpg|d<|r|r||qt d |t |f|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. r7rfreqr'NargsFrTrz3Failed to read '%s' item in config, unknown type %s) r:r> isinstancer"appendr,listr+dict TypeErrorr obj_name)rJr module_listcfg_modsitemcontentsvalidr#r#r$ _read_modulessX           zModules._read_modulesc Cs*g}|D]}|d}|d}|dpg}t|}|sq|r2|tvr2tjd|d|ddd}|tvrJtjd |d t|d d dt|}t|d t t gdg\}} |sr|t vrjt d|ddnt d|| qt|d} t| ||dur| jd}|t| |||dq|S)zConvert list of returned from _read_modules() into new format. Invalid modules and arguments are ignored. Also ensures that the module has the required meta fields. r7rUrVzConfig specified module z has an unknown frequency z22.1 deprecateddeprecated_versionNzModule has been renamed from z to z/. Update any references in /etc/cloud/cloud.cfgz24.1handlez\Module `%s` has been removed from cloud-init. It may be removed from `/etc/cloud/cloud.cfg`.r'z,Could not find module named %s (searched %s)rr)rrrr)r>r0rr deprecateRENAMED_MODULESr find_moduler r\rREMOVED_MODULESLOGinfowarning import_moduler8r1rXr) rJraw_mods mostly_modsraw_modraw_namerUrmod_namemod_locs looked_locsr7r#r#r$_fixup_modulessh      zModules._fixup_modulesrqc Cs|j}g}g}|D]\}}}}ztd|||||d|} d| |f} t| | |jd} ||j||d} | Zt|j } | j }t |dkrYt j ddd | d titjd d d }|j| |j | |d\}}Wdn1swwY|r| d|jdd| _nd| | _Wdn1swYWq ty}zttd|||||fWYd}~q d}~ww||fS)Nz(Running module %s (%s) with frequency %szconfig-zrunning %s with frequency %s)rrEparent)rr:cloudrVz%Config modules with a `log` parameterz23.2rclogrfskip)log_mode)rUz ran successfully and took z.3fz secondsz%s previously ranzRunning module %s (%s) failed)rDcloudifyrldebugrXrrIr:rrg parametersr+r rhupdater Timedrundeltamessage Exceptionr logexc)rJrqccfailures which_ranr7rrUrVrun_namedescmyrep func_argsfunc_signature func_paramstimerran_rer#r#r$ _run_moduless`         zModules._run_modulescCs&|||d}|g}||}||S)N)r7rVrU)rwr)rJrtrVrU mod_to_berprqr#r#r$ run_single9s  zModules.run_singlecCs||}||}|jjj}g}g}|jdg}g}g} |D]A} | \} } } }| dur-q | jd}t| |js>| | q |rX|t gkrX||vrX| |vrS| | q | | | | | | |gq |rmt dd ||ryt dd |||rt 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 unverified_modulesNr2z?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, )rbrwrDdistrorr:r>r1rBrXrrlrmjoinr)rJ section_namerprq distro_nameskippedforced overriddeninapplicable_mods active_modsr9r7r_freq_argsworked_distrosr#r#r$ run_sectionEsJ         zModules.run_section)NN)rrr rrKpropertyrConfigr:rrrbrrwrrrr#r#r#r$rChs  ;C 7 rC))rPlogginginspectrtypesrtypingrrrr cloudinitrr r r r r cloudinit.distrosrcloudinit.helpersrcloudinit.reporting.eventsrcloudinit.settingsrcloudinit.stagesr getLoggerrrlr.rkrirr0r8rZboolrBrCr#r#r#r$s*