
­­­­­­­­­­­­­­­­­­
<!DOCTYPE html>
<html>
3
\me,                 @   s   U d Z ddlZddlZddlZddlmZ ddlmZmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZ dd	lmZ dd
lmZ dZdgZdZdddeegeedgdddddgdZeeeZ ejeZdd Zd"ddZeee
e ddd d!Z!dS )#zEPackage Update Upgrade Install: update, upgrade, and install packages    N)dedent)subputil)Cloud)Config)
MetaSchemaget_meta_doc)ALL_DISTROS)flush_loggers)PER_INSTANCEz/var/run/reboot-requiredz/sbin/rebootaH  This module allows packages to be updated, upgraded or installed during boot.
If any packages are to be installed or an upgrade is to be performed then the
package cache will be updated first. If a package installation or upgrade
requires a reboot, then a reboot can be performed if
``package_reboot_if_required`` is specified.
Z!cc_package_update_upgrade_installzPackage Update Upgrade Installz%Update, upgrade, and install packagesa              packages:
              - pwgen
              - pastebinit
              - [libpython3.8, 3.8.10-0ubuntu1~20.04.2]
              - snap:
                - certbot
                - [juju, --edge]
                - [lxd, --channel=5.15/stable]
              - apt:
                - mg
            package_update: true
            package_upgrade: true
            package_reboot_if_required: true
            
apt_updatepackage_updateapt_upgradepackage_upgradepackages)idnametitledescriptionZdistrosZ	frequencyZexamplesZactivate_by_schema_keysc             G   s$   x|D ]}t j| |drdS qW dS )NFT)r   Zget_cfg_option_bool)cfgkeysk r   7/usr/lib/python3.6/cc_package_update_upgrade_install.py_multi_cfg_bool_getH   s    
r            c             C   sv   t j t tj }|}x>t| D ]2}tj| ||9 }tj | }tjdt| q W tj | }tdt| d S )Nz,Rebooted, but still running after %s secondsz'Reboot did not happen after %s seconds!)	r   
REBOOT_CMDtimerangeZsleepLOGdebugintRuntimeError)Zwait_attemptsZinitial_sleepZbackoffstartZ	wait_timeZ_ielapsedr   r   r   _fire_rebootO   s    

r'   )r   r   cloudargsreturnc          <   C   s  t |dd}t |dd}t |dd}tj|dg }g }|s>|ry|jj  W n8 tk
r }	 ztjtd |j|	 W Y d d }	~	X nX |ry|jj	d	 W n8 tk
r }	 ztjtd
 |j|	 W Y d d }	~	X nX t
|r,y|jj| W n< tk
r* }	 ztjtd| |j|	 W Y d d }	~	X nX tjjt}
|sD|r|r|
rytjdt tt t  W n: tk
r }	 ztjtd |j|	 W Y d d }	~	X nX t
|rtjdt
| |d d S )Nr   r   r   r   Zapt_reboot_if_requiredZpackage_reboot_if_requiredr   zPackage update failedupgradezPackage upgrade failedzFailed to install packages: %sz)Rebooting after upgrade or install per %sz Requested reboot did not happen!z2%s failed with exceptions, re-raising the last oner   )r   r   Zget_cfg_option_listZdistroZupdate_package_sources	ExceptionZlogexcr!   appendZpackage_commandlenZinstall_packagesospathisfileREBOOT_FILEZwarningr
   r'   )r   r   r(   r)   updater+   Zreboot_if_requiredZpkglisterrorseZreboot_fn_existsr   r   r   handle_   sL    



r7   )r   r   r   )"__doc__Zloggingr0   r   textwrapr   Z	cloudinitr   r   Zcloudinit.cloudr   Zcloudinit.configr   Zcloudinit.config.schemar   r   Zcloudinit.distrosr	   Zcloudinit.logr
   Zcloudinit.settingsr   r3   r   ZMODULE_DESCRIPTIONmetaZ	getLogger__name__r!   r   r'   strlistr7   r   r   r   r   <module>   s@   

