a 'Dg@sdZddlZddlZddlZddlZddlmZddlmZddl m Z ddl m Z ddl mZddlmZmZmZdd lmZmZmZmZmZd Ze d d d ddgZdgZdddZdddZddZddZe dkredS)zFDefine 'clean' utility and handler as part of cloud-init command line.N)settings) uses_systemd)log_util)CLOUDINIT_NETPLAN_FILE)Init)ProcessExecutionErrorrunpartssubp)del_dirdel_fileget_config_logfilesis_link write_filez/etc/machine-idz-/etc/NetworkManager/conf.d/99-cloud-init.confz?/etc/NetworkManager/conf.d/30-cloud-init-ip6-addr-gen-mode.confz@/etc/NetworkManager/system-connections/cloud-init-*.nmconnectionz,/etc/systemd/network/10-cloud-init-*.networkz+/etc/network/interfaces.d/50-cloud-init.cfgz)/etc/ssh/sshd_config.d/50-cloud-init.confc Cs|stjddd}|jdddddd d |jd ddd d |jdddddd |jddddddd |jddgdgdddd|S)a#Build or extend an arg parser for clean utility. @param parser: Optional existing ArgumentParser instance representing the clean subcommand which will be extended to support the args of this utility. @returns: ArgumentParser with proper argument configuration. cleanzJRemove logs, configs and artifacts so cloud-init re-runs on a clean system)prog descriptionz-lz--logs store_trueF remove_logszRemove cloud-init logs.)actiondefaultdesthelpz --machine-idzSet /etc/machine-id to 'uninitialized ' for golden imagecreation. On next boot, systemd generates a new machine-id. Remove /etc/machine-id on non-systemd environments.)rrrz-rz--rebootz;Reboot system after logs are cleaned so cloud-init re-runs.z-sz--seed remove_seedz5Remove cloud-init seed directory /var/lib/cloud/seed.z-cz --configs)all ssh_confignetwork+ remove_configzbRemove cloud-init generated config files of a certain type. Config types: all, ssh_config, network)choicesrnargsrr)argparseArgumentParser add_argumentparserr%7/usr/lib/python3.9/site-packages/cloudinit/cmd/clean.py get_parser*sX  r'Fc Cs||r$t|jD] }t|q|r\t|ddgr\tD]}t|D] }t|qLq>|rt|ddgrtD] }t|qvt j |j j sdSt j |j j d}td|j j D]~}||kr|sqz*t j |rt|st|nt|Wqty8}z&td|t|WYd}~d Sd}~00qzttjWn@ty}z&td tjd |WYd}~d Sd}~00dS) aHelper which removes artifacts dir and optionally log files. @param: init: Init object to use @param: remove_logs: Boolean. Set True to delete the cloud_dir path. False preserves them. @param: remove_seed: Boolean. Set True to also delete seed subdir in paths.cloud_dir. @param: remove_config: List of strings. Can be any of: all, network, ssh_config. @returns: 0 on success, 1 otherwise. rrrrZseedz%s/*zCould not remove {0}: {1}NzFailure during run-parts of z: )Zread_cfgr Zcfgr set intersectionGEN_NET_CONFIG_FILESglobGEN_SSH_CONFIG_FILESospathisdirpathsZ cloud_dirjoinr r OSErrorrerrorformatstrrrZCLEAN_RUNPARTS_DIR Exception) initrrrZlog_filer/ZconfZ seed_pather%r%r&remove_artifactsmsD        r:c Cstgd}t||j|j|j}|jrBtr:ttdddnt t|dkr|j r|j j dddd }zt |d d Wn>ty}z&td |t|d }WYd}~n d}~00|S)z3Handle calls to 'cloud-init clean' as a subcommand.)Zds_depszuninitialized i$)moderrebootZnowN)r;ZdelaymessageF)Zcapturez-Could not reboot this system using "{0}": {1}r()rr:rrrZ machine_idrrETC_MACHINE_IDr r<ZdistroZshutdown_commandr rrr4r5r6)nameargsr8Z exit_codecmdr9r%r%r&handle_clean_argss, rBcCst}ttd|dS)z4Tool to collect and tar all cloud-init related logs.rN)r'sysexitrB parse_argsr#r%r%r&mainsrF__main__)N)FN)!__doc__r r,r.rCZ cloudinitrZcloudinit.distrosrZ cloudinit.logrZcloudinit.net.netplanrZcloudinit.stagesrZcloudinit.subprrr Zcloudinit.utilr r r r rr>r+r-r'r:rBrF__name__r%r%r%r&s6       C 2