%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__/cmdline.cpython-38.pyc

U

Ӈg�$�@s�ddlZddlZddlZddlZddlZddlZddlZddlZddlm	Z	ddl
mZmZdZ
dZe�e�ZGdd�dejd�ZGd	d
�d
e�ZegZddd�Zd
d�Zddd�Zdd�Zdd�Zdd�Zddd�ZdS)�N)�util)�get_devicelist�read_sys_net_safez#/run/initramfs/open-iscsi.interface�disabledc@s8eZdZdZejed�dd��Zejed�dd��Z	dS)�InitramfsNetworkConfigSourcezBABC for net config sources that read config written by initramfses��returncCsdS)zAIs this initramfs config source applicable to the current system?N���selfr	r	�7/usr/lib/python3/dist-packages/cloudinit/net/cmdline.py�
is_applicablesz*InitramfsNetworkConfigSource.is_applicablecCsdS)z;Render a v1 network config from the initramfs configurationNr	r
r	r	r�
render_config"sz*InitramfsNetworkConfigSource.render_configN)
�__name__�
__module__�__qualname__�__doc__�abc�abstractmethod�boolr
�dictrr	r	r	rrs
r)�	metaclassc@s6eZdZdZd
dd�Zed�dd�Zed�dd	�ZdS)�KlibcNetworkConfigSourcez�InitramfsNetworkConfigSource for klibc initramfs (i.e. Debian/Ubuntu)

    Has three parameters, but they are intended to make testing simpler, _not_
    for use in production code.  (This is indicated by the prepended
    underscores.)
    NcCsp||_||_||_|jdkr$t�|_|jdkr8t��|_|jdkrli|_t�D]}t|d�}|rN||j|<qNdS)N�address)�_files�
_mac_addrs�_cmdline�_get_klibc_net_cfg_filesr�get_cmdlinerr)rrrr�kZmac_addrr	r	r�__init__/s





z!KlibcNetworkConfigSource.__init__rcCs<|jr8t�|j�D]}|�d�rdSqtj�t�r8dSdS)aD
        Return whether this system has klibc initramfs network config or not

        Will return True if:
            (a) klibc files exist in /run, AND
            (b) either:
                (i) ip= or ip6= are on the kernel cmdline, OR
                (ii) an open-iscsi interface file is present in the system
        )zip=zip6=TF)	r�shlex�splitr�
startswith�os�path�exists�_OPEN_ISCSI_INTERFACE_FILE)r�itemr	r	rr
As

z&KlibcNetworkConfigSource.is_applicablecCst|j|jd�S)N)�files�	mac_addrs)�config_from_klibc_net_cfgrrr
r	r	rrTs�z&KlibcNetworkConfigSource.render_config)NNN)	rrrrr rr
rrr	r	r	rr's
rc
Cs�|dkri}t�|�}zd|kr(|dn|d}Wn,tk
r^}ztd�|�W5d}~XYnX|�d|�d��}|s�|�d�r�d}nd	}|d
kr�d	}|dkr�td|��d
|gd�}||kr�|||d<dD�]}|d|kr�q�|�|d|�}|d	kr�d}|dd�}	|dk�r"||d|	d<dD](}
||
|k�r&|||
|	|
��<�q&g}dD]<}|�||�}
|
�rXt|
�d���rX|�|||��qX|�r�||	d<|�d�}|�r�d|k�r�|�	d�|	d<n|�	�|	d<|d�|	�q�||fS)aConvert a klibc written shell content file to a 'config' entry
    When ip= is seen on the kernel command line in debian initramfs
    and networking is brought up, ipconfig will populate
    /run/net-<name>.cfg.

    The files are shell style syntax, and examples are in the tests
    provided here.  There is no good documentation on this unfortunately.

    DEVICE=<name> is expected/required and PROTO should indicate if
    this is 'none' (static) or 'dhcp' or 'dhcp6' (LP: #1621507) or 'static'
    or 'off' (LP: 2065787). Note that IPV6PROTO is also written to address
    the possibility of both ipv4 and ipv6 getting addresses.

    Full syntax is documented at:
    https://git.kernel.org/pub/scm/libs/klibc/klibc.git/plain/usr/kinit/ipconfig/README.ipconfig
    NZDEVICEZDEVICE6z&no 'DEVICE' or 'DEVICE6' entry in dataZPROTOZ	IPV6PROTO�filename�dhcp�none)�staticZoff)r.r-Zdhcp6zUnexpected value for PROTO: %sZphysical)�type�name�subnets�mac_address)ZIPV4ZIPV6ZADDRr/Zmanual)r0Zcontrolr)ZNETMASKZ	BROADCASTZGATEWAY)ZDNS0ZDNS1z:.0Zdns_nameserversZDOMAINSEARCH�,Z
