%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /snap/core20/current/lib/python3/dist-packages/cloudinit/net/__pycache__/
Upload File :
Create Path :
Current File : //snap/core20/current/lib/python3/dist-packages/cloudinit/net/__pycache__/netplan.cpython-38.pyc

U

��g�R�@s ddlZddlZddlZddlZddlZddlmZddlmZm	Z	m
Z
ddlmZm
Z
mZmZddlmZmZmZmZmZmZddlmZmZdZdZe�e�Zd	d
�Ze e ed�dd
�Z!dd�Z"ddd�Z#e$e%d�dd�Z&e$e$e%d�dd�Z'e$e$d�dd�Z(Gdd�dej)�Z)d dd�Z*dS)!�N)�SpooledTemporaryFile)�Callable�List�Optional)�features�safeyaml�subp�util)�IPV6_DYNAMIC_TYPES�
SYS_CLASS_NET�get_devicelist�renderer�should_add_gateway_onlink_flag�subnet_is_ipv6)�NET_CONFIG_TO_V2�NetworkStatez/etc/netplan/50-cloud-init.yamls4# 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�entryrc	Csd&dd�}g}g}g}g}|�dg�}	|	dkr2g}	|	D�]�}
|
�d�}|�d�rp|dkr`|d7}|�|d	i�q6|tkr�|�d
d	i�q6|dkr6d|
�d
�}d|
kr�|d|
�d�7}|
�d��r|
�d�d|
dkr�dndd�}
t|
d|��rt�d|
d|�d	|
d<|�|
�d|
k�r6|||
�dg��7}d|
k�rT|||
�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�r�|
�d|�dd�i�|�|
��q�|�|�q6d|k�rL|�d�}|�r@|d|k�r@t�	d ||d|�n|d|d<t
|�d!k�rh|�d"|i�t
|�d!k�r�|�d|i�t
|�d!k�r�d"|i}|�d#|i�t
|�d!k�r�|�d#i�}|�d$|i�|�d#|i�d%|k�r|d%dk	�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. (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�_listifyXs
�z$_extract_addresses.<locals>._listify�subnetsN�typeZdhcp�4TZdhcp6)ZstaticZstatic6z%sZaddress�prefixz/%dZgateway�:z::/0z	0.0.0.0/0)Zvia�tozAGateway %s is not contained within subnet %s, adding on-link flagzon-link�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
r�LOG�debug�appendr�warning�lenr	Zis_true)rr�ifnamerr&r1r.r2�
searchdomainsr'ZsubnetZsn_typeZaddrZ	new_routeZmtukeyZrouteZto_netZ	entry_mtu�nsrrr�_extract_addresses3s�%




��



�


�r>cs8t�fdd�|��D��}t|�dkr4|�d|i�dS)Ncs$g|]\}}|�dd��kr|�qS)zbond-masterN)r4)r�name�cfg��bond_masterrr�
<listcomp>�s�z0_extract_bond_slaves_by_name.<locals>.<listcomp>r�
interfaces)�sortedrr:r5)rDrrBZbond_slave_namesrrAr�_extract_bond_slaves_by_name�s
��rFcs~t��d�}tj�|�sdSt�|�}|tkr2dS�fdd�dD�}dd�|D�}t�	d||�|g|D]}t�
|�qjdS)Nz etc/netplan/00-snapd-config.yamlcsg|]}t��|��qSr)r�target_path�r�f��targetrrrC�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�isfilerHrrrrC�sz9removing known config '%s' and derived existing files: %s)rrGrLrMrNr	Zload_binary_file�KNOWN_SNAPD_CONFIGr6r7�unlink)rKZtpath�contentZderived�existingrIrrJr�_clean_default�s"

��rS)�net_config_content�returnc
Cs�zddlm}ddlm}Wn"tk
r>t�dt�YdSXzltdd��X}|�	|�|�
�|�dtj
�|�}|�|�|�}|�|�|�tj�t��W5QRXWn6tk
r�}zt�dt|�WY�dSd	}~XYnXt�d
�dS)adUse netplan.State._write_yaml_file to write netplan config

    Where netplan python API exists, prefer to use of the private
    _write_yaml_file to ensure proper permissions and file locations
    are chosen by the netplan python bindings in the environment.

    By calling the netplan API, allow netplan versions to change behavior
    related to file permissions and treatment of sensitive configuration
    under the API call to _write_yaml_file.

    In future netplan releases, security-sensitive config may be written to
    separate file or directory paths than world-readable configuration parts.
    r)�Parser)�Statez.No netplan python module. Fallback to write %sF�w��modezUUnable to render network config using netplan python module. Fallback to write %s. %sNz0Rendered netplan config using netplan python APIT)Znetplan.parserrVZ
netplan.staterW�ImportErrorr6r7�CLOUDINIT_NETPLAN_FILEr�write�flush�seek�io�SEEK_SET�	load_yamlZimport_parser_resultsZ_write_yaml_filerLrM�basename�	Exceptionr9)rTrVrWrI�parserZstate_output_file�errr�netplan_api_write_yaml_file�s<�



��
rg)�cfg_filerQrUcCs.tj�|�sdSt�t�|��}|t�|�kS)z<Return True when new netplan config has changed vs previous.T)rLrM�existsr	rbZload_text_file)rhrQZ	prior_cfgrrr�has_netplan_config_changedsrj)rhrQcCsHtjr
dnd}tj�|�r4t�|�}||@|kr4|}tj|||d�dS)zDWrite netplan config to cfg_file because python API was unavailable.i�i�rYN)rZNETPLAN_CONFIG_ROOT_READ_ONLYrLrMrir	Zget_permissionsZ
write_file)rhrQrZZcurrent_moderrr�fallback_write_netplan_yaml s
rkc@s~eZdZdZddgZddgZddd�Zeed�d	d
�Z	de
eedd�dd
�Z
eed�dd�Zddd�Ze
ed�dd�ZdS)�RendererzBRenders network information in a /etc/netplan/network.yaml format.�netplanZgenerate�infoNcCsT|si}|�dt�|_|�dd�|_|�dd�|_|�dd�|_|�d�pLg|_dS)N�netplan_path�netplan_headerZpostcmdsF�
clean_defaultTr)r4r\rorp�	_postcmdsrq�	_features)�selfrrrr�__init__1szRenderer.__init__)rUc
Cs�|js~z0tj|jdd�\}}t�|�}|dd|_WnFtjk
rLYn2ttfk
r|}zt�	d|�W5d}~XYnX|jS)NT�Zcapturez
netplan.iorz-Failed to list features from netplan info: %s)
rsr�NETPLAN_INFOr	rb�ProcessExecutionError�	TypeError�KeyErrorr6r7)rtZ	info_blobZ_errrnrfrrrr:s
zRenderer.features)�
network_state�	templatesrUcCs�tj�t�|�|j�}t�tj�|��|�	|�}|j
r>|j
nd}|�d�sT|d7}||}t||�}t
|�sxt||�|jr�t|d�|j|j|d�|j|jd�dS)N��
rJ��run�config_changed)r�)rLrM�joinrrGror	Z
ensure_dir�dirname�_render_contentrp�endswithrjrgrkrqrS�_netplan_generaterr�_net_setup_link)rtr{r|rKZfpnplanrQ�headerZnetplan_config_changedrrr�render_network_stateHs"	




�zRenderer.render_network_statercCs8|st�d�dS|s$t�d�dStj|jdd�dS)Nz"netplan generate postcmds disabledzEskipping call to `netplan generate`. reason: identical netplan configTrv)r6r7r�NETPLAN_GENERATE)rtr�r�rrrr�is
�zRenderer._netplan_generateFcCs�|st�d�dSdt��kr,t�d�dSdddg}td�D]l}z>t�D],}tj�t	|�rJt
j
|t	|gd	d
�qJWq�Wq>t
jk
r�}z|}W5d}~XYq>Xq>td�|�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 disabledNz
net.ifnames=0z%Predictable interface names disabled.Zudevadmztest-builtinZnet_setup_link�TrvzQ'udevadm test-builtin net_setup_link' unable to run successfully for all devices.)
r6r7r	Zget_cmdline�rangerrLrM�islinkrrrx�RuntimeError)rtr�Z	setup_lnk�_ZifacerfZlast_exceptionrrrr�us.



�
��zRenderer._net_setup_link)r{rUc+	CsV|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�r�i}i}td}dD]R}t|
|�}|�
�D]8\}}|�|�dd��}|dk�rj�qB|�||i��qB�q,t|�dk�r�|�d|i�|
�d��r�|
d��|d<|
�d�}|dk�r�t|||�t|
|||j�|�||i�qd|dk�r.|
�d�}|dk�r,t�dd|�d��qdtt�|��}d|i}d}t|
|�}i}td} |�
�D]p\}}| �|�}|dk�r��qd|�||i�|dk�rdi}!|D]}"|"��\}#}$t|$�|!|#<�q�|�||!i��qdt|�dk�r�|�d|i�|
�d��r|
d��|d<t|
|||j�|�||i�qd|d krd|
�d!�|
�d"�d#�}%|
�dd�}|dk	�rn|��|%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)0N�zV2 to V2 passthroughr/F)�explicit_start�explicit_endrDr?cSs|ddk	S)N�r)�itrrr�<lambda>��z*Renderer._render_content.<locals>.<lambda>r(Zphysicalr)�set-namerZmac_addressZ
macaddressr��bond)Zbond_zbond-r��-rZ
parameterszbond-slavesZnone�bridge�bridge_portszInvalid config. The keyz'bridge_ports' is required in �.Zbridge_)z	path-costz
port-priority�vlanZvlan_idzvlan-raw-device)�id�link)r1r3r2r1cSs0|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�vlansr})�versionr6r7rr�rZ_network_stater4r-Zdns_searchdomainsZiter_interfacesr�filterr�lowerr>rr5rr�replacer:rFr9rE�copyr#�intr8r�)+rtr{r�r�r�r�r�rQrDr2r<rr;ZifcfgZif_typeZethZmacaddrr�Zbond_configZv2_bond_maprZbond_paramsZparamrZnewnameZslave_interfacesr�Zportsr�Zmatch_prefixZparamsZ	br_configZ
v2_bridge_mapZnewvalue�valZportZportvalr�Znscfgr��_namer@r�rrrr��s�

�



�








��



�


zRenderer._render_content)N)NN)F)�__name__�
__module__�__qualname__�__doc__r�rwrurr"rrrrr��boolr�r�r�rrrrrl+s
	��!
!rlcCs2dg}ddg}|D]}tj|||d�sdSqdS)Nrmz	/usr/sbinz/sbin)r3rKFT)rZwhich)rKZexpectedr3�prrr�	available6sr�)N)N)+r�r`ZloggingrLr�Ztempfiler�typingrrrZ	cloudinitrrrr	Z
cloudinit.netr
rrr
rrZcloudinit.net.network_staterrr\rOZ	getLoggerr�r6rrr>rFrSr"r�rgrjrkrlr�rrrr�<module>s0 

4


Zerion Mini Shell 1.0