HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/share/netplan/netplan/cli/commands/__pycache__/set.cpython-38.pyc
U

��~f�"�@s�dZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZddlm
Z
dZddgZGdd	�d	e	�ZdS)
znetplan set command line�N)�NetplanCommand)�
ConfigManagerz70-netplan-set�renderer�versioncsbeZdZ�fdd�Zdd�Zdd�Zeefd�dd	�Zd
d�Z	dd
�Z
ddd�Zddd�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.runcCs0t|t�r,t|���dgkr,|ddkr,dSdS)N�networkTF)�
isinstance�dict�list�keys)r�treerrr�
is_emtpy_yaml9s(zNetplanSet.is_emtpy_yaml)�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)	Nr cSsi|]
}|d�qS�Nr)�.0�devrrr�
<dictcomp>Jsz1NetplanSet.split_tree_by_hint.<locals>.<dictcomp>���c3s|]}��|�VqdSr()�get)r)�key�r rr�	<genexpr>Xsz0NetplanSet.split_tree_by_hint.<locals>.<genexpr>�r)r-r"�GLOBAL_KEYS�
libnetplan�netplan_get_ids_for_devtype�root_dir�
FALLBACK_HINT�netplan_get_filename_by_id�os�path�basename�merge�any�lenr#�items)r�set_treeZsubtrees�devtypeZdevtype_content�netdef�hint�filenameZnetdef_treer.r%rr/r�split_tree_by_hint>s,zNetplanSet.split_tree_by_hintcCs |jdk	r t|j�dkr td��|j�dd�}t|�dkrBtd��|\}}|�|t�|��}|�|�r�t	j
�dd�}|jr�t	j
�|j||jd	�}t	j
�
|�r�t	�|�n,t�t	j
�|j|d
��}|D]}t	�|�q�dS|j|fg}	|jdkr�|�|�}	|	D]\}
}|�||
d	|j�q�dS)NrzInvalid/empty origin-hint�=r1�zInvalid value specified�etc�netplanz.yamlz*.yaml)Zorigin_hintr=�	Exceptionr�split�	parse_key�yaml�	safe_loadr&r8r9�joinr5�isfile�remove�globrD�
write_file)rrJr.�valuer?r9Z	hint_pathZ
yaml_files�f�hintsrBZsubtreerrrrbs,


zNetplanSet.command_setc	Cst|�d�s|dksd|}t�d|�}i}d}|}|D]8}|�dd�}i}|t|�krZ|}|�||�}|d7}q6|S)Nznetwork.r z	(?<!\\)\.r1z\.�.)�
startswith�rerJ�replacer=�
setdefault)	rr.rSrJr%�i�t�part�valrrrrK�s
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)r!r"r;r)r�a�br9r.rrrr;�s"zNetplanSet.mergerc	Cs�tjdd�}tj�dd�}t�tj�|j|��dii}tj�|||�}tj�|�r�t�|�j	dkr�t
|d��}t�|�}	|	dk	r�|	}W5QRX|�
||�}
t�|
�}t�d�||��d|kr�t|d���d	gkr�t�d
�|��tj�|�r�t�|�n�d|k�rltj�|j||�}t
|d�� }tj|dd
d�}
|�|
�W5QRXt�|�t�||�t�|�nB|ik�r�t�d�|��tj�|��r�t�|�ntd�|���dS)Nznetplan-set_)�prefixrGrHr r�rzWriting file {}: {}rzEmpty YAML, deleting file {}zw+rFF)�indent�default_flow_stylez,Removed last key from YAML, deleting file {}zInvalid input: {})�tempfile�TemporaryDirectoryr8r9rN�makedirs�namerO�stat�st_size�openrLrMr;r�
strip_tree�logging�debug�formatr#r$rP�dump�writer3�
netplan_parse�shutil�copy2rI)rr?rh�rootdirZtmprootr9�configZabsprT�cZnew_tree�strippedZtmppZnew_yamlrrrrR�s<




zNetplanSet.write_file)N)r)�__name__�
__module__�__qualname__rrr&rr"rDrrKr;rR�
__classcell__rrrrr$s$
r)�__doc__r8rLrerXrmrsrQ�netplan.cli.utilsr�netplan.libnetplanr3�netplan.configmanagerrr6r2rrrrr�<module>s