%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /snap/core18/2887/usr/lib/python3/dist-packages/cloudinit/net/__pycache__/
Upload File :
Create Path :
Current File : //snap/core18/2887/usr/lib/python3/dist-packages/cloudinit/net/__pycache__/netplan.cpython-36.pyc

3

��Bd�J�@s�ddlZddlZddlZddlZddlmZmZddlmZddlm	Z
ddlmZmZm
Z
ddlmZmZmZmZmZddlmZmZdZe
je�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�|j�D��S)Nc3s$|]\}}|j��r||fVqdS)N)�
startswith)�.0�key�value)�match��7/usr/lib/python3/dist-packages/cloudinit/net/netplan.py�	<genexpr>*sz,_get_params_dict_by_match.<locals>.<genexpr>)�dict�items)�configrr)rr�_get_params_dict_by_match(s
r)r�entrycCs|d*dd�}|dkrg}g}g}g}g}|jdg�}	|	dkr>g}	�x(|	D�]}
|
jd�}|jd�r�|dkrp|d7}|j|d	i�qF|tkr�|jd
d	i�qF|d+krFd
|
jd�}d|
kr�|d|
jd�7}|
jd��r||
jd�d|
dkr�dndd�}
yDtj|
d�}tj|dd�}||k�r6tjd|
d|�d	|
d<Wn8t	k
�rp}ztj
d|
d||�WYdd}~XnX|j|
�d|
k�r�|||
jdg��7}d|
k�r�|||
jdg��7}d|
k�r�d}t|
��r�d|k�r�d}|j||
jd�i�xh|
jdg�D]X}d |jd!�|jd�f}|jd�|d�}
d"|k�rL|
jd"|jd"d#�i�|j|
��qW|j|�qFWd|k�r�|jd�}|�r�|d|k�r�tj
d$||d|�n|d|d<t
|�d%k�r�|jd&|i�t
|�d%k�r�|jd|i�t
|�d%k�rd&|i}|jd'|i�t
|�d%k�rF|jd'i�}|jd(|i�|jd'|i�d)|k�rx|d)dk	�rx|jd)tj|jd)��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}

    � cSs2|st|t�r|S||kr(|j|�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�static�static6z%sZaddress�prefixz/%dZgateway�:z::/0z	0.0.0.0/0)ZviaZtoF)�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)r'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�|j�D��}t|�dkr4|jd|i�dS)Ncs$g|]\}}|jdd��kr|�qS)zbond-masterN)r3)r�name�cfg)�bond_masterrr�
<listcomp>�sz0_extract_bond_slaves_by_name.<locals>.<listcomp>r�
interfaces)�sortedrr:r4)rDrrBZbond_slave_namesr)rBr�_extract_bond_slaves_by_name�s

rFcs�tj�d�}tjj|�sdStj|dd�}|tkr6dS�fdd�dD�}d	d�|D�}tj	d
||�x|g|D]}tj
|�qpWdS)Nz etc/netplan/00-snapd-config.yamlF)�decodecsg|]}tj�|��qSr)r�target_path)r�f)�targetrrrC�sz"_clean_default.<locals>.<listcomp>�-run/systemd/network/10-netplan-all-en.network�.run/systemd/network/10-netplan-all-eth.network�#run/systemd/generator/netplan.stampcSsg|]}tjj|�r|�qSr)�os�path�isfile)rrIrrrrC�sz9removing known config '%s' and derived existing files: %s)rKrLrM)rrHrNrOrPrZ	load_file�KNOWN_SNAPD_CONFIGr6r7�unlink)rJZtpath�contentZderived�existingrIr)rJr�_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}|jdd�|_|jdd�|_|jdd�|_|jdd�|_|jdd�|_dS)	N�netplan_pathzetc/netplan/50-cloud-init.yaml�netplan_headerZpostcmdsF�
clean_defaultTr)r3rYrZ�	_postcmdsr[�	_features)�selfrrrr�__init__�s
zRenderer.__init__cCs�|jdkr�y0tj|jdd�\}}tj|�}|dd|_WnFtjk
rPYn2ttfk
r�}ztj	d|�WYdd}~XnX|jS)NT)�capturez
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�tjjtj|�|j�}tjtjj|��|j	r4|j	nd}|j
|�}|jd�sT|d7}tj
r^dnd}tjj|�r�tj|�}||@|kr�|}tj||||d�|jr�t|d�|j|jd�|j|jd�dS)N��
i�i�)�mode)rJ)�run)rNrO�joinrrHrYrZ
ensure_dir�dirnamerZ�_render_content�endswithrZNETPLAN_CONFIG_ROOT_READ_ONLY�existsZget_permissionsZ
write_filer[rU�_netplan_generater\�_net_setup_link)	r^rerfrJZfpnplan�headerrSrjZcurrent_moderrr�render_network_states 	



