HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/cloudinit/net/__pycache__/netplan.cpython-310.pyc
o

�Ad�J�@s�ddlZddlZddlZddlZddlmZmZddlmZddlm	Z
ddlmZmZm
Z
ddlmZmZmZmZmZddlmZmZdZe
�e�Zd	d
�Zddedefd
d�Zdd�Zddd�ZGdd�dej �Z ddd�Z!ddd�Z"dS)�N)�Optional�cast)�features)�log)�safeyaml�subp�util)�IPV6_DYNAMIC_TYPES�
SYS_CLASS_NET�get_devicelist�renderer�subnet_is_ipv6)�NET_CONFIG_TO_V2�NetworkStates4# 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(s�rr�entrycCsZd'dd�}|durg}g}g}g}g}|�dg�}	|	durg}	|	D]�}
|
�d�}|�d�r=|dkr5|d7}|�|d	i�q!|tvrI|�d
d	i�q!|dv�rd|
�d
�}d|
vrb|d|
�d�7}|
�d�r�|
�d�dd�}
z!t�|
d�}tj|dd�}||vr�t�d|
d|�d	|
d<Wnt	y�}zt�
d|
d||�WYd}~nd}~ww|�|
�d|
vr�|||
�dg��7}d|
vr�|||
�dg��7}d|
vr�d}t|
�r�d|vr�d}|�||
�d�i�|
�dg�D]+}d|�d�|�d�f}|�d�|d�}
d|v�r|
�d|�dd �i�|�|
�q�|�|�q!d|v�rE|�d�}|�r?|d|k�r?t�
d!||d|�n|d|d<t
|�d"k�rS|�d#|i�t
|�d"k�ra|�d|i�t
|�d"k�rsd#|i}|�d$|i�t
|�d"k�r�|�d$i�}|�d%|i�|�d$|i�d&|v�r�|d&du�r�|�d&t�|�d&��i�dSdSdS)(a�This method parse a cloudinit.net.network_state dictionary (config) and
       maps netstate keys/values into a dictionary (entry) to represent
       netplan yaml. (config v1 -> netplan)

    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}

    � cSs*|rt|t�s	|S||vr|�|�S|gS)zT
        Helper to convert strings to list of strings, handle single string
        )�
isinstance�str�split)�obj�tokenrrr�_listifyUs
�z$_extract_addresses.<locals>._listifyN�subnets�type�dhcp�4T�dhcp6)�static�static6z%s�address�prefixz/%d�gateway�default)�via�toF)�strictzAGateway %s is not contained within subnet %s, adding on-link flagzon-linkzDFailed to check whether gateway %s is contained within subnet %s: %s�dns_nameservers�
dns_search�mtuzipv6-mtu�routesz%s/%s�network�metric�dzZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r�	addresses�nameservers�searchz	accept-ra)r)�getr�updater	�	ipaddress�
ip_address�
ip_network�LOG�debug�
ValueError�warning�appendr
�lenr�is_true)rr�ifnamerr%r;r7r<�
searchdomainsr&�subnet�sn_type�addr�	new_route�subnet_gateway�subnet_network�e�mtukey�route�to_net�	entry_mtu�nsrrr�_extract_addresses0s�
%




������
�

�

��rXcs<t�fdd�|��D��}t|�dkr|�d|i�dSdS)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)�sortedrrHr?)r^rr\�bond_slave_namesrr[r�_extract_bond_slaves_by_name�s
���racs�t��d�}tj�|�sdStj|dd�}|tkrdS�fdd�dD�}dd�|D�}t�	d||�|g|D]}t�
|�q7dS)	Nz etc/netplan/00-snapd-config.yamlF)�decodecsg|]}t��|��qSr)r�target_path�r�f��targetrrr]�s
��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�isfilerdrrrr]�sz9removing known config '%s' and derived existing files: %s)rrcrhrirjr�	load_file�KNOWN_SNAPD_CONFIGrCrD�unlink)rg�tpath�content�derived�existingrerrfr�_clean_default�s$
���rrc@s|eZdZdZddgZddgZddd�Zedd	��Z		dd
e	de
eddfd
d�Zddd�Z
ddd�Zd
e	defdd�ZdS)�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_defaultTr)r>rwrx�	_postcmdsrz�	_features)�selfrrrr�__init__�s�zRenderer.__init__c
Cs�|jdurGztj|jdd�\}}t�|�}|dd|_W|jStjy+Y|jSttfyF}zt�	d|�WYd}~|jSd}~ww|jS)NT��capturez
netplan.iorz-Failed to list features from netplan info: %s)
r|r�NETPLAN_INFOr�	load_yaml�ProcessExecutionError�	TypeError�KeyErrorrCrD)r}�	info_blob�_errrvrRrrrr�s

