BYPASS SHELL BY ./RAZORGANZ
Server: nginx/1.20.1
System: Linux iZdzfnv9mwfppeZ 5.10.134-19.2.al8.x86_64 #1 SMP Wed Oct 29 22:47:09 CST 2025 x86_64
User: apache (48)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/cloudinit/net/__pycache__/networkd.cpython-36.opt-1.pyc
3

�q�h1�@s�ddlmZddlmZddlmZddlmZmZddl	m
Z
ddlmZej
e�ZGdd�d�ZGd	d
�d
e
j�Zddd
�ZdS)�)�OrderedDict)�Optional)�log)�subp�util)�renderer)�NetworkStatec@s,eZdZdd�Zdd�Zdd�Zdd�Zd	S)
�	CfgParserc	Cstggggggid��|_dS)N)�Match�Link�Network�DHCPv4�DHCPv6�Address�Route)r�	conf_dict)�self�r�/usr/lib/python3.6/networkd.py�__init__szCfgParser.__init__cCsdx^|jj�D]P}||kr|j|j|dt|��ttj|j|��|j|<|j|j�qWdS)N�=)r�keys�append�str�list�dict�fromkeys�sort)r�sec�key�val�krrr�update_section#s
zCfgParser.update_sectioncCs�x�|jj�D]|}||kr||j|kr4g|j||<|j||j|dt|��ttj|j||��|j||<|j||j�qWdS)z�
        For each route section we use rid as a key, this allows us to isolate
        this route from others on subsequent calls.
        rN)rrrrrrrr)rr�ridrr r!rrr�update_route_section+s  zCfgParser.update_route_sectioncCs�d}x�t|jj��D]�\}}|s"q|dkrbx�t|�D](}|d|d7}||d7}|d7}q4Wq|dkr�x�t|�D]>}|d|d7}x(t||�D]}||d7}|d7}q�WqtWq|d|d7}xt|�D]}||d7}q�W|d7}qW|S)N�r�[z]
�
r)�sortedr�items)r�contentsr!�v�e�nrrr�get_final_conf;s(zCfgParser.get_final_confN)�__name__�
__module__�__qualname__rr"r$r.rrrrr	s
r	c@s�eZdZdZddd�Zed�dd�Zed�dd	�Zed�d
d�Zed�dd
�Z	ed�dd�Z
eed�dd�Zed�dd�Z
dd�Zdeeedd�dd�Zeed�dd�ZdS)�Rendererz�
    Renders network information in /etc/systemd/network

    This Renderer is currently experimental and doesn't support all the
    use cases supported by the other renderers yet.
    NcCs(|si}|jdd�|_|jdd�|_dS)N�resolve_conf_fnz/etc/systemd/resolved.conf�network_conf_dirz/etc/systemd/network/)�getr3r4)r�configrrrr\s
zRenderer.__init__)�cfgcCsXd}dddd�}|sdSx6|j�D]*\}}||kr"||r"|j||||�q"W|dS)Nr
�NameZDriverZ
MACAddress)�nameZdriverZmac_addressr9)r)r")r�ifacer7rZ
match_dictr!r+rrr�generate_match_sectionfszRenderer.generate_match_sectioncCs2d}|sdSd|kr.|dr.|j|d|d�dS)NrZmtuZMTUBytes)r")rr:r7rrrr�generate_link_sectionws
zRenderer.generate_link_sectionc	Cstd}dddd�}d}d|kr,dt|d�}xB|j�D]6\}}||krHq6|d	krX||7}|j|||||�q6Wd
S)zy
        Parse a route and use rid as a key in order to isolate the route from
        others in the route dict.
        r�GatewayZDestinationZMetric)�gateway�networkZmetricr%�prefix�/r?N)rr)r$)	rr#�confr7rZ
route_cfg_mapr@r!r+rrr�parse_routes�szRenderer.parse_routescCs�d}d}d}�xj|jdg�D�]X}|d}|dks:|dkrV|dkrHd}qx|d	krxd
}n"|dkrx|dkrld	}n|dkrxd
}d|kr�|dr�x,|dD] }|jd
|��||�|d}q�Wd|krddddd�}	x�|j�D]�\}
}|
dk�rd|k�r|dt|d�7}|jd|	|
|�q�|
dk�rH|jdd|��|	|
|�|d}q�|
dk�sZ|
dkr�|j||	|
dj|��q�WqW|j|d|�|d!k�r�t|jdd�t��r�|j|d |d�|S)"N�norrZsubnets�typeZdhcp4�dhcpZipv4�ipv6�yesZdhcp6Zroutes�r��addressrr=�DNS�Domains)rKr>�dns_nameservers�
dns_searchr@rAr>r�arNrO� ZDHCPz	accept-rar%ZIPv6AcceptRA)rGrH)	r5rCr)rr"r$�join�
isinstance�bool)rr:r7rFrr#r,�t�iZsubnet_cfg_mapr!r+rrr�
parse_subnets�sP



 zRenderer.parse_subnetsc
