Your IP : 216.73.216.31


Current Path : /usr/lib/python3/dist-packages/cloudinit/net/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/cloudinit/net/__pycache__/netplan.cpython-38.pyc

U

n�gd�J�@s�ddlZddlZddlZddlZddlmZmZddlmZddlm	Z
ddlmZmZm
Z
ddlmZmZmZmZmZddlmZmZdZe
�e�Zd	d
�Zdeed�d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�r)r�entrycCsrd)dd�}|dkrg}g}g}g}g}|�dg�}	|	dkr>g}	|	D�]}
|
�d�}|�d�r||dkrl|d7}|�|d	i�qB|tkr�|�d
d	i�qB|dkrBd|
�d
�}d|
kr�|d|
�d�7}|
�d��rx|
�d�d|
dkr�dndd�}
zDt�|
d�}tj|dd�}||k�r2t�d|
d|�d	|
d<Wn8t	k
�rl}zt�
d|
d||�W5d}~XYnX|�|
�d|
k�r�|||
�dg��7}d|
k�r�|||
�dg��7}d|
k�r�d}t|
��r�d|k�r�d}|�||
�d�i�|
�dg�D]X}d|�d �|�d�f}|�d�|d�}
d!|k�rF|
�d!|�d!d"�i�|�|
��q�|�|�qBd|k�r�|�d�}|�r�|d|k�r�t�
d#||d|�n|d|d<t
|�d$k�r�|�d%|i�t
|�d$k�r�|�d|i�t
|�d$k�rd%|i}|�d&|i�t
|�d$k�r<|�d&i�}|�d'|i�|�d&|i�d(|k�rn|d(dk	�rn|�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. (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||kr$|�|�S|gSdS)zT
        Helper to convert strings to list of strings, handle single string
        N)�
isinstance�str�split)�obj�tokenrrr�_listifyUs
�z$_extract_addresses.<locals>._listifyN�subnets�typeZdhcp�4TZdhcp6)ZstaticZstatic6z%sZaddress�prefixz/%dZgateway�:z::/0z	0.0.0.0/0)Zvia�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_nameserversZ
dns_searchZmtuzipv6-mtu�routesz%s/%s�networkZmetric�dzZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r�	addresses�nameservers�searchz	accept-ra)r)�getr�updater	�	ipaddressZ
ip_addressZ
ip_network�LOG�debug�
ValueErrorZwarning�appendr
�lenrZis_true)rr�ifnamerr$r0r-r1�
searchdomainsr%ZsubnetZsn_typeZaddrZ	new_routeZsubnet_gatewayZsubnet_network�eZmtukeyZrouteZto_netZ	entry_mtu�nsrrr�_extract_addresses0s�%




�
��



�


�r?cs8t�fdd�|��D��}t|�dkr4|�d|i�dS)Ncs$g|]\}}|�dd��kr|�qS)zbond-masterN)r3)r�name�cfg��bond_masterrr�
<listcomp>�s�z0_extract_bond_slaves_by_name.<locals>.<listcomp>r�
interfaces)�sortedrr:r4)rErrCZbond_slave_namesrrBr�_extract_bond_slaves_by_name�s
��rGcs�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��targetrrrD�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�isfilerJrrrrD�sz9removing known config '%s' and derived existing files: %s)rrIrNrOrPrZ	load_file�KNOWN_SNAPD_CONFIGr6r7�unlink)rMZtpath�contentZderived�existingrKrrLr�_clean_default�s"
��rUc@sreZdZdZddgZddgZddd�Zedd	��Zde	e
edd
�dd�Zddd�Z
ddd�Ze	ed�dd�ZdS)�RendererzBRenders network information in a /etc/netplan/network.yaml format.�netplanZgenerate�infoNcCsR|si}|�dd�|_|�dd�|_|�dd�|_|�dd�|_|�dd�|_dS)	N�netplan_pathzetc/netplan/50-cloud-init.yaml�netplan_headerZpostcmdsF�
clean_defaultTr)r3rYrZ�	_postcmdsr[�	_features)�selfrrrr�__init__�s�zRenderer.__init__c
Cs�|jdkr�z0tj|jdd�\}}t�|�}|dd|_WnFtjk
rPYn2ttfk
r�}zt�	d|�W5d}~XYnX|jS)NT�Zcapturez
netplan.iorz-Failed to list features from netplan info: %s)
r]r�NETPLAN_INFOrZ	load_yaml�ProcessExecutionError�	TypeError�KeyErrorr6r7)r^Z	info_blobZ_errrXr=rrrr�s

zRenderer.features)�
network_state�	templates�returnc	Cs�tj�t�|�|j�}t�tj�|��|j	r4|j	nd}|�
|�}|�d�sT|d7}tj
r^dnd}tj�|�r�t�|�}||@|kr�|}tj||||d�|jr�t|d�|j|jd�|j|jd�dS)N��
i�i�)�moderL)�run)rNrO�joinrrIrYrZ
ensure_dir�dirnamerZ�_render_content�endswithrZNETPLAN_CONFIG_ROOT_READ_ONLY�existsZget_permissionsZ
write_filer[rU�_netplan_generater\�_net_setup_link)	r^rerfrMZfpnplan�headerrSrjZcurrent_moderrr�render_network_states 	