����zRenderer.features�
network_state�	templates�returnc	Cs�tj�t�|�|j�}t�tj�|��|j	r|j	nd}|�
|�}|�d�s*|d7}tj
r/dnd}tj�|�rDt�|�}||@|krD|}tj||||d�|jrVt|d�|j|jd�|j|jd�dS)N��
i�i�)�moderf)�run)rhri�joinrrcrwr�
ensure_dir�dirnamerx�_render_content�endswithr�NETPLAN_CONFIG_ROOT_READ_ONLY�exists�get_permissions�
write_filerzrr�_netplan_generater{�_net_setup_link)	r}r�r�rg�fpnplan�headerror��current_moderrr�render_network_states 	



zRenderer.render_network_stateFcCs&|s	t�d�dStj|jdd�dS)Nz!netplan generate postcmd disabledTr)rCrDr�NETPLAN_GENERATE)r}r�rrrr�-s
zRenderer._netplan_generatecCs�|s	t�d�dSgd�}t}td�D]5}zt�D]}tj�t|�r/t	j	|t|gdd�qWdSt	j
yH}z|}WYd}~qd}~wwtd�|�)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-builtin�net_setup_link�TrzQ'udevadm test-builtin net_setup_link' unable to run successfully for all devices.)rCrD�	Exception�rangerrhri�islinkr
rr��RuntimeError)r}r��	setup_lnk�last_exception�_�ifacerRrrrr�3s.

������zRenderer._net_setup_linkc+	Cs6|jdkrt�d�tjd|jiddd�Si}i}i}i}i}g}|j�dg�}|j}	|j	}
|�
�D�]�}|�d�}ttdd	�|�
���}
|
�d
�}|dkr�||
�dd�d
�}|ddurv|
�dd�}|durpd|��i|d<n|d=|d=t|
|||j�|�||i�q2|dkr�i}i}ttt�d��}dD]%}t|
|�}|�
�D]\}}|�|�dd��}|dur�q�|�||i�q�q�t|�dkr�|�d|i�|
�d�r�|
d��|d<|
�d�}|dkr�t|||�t|
|||j�|�||i�q2|dk�r�|
�d�}tt�|��}d|i}d}t|
|�}i}ttt�d��} |�
�D]8\}}| �|�}|du�r1�q!|�||i�|dv�rXi}!|D]}"|"��\}#}$t|$�|!|#<�qA|�||!i��q!t|�dk�rh|�d|i�|
�d��rv|
d��|d<t|
|||j�|�||i�q2|dk�r�|
�d�|
�d�d �}%|
�dd�}|du�r�|��|%d<t|
|%||j�|�||%i�q2|	�s�|
�r�|	|
d!�}&|||||fD] }'|'�
�D]\}(})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 passthroughr8F)�explicit_start�explicit_endr^rYcSs|dduS)N�r)�itrrr�<lambda>lsz*Renderer._render_content.<locals>.<lambda>r'�physicalr)�set-namer�mac_address�
macaddressr��bond)�bond_zbond-r��-r�
parameterszbond-slaves�none�bridge�bridge_ports�bridge_)z	path-costz
port-priority�vlan�vlan_idzvlan-raw-device)�id�link)r;r=r<r;cSs0|rtj||idddd�}t�|d�}|gSgS)NFT)r�r��noaliasz    )r�dumps�textwrap�indent)rY�section�dump�txtrrr�_render_section�s�z1Renderer._render_content.<locals>._render_sectionznetwork:
    version: 2
�	ethernets�wifis�bonds�bridges�vlansr�)�versionrCrDrr�r�_network_stater>r4�dns_searchdomains�iter_interfacesr�filterr�lowerrXrr?rrr�replacerHrar_�copyr"�intrGr�)+r}r�r�r�r�r�r�ror^r<rKrrJ�ifcfg�if_type�eth�macaddrr��bond_config�v2_bond_mapr�bond_params�paramr�newname�slave_interfacesr��portsr��match_prefix�params�	br_config�
v2_bridge_map�newvalue�val�port�portvalr��nscfgr��_namerZr�rrrr�Rs�

�


�
�



�



�
�
�
�

zRenderer._render_contentr)NN)F)�__name__�
__module__�__qualname__�__doc__r�r�r~�propertyrrrrr�r�r�r!r�rrrrrs�s&

���
�
!
rscCs2dg}ddg}|D]
}tj|||d�sdSq	dS)Nrtz	/usr/sbinz/sbin)r=rgFT)r�which)rg�expectedr=�prrr�	available�s�r�cCs>d}t||d��}|s
d}|�d�s|d7}|�|�}||S)Nzetc/network/50-cloud-init.yaml)rwrxr�r�)rsr�r�)r�r�rwr�contentsrrr�network_state_to_netplan�s��

r�r)#r�r@rhr��typingrr�	cloudinitrr�loggingrrr�
cloudinit.netr	r
rrr
�cloudinit.net.network_staterrrl�	getLoggerr�rCrrrXrarrrsr�r�rrrr�<module>s,