Ë
    x[hK5  ã                   ó"  — d dl Z d dlZd dlmZ d dlmZ d dlmZmZm	Z	m
Z
 d dlmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZ d d	lmZ d d
lmZ  ej8                  e«      ZdZg d¢Z ddiZ! G d„ de	«      Z"d„ Z#d„ Z$de"de%de&fd„Z' G d„ d«      Z(y)é    N)Ú	signature)Ú
ModuleType)ÚDictÚListÚ
NamedTupleÚOptional)ÚconfigÚimporterÚ	lifecycleÚperformanceÚ
type_utilsÚutil)ÚALL_DISTROS)ÚConfigMerger)ÚReportEventStack)ÚFREQUENCIES)ÚInitÚcc_)Úcc_emit_upstartzcc_refresh_rmc_and_interface.pyÚcc_migratorÚcc_rightscale_userdataÚcc_ubuntu_advantageÚcc_ubuntu_proc                   ó<   — e Zd ZU eed<   eed<   eed<   ee   ed<   y)ÚModuleDetailsÚmoduleÚnameÚ	frequencyÚrun_argsN)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__Ústrr   © ó    ú:/usr/lib/python3/dist-packages/cloudinit/config/modules.pyr   r   4   s   … ØÓØ
ƒIØƒNØ�3‰iÔr&   r   c                 óî   — | j                  dd«      }|j                  «       j                  d«      r|dt        |«      dz
   }|j	                  «       }|sy |j                  t        «      s
t        ›|›�}|S )Nú-Ú_z.pyr   é   )ÚreplaceÚlowerÚendswithÚlenÚstripÚ
startswithÚ
MOD_PREFIX)r   Ú
canon_names     r'   Úform_module_namer4   ;   sp   € Ø—‘˜c 3Ó'€JØ×ÑÓ×"Ñ" 5Ô)Ø ¤S¨£_°qÑ%8Ð:ˆ
Ø×!Ñ!Ó#€JÙØØ× Ñ ¤Ô,Ý)©:Ð6ˆ
ØÐr&   c           	      ó"  — t        | d«      rd| j                  vsd| j                  vrt        d| › d|› d�«      ‚| j                  d   t        vr"t        d| › d|› d| j                  d   › d�«      ‚t        | d	«      rt        d| › d|› d
�«      ‚y )NÚmetar   ÚdistroszModule '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.)Úhasattrr6   Ú
ValueErrorr   )Úmodr   s     r'   Úvalidate_moduler=   G   sÅ   € ä�C˜Ô Ø˜cŸh™hÑ&Ø˜CŸH™HÑ$äØ�s�e˜=¨¨ð /$ð $ó
ð 	
ð ‡x�x�Ñ¤KÑ/ÜØ�s�e˜=¨¨Ð.IØ�x‰x˜Ñ$Ð% Qð(ó
ð 	
ô ˆs�HÔÜØ�s�e˜=¨¨ð /Gð Gó
ð 	
ð r&   Úmodule_detailsÚcfgÚreturnc                 ó¨   — t        | j                  j                  j                  di «      «      }|sy|j	                  |j                  «       «      syy)NÚactivate_by_schema_keysTF)Ú	frozensetr   r6   ÚgetÚintersectionÚkeys)r>   r?   Úactivate_by_schema_keys_keyss      r'   Ú
_is_activerH   ]   sL   € Ü#,Ø×Ñ×"Ñ"×&Ñ&Ð'@À"ÓEó$Ð ñ (ØØ'×4Ñ4°S·X±X³ZÔ@ØØr&   c                   óˆ   — e Zd Zddefd„Zedej                  fd„«       Zde	e
   fd„Zde	e   fd„Zde	e   fd	„Zdd
