HEX
Server: LiteSpeed
System: Linux php-prod-1.spaceapp.ru 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User: xnsbb3110 (1041)
PHP: 8.1.33
Disabled: NONE
Upload Files
File: //usr/share/netplan/netplan_cli/cli/__pycache__/state.cpython-310.pyc
o

ϐxeGO�	@sRddlZddlZddlZddlZddlZddlZddlZddlmZddl	m
Z
mZmZm
Z
ddlZddlZddlZddlmZe
e
edfedeeeeedfZidd�dd�d	d
�dd�d
d�dd
�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd�dd
�dddddddd��ZGdd�d�ZGd d!�d!�ZGd"d#�d#�ZdS)$�N)�StringIO)�Dict�List�Type�Union�)�utils�JSON�bond�bridge�ether�ethernet�ipgre�tunnel�ip6gre�loopback�sit�tunnel6�	wireguard�wlan�wifi�wwan�modem�vlan�vrf�vxlan�wifis�	ethernetsz	nm-device�dummy)�bridges�bondsz
nm-devicesz
dummy-devices�modems�vlans�vrfsc@seZdZdedefdd�Zggddfdedededed	ef
d
d�Zdedefd
d�Z	dedefdd�Z
defdd�Zede
fdd��Zede
fdd��Zedefdd��Zedefdd��Zedefdd��Zedefdd��Zedefd d!��Zedefd"d#��Zedefd$d%��Zd&S)'�	Interface�ip�returncCs$t|�dd�}�dkr|��SdS)z�
        Extract the MAC address if it's set inside the JSON data and seems to
        have the correct format. Return 'None' otherwise.
        �address��N)�len�get�lower)�selfr%r'�r.�+/usr/share/netplan/netplan_cli/cli/state.py�
__extract_macFszInterface.__extract_mac)NN�nd_data�nm_data�
resolved_data�
route_datac
s�|�dd��_|�dd��_d|�dg�vrdnd�_|�dd����_��|��_|p-g}t�fd	d
�|D�d��_	t�fdd
�|D�d��_
d�_|dr~g�_|dD]'}t|d�t�j�kr}|d
}|d}�j�
t�|d�dd�|D����qVd�_|d
r�g�_|d
D]}	t|	d�t�j�kr��j�
t|	d
��q�g}
d�_|dr�|
|d7}
|d
r�|
|d
7}
|
�r;g�_|
D]u}|�d��jk�r:d|�d�i}|�d�}
r�|
|d<|�d�}
r�|
|d<|�d�}
r�|
|d<|�d�}
�r|
|d<|�d�}
�r|
|d<|�d�}
�r|
|d<|�d�}
�r(|
|d<|�d�}
�r4|
|d<�j�
|�q�d�_|�d�}�r�g�_|D]]}g}t�|d �j�r]|�
d!��j�r��jD]%}d|v�r�t�|d�t�|d �k�r�|dd"k�r�|�
d"�n�qd|d ��}|d#|d$ii}|�r�|||d<�j�
|��qKd�_|�d%i��d&�}�r�|���_���j��p�d'�_dS)(N�ifindex����ifname�unknown�UP�flags�DOWN�	operstatec3�"�|]}|d�jkr|VqdS)�IndexN)�idx��.0�x�r-r.r/�	<genexpr>Y�� z%Interface.__init__.<locals>.<genexpr>c3r=)�deviceN��namer@rCr.r/rDZrErr��cS�g|]}|�dd��qS)r�big)�to_bytes)rA�vr.r.r/�
<listcomp>d�z&Interface.__init__.<locals>.<listcomp>�dev�to�dst�family�gateway�via�prefsrc�from�metric�type�scope�protocol�table�	addr_info�local�link�dhcp�prefix�	prefixlen�linkinfo�	info_kindr()r+r?rH�
adminstate�upperr<�_Interface__extract_mac�
macaddress�next�nd�nm�
dns_addresses�int�append�socket�	inet_ntop�join�
dns_search�str�routes�	addresses�	ipaddress�
ip_address�
is_link_localr,�iproute_type�strip�query_networkctl�_networkctl)r-r%r1r2r3r4�itr�ipfamily�dnsrN�_routes�obj�elem�valr^�addrr:�route�ip_addrrer.rCr/�__init__Os�$���



�
zInterface.__init__�con_namec
Csbd}zt�ddddd|g�}|��WSty0}zt�d�|t|���WYd}~|Sd}~ww)Nz--get-valuesz802-11-wireless.ssid�con�show�idz+Cannot query NetworkManager SSID for {}: {})r�	nmcli_outr{�	Exception�logging�warning�formatrt)r-r��ssid�er.r.r/�
query_nm_ssid�s�
���zInterface.query_nm_ssidr7c
Cs^d}ztjddd|gdd�}W|Sty.}zt�d�|t|���WYd}~|Sd}~ww)N�
networkctl�statusz--T��textz"Cannot query networkctl for {}: {})�
subprocess�check_outputr�r�r�r�rt)r-r7�outputr�r.r.r/r|�s����zInterface.query_networkctlcCs�|j|j|jd�}|jr|j|d<|jr|j|d<|jr!|j|d<|jr)|j|d<|jr1|j|d<|jr9|j|d<|j	rA|j	|d<|j
rI|j
|d	<|jrQ|j|d
<|jrY|j|d<|j
ra|j
|d<|jri|j|d
<|j|fS)N)�indexrfr<rZr��tunnel_mode�backendr�ri�vendorrvrmrsru�activation_mode)r?rfr<rZr�r�r��	netdef_idrir�rvrmrsrur�rH)r-�jsonr.r.r/r��s:�












zInterface.jsoncC�|jdko	|jdkS)Nr9�rfr<rCr.r.r/�up��zInterface.upcCr�)Nr;r�rCr.r.r/�down�r�zInterface.downcCs<|jr	|j�d�nd}t�|�}r|St�d�|��dS)NrzUnknown device type: {})rkr+�DEVICE_TYPESr�r�r�)r-�nd_type�device_typer.r.r/rZ�s
zInterface.typecCs|jdkr|jr|jSdS)Nr)rZrzrCr.r.r/r��szInterface.tunnel_modecCsN|jrd|j�dd�vrd|j�dd�vrdS|jr%d|j�dd�vr%d	SdS)
N�	unmanaged�
SetupStater(�run/systemd/network/10-netplan-�NetworkFile�networkd�.run/NetworkManager/system-connections/netplan-�filename�NetworkManager)rkr+rlrCr.r.r/r��szInterface.backendcCs�|jdkr|j�dd��d�d�d�dS|jdkrK|j�d	d��d
�d�d�d}|j�dd�d
krI|�|j�d��}|rI|�d|�d}|SdS)Nr�r�r(r�rz.networkrr�r�r�z
.nmconnectionrZz802-11-wirelessrH�-)r�rkr+�splitrlr�)r-�netdefr�r.r.r/r��s,
���
���zInterface.netdef_idcCs,|jrd|jvr|jdr|jd��SdS)N�Vendor)rkr{rCr.r.r/r�szInterface.vendorcCsb|jdkr/|j��D]$}|��}d}|�|�r.|t|�td����}|r*|SdSq
dS)NrzWiFi access point: z (xB:SS:ID:xx:xx:xx))rZr}�
splitlinesr{�
startswithr*)r-�line�keyr�r.r.r/r�s

�zInterface.ssidcCs�|jdkr0|j��D]#}|��}d}|�|�r-|t|�d���}|dkr)|SdSq
dS|jdkr@|jddkr>dSdSdS)Nr�zActivation Policy: r�r��autoconnect�no�manual)r�r}r�r{r�r*rl)r-r�r��moder.r.r/r�s