Cs�x�d
D]�}||krqt||�j�}ytj|�}|r8dnd}Wn,tk
rj|dkrftjd|�d}YnX|dkrzd}nd}|j|d	|�qWdS)N�dhcp4domain�dhcp6domainrHrD�routezInvalid dhcp4domain value - %sr
r�
UseDomains)rXrY)r�casefoldrZtranslate_bool�
ValueError�LOGZwarningr")r�dr7�item�retZsectionrrr�dhcp_domain�s


zRenderer.dhcp_domain)r7�nsc	Cs�d}dddd�}|jd�}|r:|jdkr:|j|jd�}n|rN|jdkrNdSx<|j�D]0\}}||krX||rX|j||d	j||��qXWdS)
NrrMrL)�search�nameserversZ	addresses�dnsrJ)rdre�rQ)r5�versionZdns_searchdomainsrNr)r"rR)	rr:r7rcrZdns_cfg_maprfr!r+rrr�	parse_dns�s
zRenderer.parse_dnsc	Cs�ddddd�}|dkr,|jddd	d
dd��d
|�d�|kr�|dd|��gkr�|d
|�d�}x4|j�D](\}}||krh|jd|��|||�qhWdS)Nzuse-dnszuse-domainszuse-hostnamezuse-ntp)ZUseDNSr[ZUseHostnameZUseNTP�4z
send-hostnameZhostnamezroute-metriczuse-mtuz
use-routes)ZSendHostnameZHostnameZRouteMetricZUseMTUZ	UseRoutesrFz
-overridesrHZipvZDHCPv)�updater)r")	rr7�devicerFrhZdhcp_config_mapsZdhcp_overridesr!r+rrr�parse_dhcp_overrides�s$
zRenderer.parse_dhcp_overridescCs>d}tjd|�|d|d}tj||�tj|||�dS)Nzsystemd-networkz Setting Networking Config for %sz10-cloud-init-z.network)r^�debugrZ
write_fileZchownbyname)r�linkrBZnwk_dirZnet_fn_ownerZnet_fnrrr�create_network_files
zRenderer.create_network_file)�
network_state�	templates�returncCsT|j}|rtj|�|}tj|�|j|�}x"|j�D]\}}|j|||�q6WdS)N)r4rZtarget_pathrZ
ensure_dir�_render_contentr)rp)rrqrr�targetZnetwork_dir�ret_dictr!r+rrr�render_network_states

zRenderer.render_network_state)rcrscCszi}�xn|j�D�]`}t�}|j||�}|j||�|j||�}|j|||�d}x,|j�D] }|jd|��||�|d}q\W|jdk�r`|d}	x6|j	dj
�D]$\}
}d|kr�|jd�|	kr�|
}	Pq�W|	|j	dk�r`|j	d|	}|j||�xhdD]`}
d
|
�d�|k�rJd|jd
|
�d
�i�k�rJ|	�d|
�d|
�d�}t
|��|j||||
��q�W|j||j�i�qW|S)Nr�crJrgr9Z	ethernetszset-namerj�6rFZdomainzuse-domainsz
-overridesz has both dhcpzdomain and dhcpz*-overrides.use-domains configured. Use one)rjry)Ziter_interfacesr	r;r<rWriZiter_routesrCrhr6r)r5rb�RuntimeErrorrmrkr.)rrcrvr:r7rorFr#rZr9Zdev_nameZdev_cfgrlrhZ	exceptionrrrrt+s<

zRenderer._render_content)N)NN)r/r0r1�__doc__rr	r;r<rCrWrbrrirmrprrrwrtrrrrr2Ts

	6
r2NcCs6ddg}ddg}x |D]}tj|||d�sdSqWdS)NZipZ	systemctlz	/usr/sbinz/bin)rdruFT)rZwhich)ruZexpectedrd�prrr�	availablefs
r})N)�collectionsrZtypingrZ	cloudinitrZloggingrrZ
cloudinit.netrZcloudinit.net.network_staterZ	getLoggerr/r^r	r2r}rrrr�<module>
s
?