„Zd„ Zy)ÚModulesNÚinitc                 ó\   — || _         || _        d | _        |€t        ddd¬«      }|| _        y )Nzmodule-reporterzmodule-descF)r   ÚdescriptionÚreporting_enabled)rK   Ú	cfg_filesÚ_cached_cfgr   Úreporter)ÚselfrK   rO   rQ   s       r'   Ú__init__zModules.__init__i   s:   € ØˆŒ	Ø"ˆŒà48ˆÔØÐÜ'Ø&Ø)Ø"'ôˆHð
 !ˆ�r&   r@   c                 ó$  — | j                   €ft        | j                  j                  | j                  j                  | j
                  | j                  j                  ¬«      }|j                  | _         t        j                  | j                   «      S )N)ÚpathsÚ
datasourceÚadditional_fnsÚbase_cfg)	rP   r   rK   rU   rV   rO   r?   ÚcopyÚdeepcopy)rR   Úmergers     r'   r?   zModules.cfgv   sg   € ð ×ÑÐ#Ü!Ø—i‘i—o‘oØŸ9™9×/Ñ/Ø#Ÿ~™~ØŸ™Ÿ™ô	ˆFð  &Ÿz™zˆDÔä�}‰}˜T×-Ñ-Ó.Ð.r&   c           	      ó  — g }|| j                   vr|S | j                   j                  |«      }|s|S |D �]T  }|sŒt        |t        «      r"|j	                  d|j                  «       i«       Œ9t        |t        «      rui }t        |«      dk\  r|d   j                  «       |d<   t        |«      dk\  r|d   j                  «       |d<   t        |«      dk\  r|dd |d<   |sŒ¬|j	                  |«       Œ¾t        |t        «      rei }d	}d
|v r|d
   j                  «       |d<   d}d|v r|d   j                  «       |d<   d|v r|d   xs g |d<   |s�Œ|s�Œ |j	                  |«       �Œ3t        d|›dt        j                  |«      ›�«      ‚ |S )aU  Read 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<   é   r   é   Úfreqr+   NÚargsFr   Tr   zFailed to read 'z' item in config, unknown type )r?   rD   Ú
isinstancer$   Úappendr0   Úlistr/   ÚdictÚ	TypeErrorr   Úobj_name)rR   r   Úmodule_listÚcfg_modsÚitemÚcontentsÚvalids          r'   Ú_read_moduleszModules._read_modules„   sœ  € ð #%ˆØ�t—x‘xÑØÐØ—8‘8—<‘< Ó%ˆÙØÐØó $	ˆDÙØÜ˜$¤Ô$Ø×"Ñ"à˜tŸz™z›|ðõô
 ˜D¤4Ô)Ø�ä�t“9 ’>Ø&*¨1¡g§m¡m£o�H˜U‘OÜ�t“9 ’>Ø'+¨A¡w§}¡}£�H˜VÑ$Ü�t“9 ’>Ø'+¨A¨B x�H˜VÑ$ÚØ×&Ñ& xÕ0Ü˜D¤4Ô)Ø�Ø�Ø˜T‘>Ø&*¨6¡l×&8Ñ&8Ó&:�H˜U‘OØ �EØ $Ñ&Ø'+¨KÑ'8×'>Ñ'>Ó'@�H˜VÑ$Ø˜T‘>Ø'+¨F¡|Ò'9°r�H˜VÑ$Û£Ø×&Ñ& xÖ0åâœZ×0Ñ0°Ô6ð8óð ðC$	ðJ Ðr&   c           	      óÔ  — g }|D �]_  }|d   }|j                  d«      }|j                  d«      xs g }t        |«      }|sŒ=|r'|t        vrt        j                  d|› d|› �d¬«       d}|t
        v r.t        j                  d	|› d
t
        |   › d�d¬«       t
        |   }t        j                  |dt        j                  t        «      gdg«      \  }}	|s;|t        v rt        j                  d|dd «       nt        j                  d||	«       �Œt        j                  |d   «      }
