3 \me, @sUdZddlZddlZddlZddlmZddlmZmZddl m Z ddl m Z ddl mZmZddlmZdd lmZdd lmZd Zd gZd ZdddeegeedgdddddgdZeeeZejeZddZd"ddZee e e ddd d!Z!dS)#zEPackage Update Upgrade Install: update, upgrade, and install packagesN)dedent)subputil)Cloud)Config) MetaSchema get_meta_doc) ALL_DISTROS) flush_loggers) PER_INSTANCEz/var/run/reboot-requiredz /sbin/rebootaHThis 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_installzPackage 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_updatepackage_update apt_upgradepackage_upgradepackages)idnametitle descriptionZdistrosZ frequencyZexamplesZactivate_by_schema_keyscGs$x|D]}tj||drdSqWdS)NFT)rZget_cfg_option_bool)cfgkeyskr7/usr/lib/python3.6/cc_package_update_upgrade_install.py_multi_cfg_bool_getHs rcCsvtjttj}|}x>t|D]2}tj|||9}tj|}tjdt|q Wtj|}tdt|dS)Nz,Rebooted, but still running after %s secondsz'Reboot did not happen after %s seconds!) r REBOOT_CMDtimerangeZsleepLOGdebugint RuntimeError)Z wait_attemptsZ initial_sleepZbackoffstartZ wait_timeZ_ielapsedrrr _fire_rebootOs    r')rrcloudargsreturnc <Cst|dd}t|dd}t|dd}tj|dg}g}|s>|ry|jjWn8tk r} ztjtd|j| WYdd} ~ XnX|ry|jj d Wn8tk r} ztjtd |j| WYdd} ~ XnXt |r,y|jj |Wn<tk r*} ztjtd ||j| WYdd} ~ XnXt j jt} |sD|r|r| rytjd ttttWn:tk r} ztjtd |j| WYdd} ~ XnXt |rtjdt ||ddS)Nr r rrZapt_reboot_if_requiredZpackage_reboot_if_requiredrzPackage update failedupgradezPackage upgrade failedzFailed 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)rrZget_cfg_option_listZdistroZupdate_package_sources ExceptionZlogexcr!appendZpackage_commandlenZinstall_packagesospathisfile REBOOT_FILEZwarningr r') rrr(r)updater+Zreboot_if_requiredZpkglisterrorseZreboot_fn_existsrrrhandle_sL           r7)rrr)"__doc__Zloggingr0rtextwraprZ cloudinitrrZcloudinit.cloudrZcloudinit.configrZcloudinit.config.schemarrZcloudinit.distrosr Z cloudinit.logr Zcloudinit.settingsr r3rZMODULE_DESCRIPTIONmetaZ getLogger__name__r!rr'strlistr7rrrrs@