HEX
Server: Apache/2.4.65 (Debian)
System: Linux kubikelcreative 5.10.0-35-amd64 #1 SMP Debian 5.10.237-1 (2025-05-19) x86_64
User: www-data (33)
PHP: 8.4.13
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/cloudinit/net/__pycache__/netplan.cpython-39.pyc
a

��`Q?�@s�ddlZddlZddlmZddlmZmZmZddlm	Z
ddlmZddlmZddlm
Z
dd	lmZmZd
Ze
�e�Zdd�Zdd
d�Zdd�Zddd�ZGdd�dej�Zddd�Zddd�ZdS)�N�)�renderer)�subnet_is_ipv6�NET_CONFIG_TO_V2�IPV6_DYNAMIC_TYPES)�log)�util)�subp)�safeyaml)�
SYS_CLASS_NET�get_devicelists4# This is the initial network config.
# It can be overwritten by cloud-init or console-conf.
network:
    version: 2
    ethernets:
        all-en:
            match:
                name: "en*"
            dhcp4: true
        all-eth:
            match:
                name: "eth*"
            dhcp4: true
cst�fdd�|��D��S)Nc3s$|]\}}|���r||fVqdS�N)�
startswith��.0�key�value��match��7/usr/lib/python3/dist-packages/cloudinit/net/netplan.py�	<genexpr>#s

�z,_get_params_dict_by_match.<locals>.<genexpr>)�dict�items)�configrrrr�_get_params_dict_by_match"src	Csd$dd�}|durg}g}g}g}g}|�dg�}	|	dur>g}	|	D�]�}
|
�d�}|�d�r||dkrl|d7}|�|d	i�qB|tvr�|�d
d	i�qB|dvrBd|
�d
�}d|
vr�|d|
�d�7}d|
v�r|
�d��r|
�d�}
d|
v�r�|�d|
i�n|�d|
i�d|
v�r*|||
�dg��7}d|
v�rH|||
�dg��7}d|
v�r�d}t|
��rnd|v�rnd}|�||
�d�i�|
�dg�D]X}d|�d�|�d�f}|�d�|d�}d|v�r�|�d|�dd�i�|�|��q�|�|�qBd|v�r>|�d�}|�r2|d|k�r2t�d||d|�n|d|d<t|�dk�rZ|�d |i�t|�dk�rv|�d|i�t|�dk�r�d |i}|�d!|i�t|�dk�r�|�d!i�}|�d"|i�|�d!|i�d#|v�r|d#du�r|�d#t	�
|�d#��i�dS)%a�This method parse a cloudinit.net.network_state dictionary (config) and
       maps netstate keys/values into a dictionary (entry) to represent
       netplan yaml.

    An example config dictionary might look like:

    {'mac_address': '52:54:00:12:34:00',
     'name': 'interface0',
     'subnets': [
        {'address': '192.168.1.2/24',
         'mtu': 1501,
         'type': 'static'},
        {'address': '2001:4800:78ff:1b:be76:4eff:fe06:1000",
         'mtu': 1480,
         'netmask': 64,
         'type': 'static'}],
      'type: physical',
      'accept-ra': 'true'
    }

    An entry dictionary looks like:

    {'set-name': 'interface0',
     'match': {'macaddress': '52:54:00:12:34:00'},
     'mtu': 1501}

    After modification returns

    {'set-name': 'interface0',
     'match': {'macaddress': '52:54:00:12:34:00'},
     'mtu': 1501,
     'address': ['192.168.1.2/24', '2001:4800:78ff:1b:be76:4eff:fe06:1000"],
     'ipv6-mtu': 1480}

    � cSs2|rt|�tfvr|S||vr(|�|�S|gSdS)zBHelper to convert strings to list of strings, handle single stringN)�type�str�split)�obj�tokenrrr�_listifyLs

z$_extract_addresses.<locals>._listifyN�subnetsr�dhcp�4T�dhcp6)�static�static6z%s�address�prefixz/%d�gateway�:�gateway6�gateway4�dns_nameservers�
dns_search�mtuzipv6-mtu�routesz%s/%s�network)�via�to�metric�dzZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r�	addresses�nameservers�searchz	accept-ra)r)�getr�updaterr�append�LOG�warning�lenr�is_true)r�entry�ifname�featuresr"r8r2r9�
searchdomainsr#�subnetZsn_type�addrr+Zmtukey�routeZto_netZ	new_routeZ	entry_mtu�nsrrr�_extract_addresses's�%
	








��



�rJcs8t�fdd�|��D��}t|�dkr4|�d|i�dS)Ncs$g|]\}}|�dd��kr|�qS)zbond-masterN)r;)r�name�cfg��bond_masterrr�
<listcomp>�s�z0_extract_bond_slaves_by_name.<locals>.<listcomp>r�
interfaces)�sortedrr@r<)rPrBrNZbond_slave_namesrrMr�_extract_bond_slaves_by_name�srRcs�t��d�}tj�|�sdStj|dd�}|tkr6dS�fdd�dD�}dd�|D�}t�	d||�|g|D]}t�
|�qndS)	Nz etc/netplan/00-snapd-config.yamlF)�decodecsg|]}t��|��qSr)r	�target_path�r�f��targetrrrO��z"_clean_default.<locals>.<listcomp>)z-run/systemd/network/10-netplan-all-en.networkz.run/systemd/network/10-netplan-all-eth.networkz#run/systemd/generator/netplan.stampcSsg|]}tj�|�r|�qSr)�os�path�isfilerUrrrrO�rYz9removing known config '%s' and derived existing files: %s)r	rTrZr[r\r�	load_file�KNOWN_SNAPD_CONFIGr>�debug�unlink)rXZtpath�content�derived�existingrVrrWr�_clean_default�s�rdc@s\eZdZdZddgZddgZddd�Zedd	��Zdd
d�Z	dd
d�Z
ddd�Zdd�ZdS)�RendererzBRenders network information in a /etc/netplan/network.yaml format.�netplan�generate�infoNcCsR|si}|�dd�|_|�dd�|_|�dd�|_|�dd�|_|�dd�|_dS)	N�netplan_pathzetc/netplan/50-cloud-init.yaml�netplan_header�postcmdsF�
clean_defaultTrD)r;rirj�	_postcmdsrl�	_features)�selfrrrr�__init__�s�zRenderer.__init__c
Cs�|jdur�z0tj|jdd�\}}t�|�}|dd|_WnFtjyNYn4ttfy�}zt�	d|�WYd}~n
d}~00|jS)NT��capturez
netplan.iorDz-Failed to list features from netplan info: %s)
rnr	�NETPLAN_INFOr�	load_yaml�ProcessExecutionError�	TypeError�KeyErrorr>r_)roZ	info_blob�_errrh�errrrD�s

"zRenderer.featurescCs�tj�t�|�|j�}t�tj�|��|j	r4|j	nd}|�
|�}|�d�sT|d7}t�|||�|j
rtt|d�|j|jd�|j|jd�dS)N��
rW)�run)rZr[�joinr	rTrir�
ensure_dir�dirnamerj�_render_content�endswith�
write_filerlrd�_netplan_generaterm�_net_setup_link)ro�
network_state�	templatesrXZfpnplan�headerrarrr�render_network_state�s


zRenderer.render_network_stateFcCs&|st�d�dStj|jdd�dS)Nz!netplan generate postcmd disabledTrq)r>r_r	�NETPLAN_GENERATE)ror|rrrr��s
zRenderer._netplan_generatecsF|st�d�dSgd���fdd�t�D�D]}tj|dd�q.dS)z�To ensure device link properties are applied, we poke
           udev to re-evaluate networkd .link files and call
           the setup_link udev builtin command
        z'netplan net_setup_link postcmd disabledN)�udevadmztest-builtinZnet_setup_linkcs*g|]"}tj�t|�r�t|g�qSr)rZr[�islinkr)r�iface�Z	setup_lnkrrrO�s�z,Renderer._net_setup_link.<locals>.<listcomp>Trq)r>r_rr	)ror|�cmdrr�rr��s

�
zRenderer._net_setup_linkc*	Cs:|jdkr*t�d�tjd|jiddd�Si}i}i}i}i}g}|j�dg�}|j}	|j	}
|�
�D�]
}|�d�}tdd	�|��D��}
|
�d
�}|dk�r||
�dd�d
�}|ddur�|
�dd�}|dur�d|�
�i|d<n|d=|d=t|
|||j�|�||i�qd|dk�r�i}i}t�d�}dD]R}t|
|�}|��D]8\}}|�|�dd��}|du�rl�qD|�||i��qD�q.t|�dk�r�|�d|i�|
�d��r�|
�d��
�|d<|
�d�}|dk�r�t|||�t|
|||j�|�||i�qd|dk�rtt�|
�d���}d|i}d}t|
|�}i}t�d�}|��D]p\}}|�|�}|du�rf�qF|�||i�|dv�rFi} |D]}!|!��\}"}#t|#�| |"<�q�|�|| i��qFt|�dk�r�|�d|i�|
�d��r�|
�d��
�|d<t|
|||j�|�||i�qd|dkrd|
�d�|
�d�d �}$|
�dd�}|du�rR|�
�|$d<t|
|$||j�|�||$i�qd|	�s~|
�r�|	|
d!�}%|||||fD]@}&|&��D]0\}'}(d"|(v�s�d#|(v�rq�|(�d"|%i��q��q�d$d%�})|�d&�||)d'|�7}||)d(|�7}||)d)|�7}||)d*|�7}||)d+|�7}d,�|�S)-N�zV2 to V2 passthroughr3F)�explicit_start�explicit_endrPrKcss"|]\}}|dur||fVqdSr
rrrrrrs
�z+Renderer._render_content.<locals>.<genexpr>r�physicalr)�set-namer�mac_address�
macaddressr��bond)Zbond_zbond-�_�-r�
parameterszbond-slaves�none�bridge�bridge_ports�bridge_)z	path-costz
port-priority�vlan�vlan_idzvlan-raw-device)�id�link)r8r:r9r8cSs0|r,tj||idddd�}t�|d�}|gSgS)NFT)r�r��noaliasz    )r
�dumpsr�indent)rK�section�dump�txtrrr�_render_section�s
�z1Renderer._render_content.<locals>._render_sectionznetwork:
    version: 2
�	ethernets�wifis�bonds�bridges�vlansrz)�versionr>r_r
r�r�_network_stater;r/�dns_searchdomains�iter_interfacesrr�lowerrJrDr<rr�replacer@rRrQ�copyr�intr=r})*ror�r�r�r�r�r�rarPr9rErrCZifcfgZif_type�ethZmacaddrr�Zbond_configZv2_bond_maprZbond_params�paramrZnewnameZslave_interfaces�portsr�Zmatch_prefix�paramsZ	br_configZ
v2_bridge_map�newvalue�val�portZportvalr�Znscfgr��_namerLr�rrrr�s�

�



�






�




�



zRenderer._render_content)N)NN)F)F)
�__name__�
__module__�__qualname__�__doc__r�rsrp�propertyrDr�r�r�r�rrrrre�s





recCs2dg}ddg}|D]}tj|||d�sdSqdS)Nrfz	/usr/sbinz/sbin)r:rXFT)r	�which)rX�expectedr:�prrr�	available�sr�cCs>d}t||d��}|sd}|�d�s,|d7}|�|�}||S)Nzetc/network/50-cloud-init.yaml)rirjrzr{)rer�r�)r�r�rir�contentsrrr�network_state_to_netplan�s�

r�)N)N)N)N)r�rZrzrr�rrr�	cloudinitr�loggingrr	r
�
cloudinit.netrrr^�	getLoggerr�r>rrJrRrdrer�r�rrrr�<module>s$

w
\