Your IP : 216.73.216.52


Current Path : /usr/share/netplan/netplan/cli/commands/__pycache__/
Upload File :
Current File : //usr/share/netplan/netplan/cli/commands/__pycache__/set.cpython-38.pyc

U

�]a!�@stdZddlZddlZddlZddlZddlZddlZddlmm	Z	ddl
mZdZddgZ
Gdd�de	j�ZdS)	znetplan set command line�N)�
ConfigManagerz70-netplan-set�renderer�versioncsZeZdZ�fdd�Zdd�Zeefd�dd�Zdd	�Zd
d�Z	dd
d�Z
ddd�Z�ZS)�
NetplanSetcst�jdddd�dS)N�setzTAdd new setting by specifying a dotted key=value pair like ethernets.eth0.dhcp4=trueT)�
command_id�description�leaf)�super�__init__��self��	__class__��./usr/share/netplan/netplan/cli/commands/set.pyr$s�zNetplanSet.__init__cCsR|jjdtdd�|jjdtdd�|jjdddd	�|j|_|��|��dS)
N�	key_valuezNThe nested key=value pair in dotted format. Value can be NULL to delete a key.)�type�helpz
--origin-hintz�Can be used to help choose a name for the overwrite YAML file.                                        A .yaml suffix will be appended automatically.z
--root-dir�/zAOverwrite configuration files in this root directory instead of /)�defaultr)�parser�add_argument�str�command_set�func�
parse_args�run_commandrrrr�run)s
�
�
�zNetplanSet.run)�returncs2|�di��t�}�D]�}|tkr$q��|g�}|dkrXdd�t�||j�D�}|�|<|D]b}t}t�||j�}|r�tj	�
|�dd�}d||��|��|�iii}|�|�|i�|�||<q\qt�fdd�tD���r*t
|�dkr�t|�dnt}tD].}	d|	��|	�ii}
|�|�|i�|
�||<q�|��S)	N�networkcSsi|]
}|d�qS�Nr)�.0�devrrr�
<dictcomp>Csz1NetplanSet.split_tree_by_hint.<locals>.<dictcomp>���c3s|]}��|�VqdSr!)�get)r"�key�r rr�	<genexpr>Qsz0NetplanSet.split_tree_by_hint.<locals>.<genexpr>�r)r&�dict�GLOBAL_KEYS�utils�netplan_get_ids_for_devtype�root_dir�
FALLBACK_HINT�netplan_get_filename_by_id�os�path�basename�merge�any�len�list�items)r
�set_treeZsubtrees�devtypeZdevtype_contentZnetdef�hint�filenameZnetdef_treer'�treerr(r�split_tree_by_hint7s,zNetplanSet.split_tree_by_hintcCs�|jdk	r t|j�dkr td��|j�dd�}t|�dkrBtd��|\}}|�|t�|��}|j|fg}|jdkr||�|�}|D]\}}|�	||d|j
�q�dS)NrzInvalid/empty origin-hint�=r*�zInvalid value specifiedz.yaml)Zorigin_hintr7�	Exceptionr�split�	parse_key�yaml�	safe_loadr?�
write_filer/)r
rCr'�valuer:�hintsr<Zsubtreerrrr[s

zNetplanSet.command_setc	Cst|�d�s|dksd|}t�d|�}i}d}|}|D]8}|�dd�}i}|t|�krZ|}|�||�}|d7}q6|S)Nznetwork.r z	(?<!\\)\.r*z\.�.)�
startswith�rerC�replacer7�
setdefault)	r
r'rHrCr>�i�t�part�valrrrrDls
zNetplanSet.parse_keyNcCs�|dkrg}|D]x}||kr|t||t�rZt||t�rZ|�|||||t|�g�q�||dkrn||=q�||||<q||||<q|S)z9
        Merges tree/dict 'b' into tree/dict 'a'
        N)�
isinstancer+r5r)r
�a�br3r'rrrr5~s"zNetplanSet.mergerc
	Cs`tjdd�}tj�dd�}t�tj�|j|��dii}tj�|||�}tj�|�rtt|d��}t	�
|�}W5QRX|�||�}	t�
|	�}
t�d�||
��d|
kr�t|
d���dgkr�t�|�n�d|
k�r4tj�|j||�}t|d	�� }t	j|
d
dd�}|�|�W5QRXt�|�t�||�t�|�n(tj�|��rNt�|�ntd
�|���dS)Nznetplan-set_)�prefix�etc�netplanr �rzWriting file {}: {}rzw+rAF)�indent�default_flow_stylezInvalid input: {})�tempfile�TemporaryDirectoryr2r3�join�makedirs�name�isfile�openrErFr5r�
strip_tree�logging�debug�formatr8�keys�remove�dump�writer-�
netplan_parse�shutil�copy2rB)
r
r:r`�rootdirZtmprootr3�configZabsp�fZnew_tree�strippedZtmppZnew_yamlrrrrG�s0


zNetplanSet.write_file)N)r)
�__name__�
__module__�__qualname__rrrr+r?rrDr5rG�
__classcell__rrrrr"s$
r)�__doc__r2rEr\rLrdrl�netplan.cli.utils�clir-�netplan.configmanagerrr0r,�NetplanCommandrrrrr�<module>s