Your IP : 216.73.216.52


Current Path : /usr/share/netplan/netplan/__pycache__/
Upload File :
Current File : //usr/share/netplan/netplan/__pycache__/configmanager.cpython-38.pyc

U

�]a_0�@s`dZddlZddlZddlZddlZddlZddlZddlZGdd�de�Z	Gdd�de
�ZdS)znetplan configuration manager�Nc@sJeZdZdifdd�Zedd��Zedd��Zedd	��Zed
d��Zedd
��Z	edd��Z
edd��Zedd��Zedd��Z
edd��Zedd��Zedd��Zedd��Zedd��Zed d!��Zed"d#��Zed$d%��Zed&d'��Zgfd(d)�Zd*d+�Zd?d-d.�Zd/d0�Zd1d2�Zd3d4�Zd@d6d7�Zd8d9�Zd:d;�Z d<d=�Z!d>S)A�
ConfigManager�/cCsP||_tjdd�|_tj�|jd�|_tj�|jd�|_||_	i|_
t�|_dS)NZnetplan_)�prefix�etc�run)
r�tempfile�mkdtemp�tempdir�os�path�join�temp_etc�temp_run�extra_files�config�set�new_interfaces)�selfrr�r�+/usr/share/netplan/netplan/configmanager.py�__init__szConfigManager.__init__cCs
|jdS)N�network)r�rrrrr(szConfigManager.networkcCshi}|�|j�|�|j�|�|j�|�|j�|�|j�|�|j�|�|j�|�|j�|S�N)	�update�	ovs_ports�	ethernets�modems�wifis�bridges�bonds�tunnels�vlans�r�
interfacesrrrr$,szConfigManager.interfacescCs,i}|�|j�|�|j�|�|j�|Sr)rrrrr#rrr�physical_interfaces9s
z!ConfigManager.physical_interfacescCs8i}|�|j�|�|j�|�|j�|�|j�|Sr)rrr r!r"r#rrr�virtual_interfacesAsz ConfigManager.virtual_interfacescCs
|jdS)Nr�rrrrrrKszConfigManager.ovs_portscCs
|jdS)N�openvswitchr'rrrrr(OszConfigManager.openvswitchcCs
|jdS)Nrr'rrrrrSszConfigManager.ethernetscCs
|jdS)Nrr'rrrrrWszConfigManager.modemscCs
|jdS)Nrr'rrrrr[szConfigManager.wifiscCs
|jdS)Nrr'rrrrr_szConfigManager.bridgescCs
|jdS)Nr r'rrrrr cszConfigManager.bondscCs
|jdS)Nr!r'rrrrr!gszConfigManager.tunnelscCs
|jdS)Nr"r'rrrrr"kszConfigManager.vlanscCs
|jdS)N�
nm-devicesr'rrrr�
nm_devicesoszConfigManager.nm_devicescCs
|jdS)N�versionr'rrrrr+sszConfigManager.versioncCs
|jdS)N�rendererr'rrrrr,wszConfigManager.renderercCs|�|j�Sr)�
strip_treerrrrr�tree{szConfigManager.treecCsDi}|��D]2\}}t|t�r(t�|�}|ddifkr|||<q|S)zclear empty branches�N)�items�
isinstance�dictrr-)�dataZnew_data�k�vrrrr-s


zConfigManager.strip_treec
s�i�dD]4}t�tj�|j|dd��D]}|�tj�|�<q&q�fdd�t����D�}iiiiiiiiiiddd�|jd<|D]}|�	|�q�|D]}|j
|�	|�O_
q�t�d	�
tj|jd
d���dS)z�
        Parse all our config files to return an object that describes the system's
        entire configuration, so that it can later be interrogated.

        Returns a dict that contains the entire, collated and merged YAML.
        )�librr�netplanz*.yamlcsg|]}�|�qSrr)�.0�name�Znames_to_pathsrr�
<listcomp>�sz'ConfigManager.parse.<locals>.<listcomp>N)rr(rrrrr r!r"r)r+r,rzMerged config:
{}F)Zdefault_flow_style)�globr
rrr�basename�sorted�keysr�_merge_yaml_configr�logging�debug�format�yaml�dumpr.)rZextra_configZyaml_dir�	yaml_file�filesrr:r�parse�s.�zConfigManager.parsecCs*|D]}|�|||�q|j�|�dSr)�
_copy_filerr)rZconfig_dictZconfig_filerrr�add�szConfigManager.addTcCs�|r(|�tj�|jd�tj�|jd��|jtj�|jd�tj�|jdd�dd�|jtj�|jd�tj�|jd	d
�dd�dS)Nzetc/netplanr7�%run/NetworkManager/system-connectionsZNetworkManagerzsystem-connectionsT)�
missing_ok�run/systemd/networkZsystemdr)�
_copy_treer
rrrr
r)rZbackup_config_dirrrr�backup�s���zConfigManager.backupc
Csz�t|j�D]}t�|j|�|j|=qd�|j�}d�|j�}tj�|�r|t�	tj�
|jd��|�|tj�
|jd��tj�|�r�t�	tj�
|jd��|�|tj�
|jd��WnFt
k
r�}z(t�d�|��t�d�t�d�W5d}~XYnXdS)Nz${}/NetworkManager/system-connectionsz{}/systemd/networkrKrMz8Something really bad happened while reverting config: {}zZYou should verify the netplan YAML in /etc/netplan and probably run 'netplan apply' again.���)r2rr
�unlinkrCrr�exists�shutil�rmtreerrrN�	ExceptionrA�error�sys�exit)rZ
extra_fileZtemp_nm_pathZtemp_networkd_path�errr�revert�s(
��
zConfigManager.revertcCst�|j�dSr)rSrTr	rrrr�cleanup�szConfigManager.cleanupcCst�||�dSr)rS�copy)r�src�dstrrrrI�szConfigManager._copy_fileFcCs2zt�||�Wntk
r,|r&n�YnXdSr)rS�copytree�FileNotFoundError)rr]r^rLrrrrN�szConfigManager._copy_treec
Cs�t�}t�}d|krD|�d�D]$\}}|id�||<|id�||<qt|���}|D]\}|�|�}	||kr�t�d�||��||�	|	�qTt�d�||��|	||<|�
|�qT|S)N�ports)Zpeerr(�{} exists in {}�{} not found in {})rr2�get�listr?�poprArBrCrrJ)
r�orig�newrraZp1Zp2�changed_ifaces�ifname�ifacerrr�_merge_ovs_ports_config�s 
z%ConfigManager._merge_ovs_ports_configcCsxt�}t|���}|D]\}|�|�}||krNt�d�||��||�|�qt�d�||��|||<|�|�q|S)Nrbrc)	rrer?rfrArBrCrrJ)rrgrhrrirjrkrrr�_merge_interface_configs
z%ConfigManager._merge_interface_configc	Cst�}�z�t|����}tj|tjd�}d}|dk	r<|�d�}|�r�d|krv|�|j|�d��}||O}|�d�|jd<d|kr�|�	|j
|�d��}||O}d|kr�|�	|j|�d��}||O}d|kr�|�	|j|�d��}||O}d|k�r|�	|j
|�d��}||O}d|k�r.|�	|j|�d��}||O}d	|k�rT|�	|j|�d	��}||O}d
|k�rz|�	|j|�d
��}||O}d|k�r�|�	|j|�d��}||O}d|k�r�|�d�|jd<d
|k�r�|�d
�|jd
<W5QRX|WSttjfk
�rt�d�|��t�d�YnXdS)N)�Loaderrr(rrrrr r!r"r)r+r,z!Error while loading {}, aborting.�)r�openrD�loadZCSafeLoaderrdrlrrrmrrrrr r!r"r*�IOErrorZ	YAMLErrorrArVrCrWrX)rrFr�fZ	yaml_datarrhrrrr@sX







z ConfigManager._merge_yaml_configN)T)F)"�__name__�
__module__�__qualname__r�propertyrr$r%r&rr(rrrrr r!r"r*r+r,r.�staticmethodr-rHrJrOrZr[rIrNrlrmr@rrrrrs^	



	














,

	rc@seZdZdZdS)�ConfigurationErrorzL
    Configuration could not be parsed or has otherwise failed to apply
    N)rtrurv�__doc__rrrrryFsry)rzr<rAr
rSrWrrD�objectrrUryrrrr�<module>s+