HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/share/netplan/netplan/cli/commands/__pycache__/migrate.cpython-38.pyc
U

��~f�O�@s�dZddlZddlZddlZddlZddlmZzddlZdZWnek
rXdZYnXddl	m
Z
ddlZddlm
mZGdd�dej�ZdS)	znetplan migrate command line�N)�globFT)�OrderedDictcsVeZdZ�fdd�Zdd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	ddd�Z
�ZS)�NetplanMigratecst�jddddd�dS)NZmigratez/Migration of /etc/network/interfaces to netplanT)�
command_id�description�leaf�testing)�super�__init__��self��	__class__��2/usr/share/netplan/netplan/cli/commands/migrate.pyr
%s
�zNetplanMigrate.__init__cCs�d|krfd|kri|d<d|dkr0g|dd<|d�d�D] }|sHq>|dd|g7<q>|d=d|kr�d|kr~i|d<d|dkr�g|dd<|d�d�D] }|s�q�|dd|g7<q�|d=dS)z�Parse dns options (dns-nameservers and dns-search) from if_options
        (an interface options dict) into the interface configuration if_config
        Mutates the arguments in place.
        zdns-nameserversZnameservers�	addresses� z
dns-search�searchN)�split)r�
if_options�	if_config�ns�domainrrr�parse_dns_options+s(z NetplanMigrate.parse_dns_optionsc	Cs�d|kr�zt|d�}Wn0tk
rHt�d||d�t�d�YnXd|kr||d|ks|t�d|||d�t�d�||d<|d=dS)z�Parse out the MTU. Operates the same way as parse_dns_options
        iface is the name of the interface, used only to print error messages
        �mtuz%s: cannot parse "%s" as an MTU�z0%s: tried to set MTU=%d, but already have MTU=%dN)�int�
ValueError�logging�error�sys�exit)r�ifacerrrrrr�	parse_mtuHs
zNetplanMigrate.parse_mtucCsXd|krTd|krB|d|dksBt�d||d|d�t�d�|d|d<|d=dS)z�Parse out the manually configured MAC.
        Operates the same way as parse_dns_options
        iface is the name of the interface, used only to print error messages
        Z	hwaddress�
macaddressz0%s: tried to set MAC %s, but already have MAC %srN)rrr r!)rr"rrrrr�parse_hwaddress[s�
zNetplanMigrate.parse_hwaddresscCsV|jjddd�|jjdddd�|j|_|��trJt�d�t�	d	�|�
�dS)
Nz
--root-dirzOSearch for and generate configuration files in this root directory instead of /)�helpz	--dry-run�
store_truezQPrint converted netplan configuration to stdout instead of writing/changing files)�actionr&z�The `yaml` Python package couldn't be imported, and is needed for the migrate command.
To install it on Debian or Ubuntu-based system, run `apt install python3-yaml`�)�parser�add_argument�command_migrate�func�
parse_args�NO_YAMLrrr r!�run_commandrrrr�runjs�
�

zNetplanMigrate.runcCsi}z|�|jpd�\}}Wn:tk
rV}zt�t|��t�d�W5d}~XYnX|��D�]�\}}|��D�]x\}}t�	d|||�||kr�t�d|�t�d�|ddkr�t�	d|�qr|ddk�rl|�
d	i��
d
i��
|i�}	|�|d|	�|�||d|	�|d�r@t�d|d
�
|d����t�d�|dk�rTd|	d<n|dk�sbt�d|	d<qr|ddk�r�|�
d	i��
d
i��
|i�}	d|	k�r�g|	d<|�|d|	�|�||d|	�|�||d|	�|dk�rtdddg�}
tddddg�}t|d���}||
}
|
�rx|
�|�D] }t�d|||�t�d��q,|
|D] }t�d|||�t�d��qVd|dk�r�t�d|�t�d�d|ddk�r�|dd�d�d }|dd}nLd|dk�r�t�d!|�t�d�|dd}|ddd|dd}zt�|�}Wn@tjk
�rl}zt�d"|||�t�d�W5d}~XYnXztj|d#d$�}Wn@tjk
�r�}zt�d%|||�t�d�W5d}~XYnX|	dt|�dt|j�g7<d|dk�r�|dd|	d&<�q�|dk�st�tdddd'g�}
tdd(d)d*dd+d,d-g�}t|d���}||
}
|
�r�|
�|�D] }t�d|||�t�d��qf|
|D] }t�d|||�t�d��q�d|dk�r�t�d|�t�d�d|ddk�r|dd�d�d }|dd}nLd|dk�r0t�d!|�t�d�|dd}|ddd|dd}zt�|�}Wn@tjk
�r�}zt�d.|||�t�d�W5d}~XYnXztj|d#d$�}Wn@tjk
�r�}zt�d/|||�t�d�W5d}~XYnX|	dt|�dt|j�g7<d|dk�r>|dd|	d0<d'|dk�r�|dd'd1k�rhd#|	d'<nf|dd'd2k�r�d|	d'<nJ|dd'd3k�r�t�d4|�t�d�n t�d5||dd'�t�d�qrt�d6||d�t�d�qrq`tj�
|j�pdd7�}|�r�d|d	d8<t�|�}|j �r4t!|�n�tj�
|j�pDdd9�}zt�"tj�#|��Wnt$k
�rvYnXz$t%|d:��}|�&|�W5QRXWn,t$k
�r�t�d;|�t�d<�YnXt�'d=|�n
t�'d>�|j �st�'d?||�t�(||d@�dS)AN�rzConverting %s family %s %sz.%s: non-automatic interfaces are not supported�method�loopbackzIgnoring loopback interface %s�dhcp�network�	ethernets�optionsz2%s: option(s) %s are not supported for dhcp methodz, �inetTZdhcp4�inet6Zdhcp6�staticrZaddressZnetmaskZgatewayZ	broadcastZmetricZpointopointZscopez%s: unsupported %s option "%s"z%s: unknown %s option "%s"z(%s: no address supplied in static method�/rzE%s: address does not specify prefix length, and netmask not specifiedz-%s: error parsing "%s" as an IPv4 address: %sF)�strictz-%s: error parsing "%s" as an IPv4 network: %sZgateway4Z	accept_raZmediaZautoconfZprivextzpreferred-lifetimezdad-attemptszdad-intervalz-%s: error parsing "%s" as an IPv6 address: %sz-%s: error parsing "%s" as an IPv6 network: %sZgateway6�0�1�2z(%s: netplan does not support accept_ra=2z#%s: unexpected accept_ra value "%s"z%s: method %s is not supportedzetc/network/interfaces�versionzetc/netplan/10-ifupdown.yaml�xzC%s already exists; remove it if you want to run the migration again�zmigration complete, wrote %sz>ifupdown does not configure any interfaces, nothing to migratez#renaming %s to %s.netplan-convertedz.netplan-converted))�parse_ifupdown�root_dirrrr�strr r!�items�debug�
setdefaultrr%�join�keys�AssertionErrorr#�set�intersectionr�	ipaddressZIPv4AddressZAddressValueErrorZIPv4NetworkZNetmaskValueErrorZ	prefixlenZIPv6AddressZIPv6Network�os�path�yaml�dump�dry_run�print�makedirs�dirname�FileExistsError�open�write�info�rename)rZnetplan_config�ifacesZauto_ifaces�er"Z
family_configZfamily�config�cZsupported_optsZunsupported_opts�optsZbad_optsZunsupported�unknownZ	addr_specZnet_specZipaddr�aZipnetrZnetplan_yaml�dest�frrrr,xs0

�






�
$
�
�
$


�


zNetplanMigrate.command_migratec
CsLdd�}g}t|�d}�zt|d|���}t�d|j�|D]�}|��}|r@|�d�r\q@|�d�r�t�d�}||t	j
�|j�|�}	t	�|	�D]0}|�
|�r�||�|t	j
�|	|d	�|��7}q�q@|�d
��r
t||t	j
�|j�|��D]}||�|||d	��7}q�q@|�|�q@W5QRXWn$tk
�rFt�d||�YnX|S)zvReturn normalized lines from ifupdown config

        This resolves "source" and "source-directory" includes.
        cSs.|��d}|�d�r||S|d|SdS)Nr)r<)r�
startswith)�rootdir�curdir�line�argrrr�expand_source_argGs
zCNetplanMigrate._ifupdown_lines_from_file.<locals>.expand_source_argr)r<z
reading %s�#zsource-directory z^[a-zA-Z0-9_-]+$Nzsource z%s/%s does not exist, ignoring)�lenrYrrH�name�striprf�re�compilerPrQrW�listdir�match�_ifupdown_lines_from_filerJr�append�FileNotFoundError)
rrgrQrk�linesZrootdir_lenreriZvalid_re�drrrrtBs.


&z(NetplanMigrate._ifupdown_lines_from_filer<c	Cs�ddddddd�}|�|d�}t�}t�}d}d}|D�]�}|��}	z&||	d}
t�d|	|
�d}d}Wn`tk
r�|r�t�d||�|jdd	�d|||d
|	d<Yq6ntd|	d��YnXt|	�|
dkr�td|
|	dt|	�df��|	dd
k�r|�	|	d�q6|	ddk�r0td��q6|	ddk�r@q6|	ddk�r�|	ddk�rltd|	d��|	ddk�r�td|	d��|	d}|	d}|	did�|�
|	dt��|<q6td|	d��q6t�d||�||fS)uWParse ifupdown configuration.

        Return (iface_name →  family → {method, options}, auto_ifaces: set) tuple
        on successful parsing, or a ValueError when encountering an invalid file or
        ifupdown features which are not supported (such as "mapping").

        options is itself a dictionary option_name → value.
        r)rC)�auto�
allow-auto�
allow-hotplug�mapping�
no-scriptsr"z/etc/network/interfacesNrz$line fields %s (expected length: %i)z$in_options %s, parsing as option: %s)�maxsplitr8zUnknown stanza type %sz0Expected %i fields for stanza type %s but got %i)ryrzr{r|zmapping stanza is not supportedr}r"r)r9r:zUnknown address family %s)r4r;r5zUnsupported method %s)r3r8z!stanza type %s is not implementedz,final parsed interfaces: %s; auto ifaces: %s)rtrrMrrrH�KeyErrorrrm�addrI�NotImplementedError)rrgZfieldlenrwr]ryZ
in_optionsZ	in_familyri�fieldsZexp_lenrrrrDhsP

$�
"zNetplanMigrate.parse_ifupdown)r<)�__name__�
__module__�__qualname__r
rr#r%r1r,rtrD�
__classcell__rrr
rr$sK&r)�__doc__rrPr rprrRr/�ImportError�collectionsrrO�netplan.cli.utils�cli�utils�NetplanCommandrrrrr�<module>s