t!        |
|«       |€|
j"                  d   }|j%                  t'        |
|||¬«      «       �Œb |S )z¾Convert 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.
        r<   r_   r`   zConfig specified module z has an unknown frequency z22.1©Ú
deprecatedÚdeprecated_versionNzModule has been renamed from z to z/. Update any references in /etc/cloud/cloud.cfgz24.1Ú Úhandlez\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)r   r   )r   r   r   r   )rD   r4   r   r   Ú	deprecateÚRENAMED_MODULESr
   Úfind_moduler   rf   r	   ÚREMOVED_MODULESÚLOGÚinfoÚwarningÚimport_moduler=   r6   rb   r   )rR   Úraw_modsÚmostly_modsÚraw_modÚraw_namer_   r   Úmod_nameÚmod_locsÚlooked_locsr<   s              r'   Ú_fixup_moduleszModules._fixup_modules¿   s   € ð ˆØó 9	ˆGØ˜u‘~ˆHØ—;‘;˜vÓ&ˆDØ—{‘{ 6Ó*Ò0¨bˆHÜ'¨Ó1ˆHÙØÙ˜¤KÑ/Ü×#Ñ#à2°8°*ð =&Ø&* Vð-ð (.õð �Øœ?Ñ*Ü×#Ñ#à7¸°zÀÜ*¨8Ñ4Ð5ð 6>ð>ð (.õô +¨8Ñ4�Ü$,×$8Ñ$8Ø˜2œz×2Ñ2´6Ó:Ð;¸h¸Zó%Ñ!ˆH�kñ ØœÑ.Ü—H‘HðIà   ˜õô —K‘KØFØ Ø#ôñ
 Ü×(Ñ(¨°!©Ó5ˆCÜ˜C Ô*Øˆ|à—x‘x Ñ,�Ø×ÑÜØØ!Ø"Ø%ô	öðe9	ðt Ðr&   r|   c           	      ó|  — | j                   j                  «       }g }g }|D �]7  \  }}}}	 t        j                  d|||«       |j	                  |«       d|› �}	d|	›d|›�}
t        |	|
| j                  ¬«      }|| j                  ||dœ}|5  t        |j                  «      }|j                  }t        |«      dk(  r.t        j                  dd	¬
«       |j                  dt        i«       t        j                   dd¬«      5 }|j#                  |	|j                  ||¬«      \  }}d d d «       r|	› dj$                  d›d�|_        n
d|	z  |_        d d d «       �Œ: ||fS # 1 sw Y   Œ=xY w# 1 sw Y   ŒxY w# t(        $ r:}t+        j,                  t        d||«       |j	                  ||f«       Y d }~�Œ•d }~ww xY w)Nz(Running module %s (%s) with frequency %szconfig-zrunning z with frequency )r   rM   Úparent)r   r?   Úcloudr`   é   z%Config modules with a `log` parameterz23.2rn   Úlogrq   Úskip)Úlog_mode)r_   z ran successfully and took z.3fz secondsz%s previously ranzRunning module %s (%s) failed)rK   Úcloudifyrw   Údebugrb   r   rQ   r?   r   rr   Ú
parametersr/   r   rs   Úupdater   ÚTimedÚrunÚdeltaÚmessageÚ	Exceptionr   Úlogexc)rR   r|   ÚccÚfailuresÚ	which_ranr<   r   r_   r`   Úrun_nameÚdescÚmyrepÚ	func_argsÚfunc_signatureÚfunc_paramsÚtimerÚranÚ_rÚes                      r'   Ú_run_moduleszModules._run_modules  sÚ  € Ø�Y‰Y×ÑÓ!ˆð ˆØˆ	Ø%0ó .	+Ñ!ˆC��t˜Tð-+Ü—	‘	Ø>ÀÀcÈ4ôð
 × Ñ  Ô&à$ T FÐ+‘â9AÁ4ÐH�Ü(Ø!¨t¸D¿M¹Mô�ð !ØŸ8™8ØØ ñ	�	ð ñ GÜ%.¨s¯z©zÓ%:�NØ"0×";Ñ";�KÜ˜;Ó'¨1Ò,Ü!×+Ñ+Ø'NØ/5õð "×(Ñ(¨%´¨Ô6ä$×*Ñ*¨2¸Ô?ð À5Ø"$§&¡&Ø$ c§j¡j°)À$ð #)ó #™˜˜R÷ñ à'˜jð )$Ø$)§K¡K°Ð#4°Hð>ð �ð
 )<¸hÑ(F˜œ÷)Gùð-.	+ð^ ˜8Ð$Ð$÷ð ú÷Gð Gûô, ò +Ü—‘œCÐ!@À$ÈÔLØ—‘  q 	×*Ò*ûð+úsI   «A!E8ÂA5E,Ä#E Ä$-E,ÅE8Å E)Å%E,Å,E5	Å1E8Å8	F;Æ/F6Æ6F;c                 óX   — |||dœ}|g}| j                  |«      }| j                  |«      S )N)r<   r`   r_   )r‚   r¡   )rR   r   r`   r_   Ú	mod_to_ber{   r|   s          r'   Ú
run_singlezModules.run_single9  s>   € ð ØØñ
ˆ	ð �;ˆØ×)Ñ)¨(Ó3ˆØ× Ñ  Ó-Ð-r&   c                 ó  — | j                  |«      }| j                  |«      }| j                  j                  j                  }g }g }| j
                  j                  dg «      }g }g }	|D ]�  }
|
\  }}}}|€Œ|j                  d   }t        |
| j
                  «      s|j                  |«       ŒD|r5|t        gk7  r+||vr'||vr|j                  |«       Œj|j                  |«       |	j                  ||||g«       Œ‘ |r%t        j                  ddj                  |«      «       |r&t        j                  ddj                  |«      |«       |r%t        j                  ddj                  |«      «       | j                  |	«      S )zóRuns 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_modulesr7   z?Skipping modules '%s' because no applicable config is provided.ú,zSkipping 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, )rl   r‚   rK   Údistror   r?   rD   r6   rH   rb   r   rw   rx   Újoinr¡   )rR   Úsection_namer{   r|   Údistro_nameÚskippedÚforcedÚ
overriddenÚinapplicable_modsÚactive_modsr>   r<   r   Ú_freqÚ_argsÚworked_distross                   r'   Úrun_sectionzModules.run_sectionE  s}  € ð ×%Ñ% lÓ3ˆØ×)Ñ)¨(Ó3ˆØ—i‘i×&Ñ&×+Ñ+ˆàˆØˆØ—X‘X—\‘\Ð"6¸Ó;ˆ
ØÐØˆØ)ò 	:ˆNØ(6Ñ%ˆS�$˜˜uØˆ{ØØ ŸX™X iÑ0ˆNÜ˜n¨d¯h©hÔ7Ø!×(Ñ(¨Ô.Øñ  .´[°MÒ"AØ nÑ4Ø :Ñ-ØŸ™ tÔ,Ø Ø—M‘M $Ô'Ø×Ñ  T¨5°%Ð8Õ9ð'	:ñ* Ü�H‰Hðà—‘Ð*Ó+ôñ
 Ü�H‰Hð2ð —‘˜Ó!Øôñ Ü�H‰HÐ7¸¿¹À6Ó9JÔKà× Ñ  Ó-Ð-r&   )NN)r    r!   r"   r   rS   Úpropertyr	   ÚConfigr?   r   r   rl   r   r‚   r¡   r¤   r´   r%   r&   r'   rJ   rJ   h   sn   „ ñ!˜Tó !ð ð/�V—]‘]ò /ó ð/ð9 T¨$¡Zó 9ðvA¨$¨}Ñ*=ó AðF5%¨¨]Ñ(;ó 5%ón
.ó8.r&   rJ   ))rY   ÚloggingÚinspectr   Útypesr   Útypingr   r   r   r   Ú	cloudinitr	   r
   r   r   r   r   Úcloudinit.distrosr   Úcloudinit.helpersr   Úcloudinit.reporting.eventsr   Úcloudinit.settingsr   Úcloudinit.stagesr   Ú	getLoggerr    rw   r2   rv   rt   r   r4   r=   rd   ÚboolrH   rJ   r%   r&   r'   ú<module>rÃ      sž   ðó Û Ý Ý ß 3Ó 3÷÷ õ *Ý *Ý 7Ý *Ý !à€g×Ñ˜Ó!€ð €
ò
€ð ˜?ð€ô
�Jô ò	ò
ð,˜}ð °4ð ¸Dó ÷U.ò U.r&   