HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/cloudinit/net/__pycache__/networkd.cpython-310.pyc
o

�Ad�2�@s�ddlmZddlmZddlmZddlmZmZddl	m
Z
ddlmZe�
e�ZGdd�d�ZGd	d
�d
e
j�Zddd
�Zdefdd�ZdS)�)�OrderedDict)�Optional)�log)�subp�util)�renderer)�NetworkStatec@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�	CfgParserc	Cstggggggid��|_dS)N)�Match�Link�Network�DHCPv4�DHCPv6�Address�Route)r�	conf_dict)�self�r�8/usr/lib/python3/dist-packages/cloudinit/net/networkd.py�__init__s�
�zCfgParser.__init__cCs`|j��D](}||kr-|j|�|dt|��tt�|j|��|j|<|j|��qdS)N�=�r�keys�append�str�list�dict�fromkeys�sort)r�sec�key�val�krrr�update_section#s��zCfgParser.update_sectioncCs�|j��D]>}||krC||j|vrg|j||<|j||�|dt|��tt�|j||��|j||<|j||��qdS)z�
        For each route section we use rid as a key, this allows us to isolate
        this route from others on subsequent calls.
        rNr)rr�ridr r!r"rrr�update_route_section+s ���zCfgParser.update_route_sectioncCs�d}t|j���D]e\}}|sq	|dkr.t|�D]}|d|d7}||d7}|d7}qq	|dkrUt|�D]}|d|d7}t||�D]}||d7}|d7}qFq6q	|d|d7}t|�D]}||d7}qa|d7}q	|S)N�r�[z]
�
r)�sortedr�items)r�contentsr"�v�e�nrrr�get_final_conf;s.
�
��
zCfgParser.get_final_confcCs6|s	t�d�dS|��}t�d|�t�||�dS)NzTarget file not givenzFinal content: %s)�LOG�warningr/�debugr�
write_file)r�	target_fnr+rrr�	dump_dataSs
zCfgParser.dump_dataN)�__name__�
__module__�__qualname__rr#r%r/r5rrrrr	s
r	c@s�eZdZdZddd�Zdefdd�Zdefdd	�Zdefd
d�Zdefdd
�Z	defdd�Z
dedefdd�Zdefdd�Z
dd�Z		ddedeeddfdd�Zdedefdd�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}|�dd�|_|�dd�|_dS)N�resolve_conf_fnz/etc/systemd/resolved.conf�network_conf_dirz/etc/systemd/network/)�getr:r;)r�configrrrres�
�zRenderer.__init__�cfgcCsTd}dddd�}|sdS|��D]\}}||vr%||r%|�||||�q|dS)Nr
�Name�Driver�
MACAddress)�name�driver�mac_addressrB)r*r#)r�ifacer>r�
match_dictr"r,rrr�generate_match_sectionos��zRenderer.generate_match_sectioncCs:d}|sdSd|vr|dr|�|d|d�dSdSdS)Nr�mtu�MTUBytes)r#)rrEr>rrrr�generate_link_section�s�zRenderer.generate_link_sectionc	Cspd}dddd�}d}d|vrdt|d�}|��D]\}}||vr#q|d	kr+||7}|�|||||�qd
S)zy
        Parse a route and use rid as a key in order to isolate the route from
        others in the route dict.
        r�Gateway�Destination�Metric)�gateway�network�metricr&�prefix�/rON)rr*r%)	rr$�confr>r�
route_cfg_maprQr"r,rrr�parse_routes�s��zRenderer.parse_routesc	Cs�d}d}d}|�dg�D]�}|d}|dks|dkr(|dkr!d}n|d	kr'd
}n|dkr9|dkr3d	}n|dkr9d
}d|vrV|drV|dD]}|�d
|��||�|d}qEd|vr�ddddd�}	|��D]J\}
}|
dkr�d|vr{|dt|d�7}|�d|	|
|�qe|
dkr�|�dd|��|	|
|�|d}qe|
dks�|
dkr�|�||	|
d�|��qeq|�|d|�|dvr�t|�dd �t�r�|�|d!|d�|S)"N�norr�subnets�type�dhcp4�dhcp�ipv4�ipv6�yes�dhcp6�routes�r��addressrrK�DNS�Domains)rbrN�dns_nameservers�
dns_searchrQrRrNr�arerf� �DHCP)r\r]z	accept-rar&�IPv6AcceptRA)	r<rUr*rr#r%�join�
isinstance�bool)rrEr>rZrr$r-�t�i�subnet_cfg_mapr"r,rrr�
parse_subnets�sZ�
��
�
�zRenderer.parse_subnetsc	Cs�dD]B}||vr	qt||���}z
t�|�}|rdnd}Wnty3|dkr1t�d|�d}Ynw|dkr;d}nd}|�|d	|�qdS)
N)�dhcp4domain�dhcp6domainr]rV�routezInvalid dhcp4domain value - %srrr
r�
UseDomains)r�casefoldr�translate_bool�
ValueErrorr0r1r#)r�dr>�item�ret�sectionrrr�dhcp_domain�s$
���zRenderer.dhcp_domain�nsc		Cs�d}dddd�}|�d�}|s|jdkr|j|jd�}n	|s%|jdkr%dS|��D]\}}||vrA||rA|�||d	�||��q)dS)
Nrrdrc)�search�nameservers�	addresses�dnsra)rr��rh)r<�version�dns_searchdomainsrer*r#rk)	rrEr>r~r�dns_cfg_mapr�r"r,rrr�	parse_dns�s"�
���zRenderer.parse_dnsc	Cs�ddddd�}|dkr|�ddd	d
dd��d
|�d�|vrH|dd|��fvrJ|d
|�d�}|��D]\}}||vrG|�d|��|||�q3dSdSdS)Nzuse-dns�use-domainszuse-hostnamezuse-ntp)�UseDNSru�UseHostname�UseNTP�4z
send-hostname�hostnamezroute-metriczuse-mtuz
use-routes)�SendHostname�Hostname�RouteMetric�UseMTU�	UseRoutesrZ�
-overridesr]�ipv�DHCPv)�updater*r#)	rr>�devicerZr��dhcp_config_maps�dhcp_overridesr"r,rrr�parse_dhcp_overrides�s2���
���zRenderer.parse_dhcp_overridescCs>d}t�d|�|d|d}t�||�t�|||�dS)Nzsystemd-networkz Setting Networking Config for %sz10-cloud-init-z.network)r0r2rr3�chownbyname)r�linkrS�nwk_dir�net_fn_owner�net_fnrrr�create_network_files
zRenderer.create_network_file�
network_state�	templates�returncCsP|j}|rt�|�|}t�|�|�|�}|��D]\}}|�|||�qdS�N)r;r�target_pathr�
ensure_dir�_render_contentr*r�)rr�r��target�network_dir�ret_dictr"r,rrr�render_network_state$s

�zRenderer.render_network_statecCs^i}|��D]�}t�}|�||�}|�||�|�||�}|�|||�d}|��D]}|�d|��||�|d}q*|jdkr�|d}	|j	d�
�D]\}
}d|vr^|�d�|	kr^|
}	nqK|	|j	dvr�|j	d|	}|�||�dD]-}
d	|
�d
�|vr�d|�d	|
�d�i�vr�|	�d
|
�d|
�d�}t
|��|�||||
�qu|�||��i�q|S)Nr�crar�rB�	ethernetszset-name)r��6rZ�domainr�r�z has both dhcpzdomain and dhcpz*-overrides.use-domains configured. Use one)�iter_interfacesr	rGrJrqr��iter_routesrUr�r=r*r<r}�	Exceptionr�r�r/)rr~r�rEr>r�rZr$rtrB�dev_name�dev_cfgr�r��	exceptionrrrr�4sJ


������zRenderer._render_contentr�)NN)r6r7r8�__doc__rr	rGrJrUrqr}rr�r�r�rrr�r�rrrrr9]s*

	6���
�r9NcCs4ddg}ddg}|D]
}tj|||d�sdSq
dS)N�ip�	systemctlz	/usr/sbinz/bin)rr�FT)r�which)r��expectedr�prrr�	availableos�r�r~cCsti�}|�|�Sr�)r9r�)r~rrrr�network_state_to_networkdxs
r�r�)�collectionsr�typingr�	cloudinitr�loggingrr�
cloudinit.netr�cloudinit.net.network_stater�	getLoggerr6r0r	r9r�r�rrrr�<module>s	
H