zRenderer.render_network_stateFcCs&|st�d�dStj|jdd�dS)Nz!netplan generate postcmd disabledTr`)r6r7r�NETPLAN_GENERATE)r^rkrrrrq-s
zRenderer._netplan_generatecCs�|st�d�dSdddg}t}td�D]l}z>t�D],}tj�t|�r4t	j	|t|gdd�q4Wq�Wq(t	j
k
r�}z|}W5d}~XYq(Xq(td	�|�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 disabledNZudevadmztest-builtinZnet_setup_link�Tr`zQ'udevadm test-builtin net_setup_link' unable to run successfully for all devices.)r6r7�	Exception�rangerrNrO�islinkr
rrb�RuntimeError)r^rkZ	setup_lnkZlast_exception�_Zifacer=rrrrr3s*


�
��zRenderer._net_setup_link)rergc+	CsF|jdkr*t�d�tjd|jiddd�Si}i}i}i}i}g}|j�dg�}|j}	|j	}
|�
�D�]}|�d�}ttdd	�|�
���}
|
�d
�}|dk�r||
�dd�d
�}|ddkr�|
�dd�}|dk	r�d|��i|d<n|d=|d=t|
|||j�|�||i�qd|dk�ri}i}ttt�d��}dD]R}t|
|�}|�
�D]8\}}|�|�dd��}|dk�rr�qJ|�||i��qJ�q4t|�dk�r�|�d|i�|
�d��r�|
d��|d<|
�d�}|dk�r�t|||�t|
|||j�|�||i�qd|dk�r|
�d�}tt�|��}d|i}d}t|
|�}i}ttt�d��} |�
�D]p\}}| �|�}|dk�rt�qT|�||i�|dk�rTi}!|D]}"|"��\}#}$t|$�|!|#<�q�|�||!i��qTt|�dk�r�|�d|i�|
�d��r�|
d��|d<t|
|||j�|�||i�qd|dkrd|
�d�|
�d�d �}%|
�dd�}|dk	�r^|��|%d<t|
|%||j�|�||%i�qd|	�s�|
�r�|	|
d!�}&|||||fD]@}'|'�
�D]0\}(})d"|)k�s�d#|)k�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 passthroughr.F)�explicit_start�explicit_endrEr@cSs|ddk	S)N�r)�itrrr�<lambda>l�z*Renderer._render_content.<locals>.<lambda>r&Zphysicalr)�set-namerZmac_addressZ
macaddressr��bond)Zbond_zbond-r{�-rZ
parameterszbond-slavesZnone�bridge�bridge_portsZbridge_)z	path-costz
port-priority�vlanZvlan_idzvlan-raw-device)�id�link)r0r2r1r0cSs0|r,tj||idddd�}t�|d�}|gSgS)NFT)r}r~Znoaliasz    )r�dumps�textwrap�indent)r@�section�dumpZtxtrrr�_render_section�s�z1Renderer._render_content.<locals>._render_sectionznetwork:
    version: 2
�	ethernets�wifis�bonds�bridges�vlansrh)�versionr6r7rr�rZ_network_stater3r,Zdns_searchdomainsZiter_interfacesr�filterr�lowerr?rr4rrr�replacer:rGrF�copyr!�intr9rl)+r^rer�r�r�r�r�rSrEr1r<rr;ZifcfgZif_typeZethZmacaddrr�Zbond_configZv2_bond_maprZbond_paramsZparamrZnewnameZslave_interfacesr�Zportsr�Zmatch_prefixZparamsZ	br_configZ
v2_bridge_mapZnewvalue�valZportZportvalr�Znscfgr��_namerAr�rrrrnRs�

�



�






�



�


zRenderer._render_content)N)NN)F)F)�__name__�
__module__�__qualname__�__doc__rurar_�propertyrrrrrtrqrrr rnrrrrrV�s 

��!

rVcCs2dg}ddg}|D]}tj|||d�sdSqdS)NrWz	/usr/sbinz/sbin)r2rMFT)rZwhich)rMZexpectedr2�prrr�	available�sr�cCs>d}t||d��}|sd}|�d�s,|d7}|�|�}||S)Nzetc/network/50-cloud-init.yaml)rYrZrhri)rVrorn)rersrYr�contentsrrr�network_state_to_netplan�s��

r�)N)N)N)N)#r�r5rNr��typingrrZ	cloudinitrrZloggingrrrZ
cloudinit.netr	r
rrr
Zcloudinit.net.network_staterrrQZ	getLoggerr�r6rrr?rGrUrVr�r�rrrr�<module>s*