�
�zInterface.activation_modeN)�__name__�
__module__�__qualname__�dictrtrhr	�tupler�r�r|r��property�boolr�r�rZr�r�r�r�r�r�r.r.r.r/r$Es<	��
�V	 	r$c@s�eZdZdZd!dd�Zedefdd��Zed	ede	fd
d��Z
ededefd
d��Z
edefdd��Zedefdd��Zedefdd��Zedefdd��Zedefdd��Zedefdd��Zedefdd��Zedefdd��Zdefdd �ZdS)"�SystemConfigStatez- Collects the system's network configuration NFc	s`t�d�s!t�d�rt�d�t�d�t�d�t�ddgd�|�	�}|�
��|r-�s7t�d�t�d�|���|��\��|�
�\��������fdd	�|D�|_d
d	�|jD�}|�|�}�rst�fdd�|jD�d�g}d
d	�|D�}�r�|gkr�t�d����t�d�d||��d�i|_|r�|jn|}|D]
}|��\�}||j�<q�dS)Nzsystemd-networkd.servicez^'netplan status' depends on networkd, but systemd-networkd.service is masked. Please start it.rz3systemd-networkd.service is not active. Starting...�startTz,Could not query iproute2 or systemd-networkdc	s$g|]}t|����f��f��qSr.)r$�rA�itf)rmrsr��nmcli�route4�route6r.r/rOGs
��z.SystemConfigState.__init__.<locals>.<listcomp>cSsg|]	}|jdkr|�qS)r;)r<r�r.r.r/rOKsc3s�|]
}|j�kr|VqdS�NrGr�)r7r.r/rDQs�z-SystemConfigState.__init__.<locals>.<genexpr>cSsg|]}|dur|�qSr�r.�rAr�r.r.r/rORrPzCould not find interface {}znetplan-global-state)�online�nameservers)r�systemctl_is_active�systemctl_is_maskedr��error�sys�exit�debug�	systemctl�query_iproute2�query_networkd�query_nm�query_routes�query_resolved�interface_list�query_online_staterjr��resolvconf_json�stater�)	r-r7�all�iproute2�filtered�online_state�itf_iterr�r�r.)rmrsr7r�r�r�r�r/r�/sF






�

���zSystemConfigState.__init__r&c
Cs�ggdd�}zZtd��K}|��}d|vrd|d<nd|vr!d|d<|g|��D]$}|�d�r=|d	|��d
d�7<|�d�rL|��d
d�|d<q(Wd�W|S1sYwYW|Sty}}zt�d�t	|���WYd}~|Sd}~ww)
N)rv�searchr�z/etc/resolv.confz/# This is /run/systemd/resolve/stub-resolv.conf�stubr�z*# This is /run/systemd/resolve/resolv.conf�compat�
nameserverrvrr�z!Cannot parse /etc/resolv.conf: {})
�open�readline�	readlinesr�r�r�r�r�r�rt)�cls�res�f�	firstliner�r�r.r.r/r�ds6�



�������z!SystemConfigState.resolvconf_json�
interfacescCs�|D]A}|jrC|jrC|jrC|jrCg}|jD]}t|���d\}}d|vs+d|dvr0|�|�qdd�|jD�}|rC|rC|jrCdSqdS)Nrr:r`cSs g|]}|�dd�dkr|�qS)rRN�default)r+r@r.r.r/rO�s z8SystemConfigState.query_online_state.<locals>.<listcomp>TF)r�rvrurm�list�itemsro)r�r�r��
non_local_ipsr�r%�extra�default_routesr.r.r/r�|s

��z$SystemConfigState.query_online_state�
cmd_outputcCs
t�|�Sr��r��loads�r�r�r.r.r/�process_generic��
z!SystemConfigState.process_genericc
Csbd}ztjgd�dd�}|�|�}W|Sty0}zt�d�t|���WYd}~|Sd}~ww)N)r%�-d�-jr�Tr�z(Cannot query iproute2 interface data: {})r�r�r�r�r��criticalr�rt�r��datar�r�r.r.r/r���
����z SystemConfigState.query_iproute2cCst�|�dS)N�
Interfacesr�r�r.r.r/�process_networkd�sz"SystemConfigState.process_networkdc
Csbd}ztjddgdd�}|�|�}W|Sty0}zt�d�t|���WYd}~|Sd}~ww)Nr�z--json=shortTr�z(Cannot query networkd interface data: {})r�r�rr�r�rr�rtrr.r.r/r��rz SystemConfigState.query_networkdc
Csdg}|��D])}|�d�}|dr|dnd}|r/|�||d|d|d|d|dd��q|S)	N�:rrrI���)rFrH�uuidr�rZr�)r�r�ro)r�r�rr�r�rQr.r.r/�
process_nm�s
��zSystemConfigState.process_nmc
Cs^d}zt�gd��}|�|�}W|Sty.}zt�d�t|���WYd}~|Sd}~ww)N)z-tz-fz*DEVICE,NAME,UUID,FILENAME,TYPE,AUTOCONNECTr�r�z.Cannot query NetworkManager interface data: {})rr�rr�r�r�r�rtrr.r.r/r��s���zSystemConfigState.query_nmc
Cs�d}d}ztjgd�dd�}|�|�}tjgd�dd�}|�|�}Wnty>}zt�d�t|���WYd}~nd}~ww|rO|D]}|�dt	j
ji�qC|r_|D]}|�dt	jji�qS||fS)N)r%r�r�z-4r�r�r]r�Tr�)r%r�r�z-6r�r�r]r�z$Cannot query iproute2 route data: {}rT)
r�r�r�r�r�r�r�rt�updaterp�AF_INET�value�AF_INET6)r��data4�data6�output4�output6r�r�r.r.r/r��s,
�

� ��zSystemConfigState.query_routesc
Cs�d}d}z"t��}|�dd�}t�|d�}|�d�}|d}|d}W||fStyE}zt�d�t	|���WYd}~||fSd}~ww)Nzorg.freedesktop.resolve1z/org/freedesktop/resolve1zorg.freedesktop.DBus.Propertiesz org.freedesktop.resolve1.Manager�DNS�Domainsz"Cannot query resolved DNS data: {})
�dbus�	SystemBus�
get_objectr$�GetAllr�r�r�r�rt)r�rvr��ipc�resolve1�resolve1_ifr�r�r.r.r/r��s

���z SystemConfigState.query_resolvedcCs
t|j�Sr�)r*r�rCr.r.r/�number_of_interfaces�r�z&SystemConfigState.number_of_interfacescCs|jSr�)r�rCr.r.r/�get_data�szSystemConfigState.get_data)NF)r�r�r��__doc__r��classmethodr�r�r�r�r�rtr	r�r�rr�rr�r�r�r�r�rnrrr.r.r.r/r�,s4
5

r�c@s6eZdZdZddd�Zdefdd�Zdefd	d
�ZdS)
�NetplanConfigStatez. Collects the Netplan's network configuration r��/cCs�t��}|�|�t��}|�|�t�|_|dkr#|j|jd�dS|�d�s/d�	d|f�}t
�d|�}dd�|D�}t�}|j|d�t�|||j�dS)Nr�)�output_file�network�.z	(?<!\\)\.cSrK)z\.r%)�replacer�r.r.r/rOrPz/NetplanConfigState.__init__.<locals>.<listcomp>)
�netplan�Parser�load_yaml_hierarchy�State�import_parser_resultsrr��
_dump_yamlr�rr�rer��_dump_yaml_subtree)r-�subtree�rootdir�parser�np_state�tmp_inr.r.r/r��s


zNetplanConfigState.__init__r&cCs
|j��Sr�)r��getvaluerCr.r.r/�__str__s
zNetplanConfigState.__str__cCst�|j���Sr�)�yaml�	safe_loadr�r4rCr.r.r/rszNetplanConfigState.get_dataN)r�r")	r�r�r�rr�rtr5r�rr.r.r.r/r!�s

r!)rwr�r�r-rpr�r��ior�typingrrrrr6rr'r(rrtrn�floatr�r	r�r$r�r!r.r.r.r/�<module>s|&��������	�
���
������hK