U
    Ӈg                     @   s   d Z ddlZddlZddlZddl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mZmZ dd	lmZmZmZmZmZ d
ZedddddgZdgZdddZdddZdd Zdd Ze dkre  dS )zFDefine 'clean' utility and handler as part of cloud-init command line.    N)settings)uses_systemd)log_util)CLOUDINIT_NETPLAN_FILE)Init)ProcessExecutionErrorrunpartssubp)del_dirdel_fileget_config_logfilesis_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              	   C   s   | st jddd} | jdddddd	d
 | jddddd | jdddddd | jddddddd
 | jdddddgg dddd | 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)progZdescriptionz-lz--logs
store_trueFremove_logszRemove cloud-init logs.)actiondefaultdesthelpz--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.)r   r   r   z-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_confignetwork+remove_configzbRemove cloud-init generated config files of a certain type. Config types: all, ssh_config, network)choicesr   nargsr   r   )argparseArgumentParseradd_argumentparser r$   5/usr/lib/python3/dist-packages/cloudinit/cmd/clean.py
get_parser*   s^    	
r&   Fc           	      C   s  |    |r$t| jD ]}t| q|r\t|ddgr\tD ]}t|D ]}t| qLq>|rt|ddgrtD ]}t| qvt	j
| jjsdS t	j
| jjd}td| jj D ]}||kr|sqz*t	j
|rt|st| nt| W q tk
r: } z"td|t| W Y  dS d	}~X Y qX qzttj W nB tk
r } z"td
tj d|  W Y dS d	}~X Y nX dS )a  Helper 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.
    r   r   r   r   Zseedz%s/*zCould not remove {0}: {1}   NzFailure during run-parts of z: )Zread_cfgr   Zcfgr   setintersectionGEN_NET_CONFIG_FILESglobGEN_SSH_CONFIG_FILESospathisdirpathsZ	cloud_dirjoinr   r
   OSErrorr   errorformatstrr   r   ZCLEAN_RUNPARTS_DIR	Exception)	initr   r   r   Zlog_filer.   confZ	seed_pather$   r$   r%   remove_artifactsm   sD    


r:   c              
   C   s   t g d}t||j|j|j}|jrBt r:ttddd nt	t |dkr|j
r|jjdddd	}zt|d
d W n< tk
r } ztd|t| d}W 5 d}~X Y nX |S )z3Handle calls to 'cloud-init clean' as a subcommand.)Zds_depszuninitialized
i$  )moder   rebootZnowN)r;   ZdelaymessageF)Zcapturez-Could not reboot this system using "{0}": {1}r'   )r   r:   r   r   r   Z
machine_idr   r   ETC_MACHINE_IDr   r<   ZdistroZshutdown_commandr	   r   r   r3   r4   r5   )nameargsr7   Z	exit_codecmdr9   r$   r$   r%   handle_clean_args   s8    
      rB   c                  C   s   t  } ttd|   dS )z4Tool to collect and tar all cloud-init related logs.r   N)r&   sysexitrB   
parse_argsr"   r$   r$   r%   main   s    rF   __main__)N)FN)!__doc__r   r+   r-   rC   Z	cloudinitr   Zcloudinit.distrosr   Zcloudinit.logr   Zcloudinit.net.netplanr   Zcloudinit.stagesr   Zcloudinit.subpr   r   r	   Zcloudinit.utilr
   r   r   r   r   r>   r*   r,   r&   r:   rB   rF   __name__r$   r$   r$   r%   <module>   s6   	
C
2