o
    x[hø  ã                
   @   sî   U d Z ddlZddlZddlZddl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 dd	lmZ d
ZdgZdegeg d¢dœZeed< e e¡Zdd„ Z	d!dededefdd„Zdedede	deddf
dd „Z dS )"zEPackage Update Upgrade Install: update, upgrade, and install packagesé    N)Úsignal_handlerÚsubpÚutil)ÚCloud)ÚConfig)Ú
MetaSchema)ÚALL_DISTROS)Úflush_loggers)ÚPER_INSTANCE)z/var/run/reboot-requiredz/run/reboot-neededz/sbin/rebootÚ!cc_package_update_upgrade_install)Ú
apt_updateÚpackage_updateÚapt_upgradeÚpackage_upgradeÚpackages)ÚidÚdistrosÚ	frequencyÚactivate_by_schema_keysÚmetac                 G   s"   |D ]}t  | |d¡r dS qdS )NFT)r   Úget_cfg_option_bool)ÚcfgÚkeysÚk© r   úT/usr/lib/python3/dist-packages/cloudinit/config/cc_package_update_upgrade_install.pyÚ_multi_cfg_bool_get(   s
   ÿr   é   é   é   Úwait_attemptsÚinitial_sleepÚbackoffc                 C   s–   t  ¡ � t t¡ W d  ƒ n1 sw   Y  t ¡ }|}t| ƒD ]}t |¡ ||9 }t ¡ | }t 	dt
|ƒ¡ q#t ¡ | }tdt
|ƒ ƒ‚)z@Run a reboot command and panic if it doesn't happen fast enough.Nz,Rebooted, but still running after %s secondsz'Reboot did not happen after %s seconds!)r   Úsuspend_crashr   Ú
REBOOT_CMDÚtimeÚ	monotonicÚrangeÚsleepÚLOGÚdebugÚintÚRuntimeError)r    r!   r"   ÚstartÚ	wait_timeÚ_iÚelapsedr   r   r   Ú_fire_reboot/   s   
ÿ

ÿr1   Únamer   ÚcloudÚargsÚreturnc              
   C   sÚ  t |ddƒ}t |ddƒ}t |ddƒ}t |dg ¡}g }|s|rDz|j ¡  W n tyC }	 zt td¡ | |	¡ W Y d }	~	nd }	~	ww |rlz|j 	d	¡ W n tyk }	 zt td
¡ | |	¡ W Y d }	~	nd }	~	ww t
|ƒr—z|j |¡ W n ty– }	 zt td|¡ | |	¡ W Y d }	~	nd }	~	ww tD ]}
tj |
¡}|r¥ nq™|sª|rÛ|rÛ|rÛzt d|
¡ ttƒ tƒ  W n tyÚ }	 zt td¡ | |	¡ W Y d }	~	nd }	~	ww t
|ƒrët dt
|ƒ¡ |d ‚d S )Nr   r   r   r   Úapt_reboot_if_requiredÚpackage_reboot_if_requiredr   zPackage update failedÚupgradezPackage upgrade failedz/Failure when attempting to install packages: %sz7***WARNING*** Rebooting after upgrade or install per %sz Requested reboot did not happen!z2%s failed with exceptions, re-raising the last oneéÿÿÿÿ)r   r   Úget_cfg_option_listÚdistroÚupdate_package_sourcesÚ	ExceptionÚlogexcr)   ÚappendÚpackage_commandÚlenÚinstall_packagesÚREBOOT_FILESÚosÚpathÚisfileÚinfor	   r1   Úwarning)r2   r   r3   r4   Úupdater8   Úreboot_if_requiredÚpkglistÚerrorsÚeÚreboot_markerÚreboot_fn_existsr   r   r   ÚhandleE   sr   ÿ€þ€þÿ€ü
ÿþ
€þÿürP   )r   r   r   )!Ú__doc__ÚloggingrD   r%   Ú	cloudinitr   r   r   Úcloudinit.cloudr   Úcloudinit.configr   Úcloudinit.config.schemar   Úcloudinit.distrosr   Úcloudinit.log.loggersr	   Úcloudinit.settingsr
   rC   r$   r   Ú__annotations__Ú	getLoggerÚ__name__r)   r   r+   r1   ÚstrÚlistrP   r   r   r   r   Ú<module>   s:   ü
ÿÿÿ
ÿ"