dns_searchr2)
rZload_shell_content�KeyError�
ValueError�get�lower�len�strip�appendr")Zcontentr*�datar1�e�protoZifaceZpreZ	cur_protoZsubnet�keyZdnsZnskey�ns�searchr	r	r�_klibc_to_config_entry^s`

�




rBcCst�d�t�d�S)Nz/run/net-*.confz/run/net6-*.conf)�globr	r	r	rr�src	Cs�|dkrt�}g}i}|D]�}tt�|�|d�\}}||kr�||d}|�d�|�d�kr�tdj|d�||d�|�d�|�d�d���|d�|d�||d�	|�q|g|d	�||<|�	|�q|d
d�S)N)r*�entryr3zedevice '{name}' was defined multiple times ({files}) but had differing mac addresses: {old} -> {new}.� r))r1r)�old�newr2)r)rD�)�config�version)
rrBrZload_text_filer7r6�format�join�extendr;)r)r*�entries�namesZcfg_filer1rD�prevr	r	rr+�s2�
��	r+cCs(tD]}|�}|��sq|��SdS)a
    Return v1 network config for initramfs-configured networking (or None)

    This will consider each _INITRAMFS_CONFIG_SOURCES entry in turn, and return
    v1 network configuration for the first one that is applicable.  If none are
    applicable, return None.
    N)�_INITRAMFS_CONFIG_SOURCESr
r)Zsrc_clsZ
cfg_sourcer	r	r�read_initramfs_config�srRc
Cs�t�|��p}d}zVz(tjd|d�}|��WW�:W5QR�Stk
rb|YW�W5QR�SXW5|rt|��XW5QRXdS)N�rb)�modeZfileobj)�io�BytesIO�close�gzipZGzipFile�read�IOError)�blobZiobufZgzfpr	r	r�_decomp_gzip�sr\c	Cs>zt�|�}Wn&ttfk
r4t�d|�YdSXt|�S)z�Decode a string base64 encoding, if gzipped, uncompress as well

    :return: decompressed unencoded string of the data or empty string on
       unencoded data.
    zaExpected base64 encoded kernel command line parameter network-config. Ignoring network-config=%s.�)�base64Z	b64decode�	TypeErrorr6�LOG�errorr\)r<r[r	r	r�_b64dgzs�rbcCsj|dkrt��}d|krfd}|��D]}|�d�r$|�dd�d}q$|rf|tkrXddiSt�t|��SdS)Nznetwork-config=�=rHrIr)rrr"r#�&KERNEL_CMDLINE_NETWORK_CONFIG_DISABLEDZ	load_yamlrb)ZcmdlineZdata64�tokr	r	r�read_kernel_cmdline_configs
rf)N)NN)N)rr^rCrXrUZloggingr$r!Z	cloudinitrZ
cloudinit.netrrr'rdZ	getLoggerrr`�ABCMetarrrQrBrr+rRr\rbrfr	r	r	r�<module>s,
4
`


Zerion Mini Shell 1.0