zRenderer.render_network_stateFcCs&|stjd�dStj|jdd�dS)Nz!netplan generate postcmd disabledT)r`)r6r7r�NETPLAN_GENERATE)r^rkrrrrq-s
zRenderer._netplan_generatecCs�|stjd�dSdddg}t}x�td�D]l}y>x6t�D],}tjjt|�r8t	j	|t|gdd�q8WPWq*t	j
k
r�}z
|}WYdd}~Xq*Xq*Wtd	�|�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�T)r`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+Csd|jdkr*tjd�tjd|jiddd�Si}i}i}i}i}g}|jjdg�}|j}	|j	}
�x4|j
�D�]&}|jd�}ttdd	�|j
���}
|
jd
�}|dk�r||
jdd�d
�}|ddkr�|
jdd�}|dk	r�d|j�i|d<n|d=|d=t|
|||j�|j||i�qh|dk�ri}i}tttjd��}x^d/D]V}t|
|�}xD|j
�D]8\}}|j|jdd��}|dk�rz�qR|j||i��qRW�q:Wt|�dk�r�|jd|i�|
jd��r�|
dj�|d<|
jd�}|dk�r�t|||�t|
|||j�|j||i�qh|dk�r2|
jd�}ttj|��}d|i}d}t|
|�}i}tttjd��} x�|j
�D]t\}}| j|�}|dk�r��qb|j||i�|d0k�rbi}!x&|D]}"|"j�\}#}$t|$�|!|#<�q�W|j||!i��qbWt|�dk�r�|jd|i�|
jd��r|
dj�|d<t|
|||j�|j||i�qh|dkrh|
jd �|
jd!�d"�}%|
jdd�}|dk	�rr|j�|%d<t|
|%||j�|j||%i�qhW|	�s�|
�r|	|
d#�}&xV|||||gD]D}'x<|'j
�D]0\}(})d$|)k�s�d%|)k�r�q�|)jd$|&i��q�W�q�Wd&d'�}*|jd(�||*d)|�7}||*d*|�7}||*d+|�7}||*d,|�7}||*d-|�7}d.j|�S)1N�zV2 to V2 passthroughr.F)�explicit_start�explicit_endrDr@cSs|ddk	S)N�r)�itrrr�<lambda>lsz*Renderer._render_content.<locals>.<lambda>r%Zphysicalr)zset-namerZmac_addressZ
macaddresszset-name�bond�bond_�bond-r{�-rZ
parameterszbond-slavesZnone�bridge�bridge_portsZbridge_�	path-cost�
port-priority�vlanZvlan_idzvlan-raw-device)�id�link)r0r2r1r0cSs0|r,tj||idddd�}tj|d�}|gSgS)NFT)r}r~Znoaliasr�z    )r�dumps�textwrap�indent)r@�section�dumpZtxtrrr�_render_section�sz1Renderer._render_content.<locals>._render_sectionznetwork:
    version: 2
�	ethernets�wifis�bonds�bridges�vlansrh)r�r�)r�r�)�versionr6r7rr�rZ_network_stater3r,Zdns_searchdomainsZiter_interfacesr�filterr�lowerr?rr4rrr�replacer:rFrE�copyr �intr9rl)+r^rer�r�r�r�r�rSrDr1r<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_�propertyrrrrrtrqrrrrnrrrrrV�s



rVcCs4dg}ddg}x |D]}tj|||d�sdSqWdS)NrWz	/usr/sbinz/sbin)r2rJFT)rZwhich)rJZexpectedr2�prrr�	available�s
r�cCs>d}t||d��}|sd}|jd�s,|d7}|j|�}||S)Nzetc/network/50-cloud-init.yaml)rYrZrhri)rVrorn)rersrYr�contentsrrr�network_state_to_netplan�s


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

	

Zerion Mini Shell 1.0