HEX
Server: nginx/1.24.0
System: Linux webserver 6.8.0-87-generic #88-Ubuntu SMP PREEMPT_DYNAMIC Sat Oct 11 09:28:41 UTC 2025 x86_64
User: wpuser (1002)
PHP: 8.3.6
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/cloudinit/net/__pycache__/networkd.cpython-312.pyc
�

쑛h�T���ddlZddlmZmZmZmZddlmZmZddl	m
Z
mZddlm
Z
eje�Zdeeeefdeeeeffd�Zdedefd	�ZGd
�d�ZGd�d
e
j*�Zdd�Zy)�N)�Any�Dict�List�Optional)�subp�util)�renderer�should_add_gateway_onlink_flag)�NetworkState�data�returnc�V�i}|j�D]\}}t|�||<�|S)z�
    Normalize a dictionary of lists.
    - Assumes top-level keys map to lists.
    - Each list and any nested dicts/lists will be recursively normalized.
    )�items�_normalize_value)r�
normalized�key�values    �8/usr/lib/python3/dist-packages/cloudinit/net/networkd.py�	normalizers6���J��j�j�l�2�
��U�*�5�1�
�3��2���c�F�t|t�r%i}t|�D]}t||�||<�|St|t�rJg}|D]7}t|ttf�rt|�}n|}|j|��9	t|�S|S#t$r|cYSwxYw)z�
    Recursively normalize a dictionary or list:
    - Dicts: keys sorted, values normalized
    - Lists: items normalized and sorted (if comparable)
    )�
isinstance�dict�sortedr�list�append�	TypeError)rrr�normalized_items�item�normalized_items      rrrs����$����
��$�<�	:�C�.�t�C�y�9�J�s�O�	:���	�D�$�	����	5�D��$��t��-�"2�4�"8��"&���#�#�O�4�	5�	$��*�+�+��K���	$�#�#�	$�s�
B�B �B c�$�eZdZd�Zd�Zd�Zd�Zy)�	CfgParserc�(�ggggggigggd�
|_y)N)
�Match�Link�Network�DHCPv4�DHCPv6�Address�Route�NetDev�VLAN�Bond)�	conf_dict)�selfs r�__init__zCfgParser.__init__9s)������������
��rc�>�|jj�D]�}||k(s�	|j|j|�d|���ttj|j|��|j|<|j|j
���y)N�=�r.�keysrrr�fromkeys�sort)r/�secr�val�ks     r�update_sectionzCfgParser.update_sectionGs������$�$�&�	)�A��C�x����q�!�(�(�C�5��#���8�$(����t�~�~�a�7H�)I�$J����q�!����q�!�&�&�(�		)rc��|jj�D]�}||k(s�	||j|vrg|j||<|j||j|�d|���ttj|j||��|j||<|j||j
���y)z�
        For each route section we use rid as a key, this allows us to isolate
        this route from others on subsequent calls.
        r2Nr3)r/r7�ridrr8r9s      r�update_route_sectionzCfgParser.update_route_sectionNs���
���$�$�&�		.�A��C�x��d�n�n�Q�/�/�-/�D�N�N�1�%�c�*����q�!�#�&�-�-���Q�s�e�n�=�)-��M�M�$�.�.��"3�C�"8�9�*����q�!�#�&����q�!�#�&�+�+�-�		.rc��d}t|j�|_t|jj��D]�\}}|s�	|dk(rt|�D]}|d|�d|�d�z
}��+|dk(r:t|�D]+}|d|�d�z
}t||�D]
}||�d�z
}�|dz
}�-�j|d|�d�z
}t|�D]
}||�d�z
}�|dz
}��|S)N�r)�[z]
�

r*�
)rr.rr)r/�contentsr9�v�e�ns      r�get_final_confzCfgParser.get_final_conf^s����"�4�>�>�2����4�>�>�/�/�1�2�	!�D�A�q����I�~����2�A��!�A�3�c�!��D� 1�1�H�2��g�����%�A��!�A�3�c�
�*�H�#�A�a�D�\�-�� �q�c��H�,��-���$�H�	%��a��s�#�J�&�����)�A��1�#�R��(�H�)��D� ��!	!�$�rN)�__name__�
__module__�__qualname__r0r:r=rG�rrr"r"8s��
�)�.� rr"c���eZdZdZdd�Zdefd�Zdefd�Zdefd�Zdefd�Z	defd	�Z
ded
efd�Zdefd�Z
dd
�Z		ddedeeddfd�Zd
efd�Zd
edefd�Zd
edefd�Zy)�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.
    Nc�h�|si}|jdd�|_|jdd�|_y)N�resolve_conf_fnz/etc/systemd/resolved.conf�network_conf_dirz/etc/systemd/network/)�getrOrP)r/�configs  rr0zRenderer.__init__�s:����F�%�z�z��;� 
���!'�
�
�� 7�!
��r�cfgc��d}ddd�}|ddk(rd|d<|sy|j�D]&\}}||vs�||s�|j||||��(|d	S)
Nr$�Name�Driver)�name�driver�type�physical�
MACAddress�mac_addressrW)rr:)r/�ifacerSr7�
match_dictr9rDs       r�generate_match_sectionzRenderer.generate_match_section�s}������
�
�
��=�J�&�(4�J�}�%����$�$�&�	5�D�A�q��E�z�e�A�h��"�"�3��5��8�4�	5��V�}�rc��d}|sy|jd�r|j|d|d�|ddk7r'|jd�r|j|d|d�d|vr|dr|j|d	d
�yyy)Nr%�mtu�MTUBytesrYrZr\r[�optional�RequiredForOnline�no)rQr:)r/r]rSr7s    r�generate_link_sectionzRenderer.generate_link_section�s��������9�9�U�����s�J��e��=���=�J�&�5�9�9�]�+C����s�L�%�
�2F�G����5��#4����s�$7��>�$5�rc��d}dddd�}d}d|vrd|d��}|j�D]+\}}||vr�|d	k(r||z
}|j|||||��-y
)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�/rlN)rr=)	r/r<�confrSr7�
route_cfg_maprnr9rDs	         r�parse_routeszRenderer.parse_routes�s���
�� �$��
�
����t����h��(�)�F��J�J�L�	D�D�A�q��
�%���I�~��V����$�$�S�#�}�Q�/?��C�	Drc	�P�d}d}d}|jdg�D�];}|d}|dvr|dk(rd}n|dk(rd	}n|d
k(r|dk(rd}n|dk(rd	}d|vr*|dr%|dD]}|jd|��||�|d
z}�d|vs�d|d}	d|vr|	d|d��z
}	ddddd�}
|j�D]�\}}|dk(r|jd|
||	��"|dk(rZ|j	dd|��|
||�t||	�r.tjd||	�|j	dd|��dd	�|d
z}��|dvs��|j||
|dj|������>|j|d|�t|jd�t�rd}
|drd	}
|j|d|
�|S) Nrer&r�subnetsrY>�dhcp�dhcp4�ipv4�ipv6�yes�dhcp6�routes�r��addressrnror)rh�DNS�Domains)r~rk�dns_nameservers�
dns_searchrkr*�azGGateway %s is not contained within subnet %s, adding GatewayOnLink flag�
GatewayOnLink>r�r�� �DHCPz	accept-ra�IPv6AcceptRA)rQrrrr:r=r
�LOG�debug�joinr�bool)r/r]rSrur7r<rE�t�i�addr�subnet_cfg_mapr9rDr8s              r�
parse_subnetszRenderer.parse_subnets�s&�����������9�b�)�1	P�A��&�	�A��%�%��4�<�!�D��V�^� �D��g���4�<�!�D��V�^� �D��1�}��8���8��"�A��%�%��#��i��C�8���'�C�	"�
�A�~���|���q�=��a��(��}�-�-�D�(�(�',�"+�	"���G�G�I�P�D�A�q��I�~��*�*�9�n�Q�6G��N��i���0�0�#�q���Y��q�0A�1��:�!�T�B��I�I�!=� !� $�	� �4�4� '�1�S�E��O�U��"�A�g���?�?��*�*�3��q�0A�3�8�8�A�;�O�+P�91	P�f	���3���-��e�i�i��,�d�3��C��[�!������s�N�C�8��rc��dD]\}||vr�t||�j�}	tj|�}|rdnd}|dk(rd}nd}|j|d	|��^y#t$r |dk7rt
j
d|�d}Y�HwxYw)
N)�dhcp4domain�dhcp6domainryre�routezInvalid dhcp4domain value - %sr�r'r(�
UseDomains)�str�casefoldr�translate_bool�
ValueErrorr��warningr:)r/�drSr�ret�sections      r�dhcp_domainzRenderer.dhcp_domains���2�	;�D��1�}���a��g�,�'�'�)�C�
��)�)�#�.��"�e���
�}�$�"��"�����w��c�:�	;���
��'�>��K�K� @�#�F��C��
�s�A#�#&B�B�nsc�~�d}|jd�}|s)|jdk(r|j|jd�}n|s|jdk(ry|jd�r%|j	|ddj|d��|jd	�r&|j	|d
dj|d	��yy)Nr&�dnsr})�search�nameservers�r�r�r�r�r)rQ�version�dns_searchdomainsr�r:r�)r/r]rSr�r7r�s      r�	parse_dnszRenderer.parse_dnss������i�i�����r�z�z�Q���.�.�!�1�1��C�����q����7�7�8�����s�I�s�x�x��H�
�/F�G��7�7�=�!����s�E�3�8�8�C�
�4F�+G�H�"rc���ddddd�}|dk(r|jddd	d
dd��d
|�d�|vrJ|dd|��fvr@|d
|�d�}|j�D]#\}}||vs�|jd|��|||��%yyy)Nzuse-dns�use-domainszuse-hostnamezuse-ntp)�UseDNSr��UseHostname�UseNTP�4z
send-hostname�hostnamezroute-metriczuse-mtuz
use-routes)�SendHostname�Hostname�RouteMetric�UseMTU�	UseRoutesru�
-overridesry�ipv�DHCPv)�updaterr:)	r/rS�devicerur��dhcp_config_maps�dhcp_overridesr9rDs	         r�parse_dhcp_overrideszRenderer.parse_dhcp_overrides)s����'�)��	
���c�>��#�#�$3� *�#1�'�!-��
��'��*�%��/�D���'��O�=
�5
�$�d�7�)�:�$>�?�N�(�.�.�0�
P���1���&��&�&��w�i�'8�!�^�A�=N�O�
P�5
�/rc���d}tjd|�|�d|�|��}|jd�r|dd}tj||�tj
|||�y)Nzsystemd-networkz Setting Networking Config for %sz10-cloud-init-rA���)r�r��endswithr�
write_file�chownbyname)r/�linkrp�nwk_dir�ext�net_fn_owner�net_fns       r�create_network_filezRenderer.create_network_fileEsa��(���	�	�4�d�;��9�N�4�&���6���=�=�� ����9�D������%������|�<r�
network_state�	templatesr
c���|j}|rtj|�|z}tj|�|j|�}|j
di�}|j
di�}|j�D]\}}	|j||	|��|j�D]\}}	|j||	|d���|j�D]\}}	|j||	|d���y)N�vlan_netdev�bond_netdevz.netdev)r�)	rPr�target_pathr�
ensure_dir�_render_content�poprr�)
r/r�r��target�network_dirrlr�r�r9rDs
          r�render_network_statezRenderer.render_network_statePs����+�+����*�*�6�2�[�@�K�����$��&�&�}�5���k�k�-��4���k�k�-��4���M�M�O�	8�D�A�q��$�$�Q��;�7�	8� �%�%�'�	G�D�A�q��$�$�Q��;�I�$�F�	G� �%�%�'�	G�D�A�q��$�$�Q��;�I�$�F�	Grc�b�i}i}i}d|jvr |j|�}|d}|d}||d<d|jvr |j|�}|d}|d}||d<|j�D�]8}	t	�}
|	d}|j|�}|r|
j
dd	|�|	d
s,|jd�r|dj|�}
|
r|
|	d
<|j|�}|r|
j
dd|�|	d
s,|jd�r|dj|�}
|
r|
|	d
<|j|	|
�}|j|	|
�|j|	|
�}|j|	|
|�d
}|j�D]}|jd|��||
�|dz}�|jdk(r�|	d}|jdj�D]"\}}d|vs�|jd�|k(s� |}n||jdvru|jd|}|j||
�dD]L}d|�d�|vr.d|jd|�d�i�vr|�d|�d|�d�}t!|��|j#|
|||��N|j%||
j'�i���;|S)N�vlansr��	vlan_link�bondsr��	bond_linkrWr&r,r\�
macaddressr-r�cr}r��	ethernetszset-name)r��6ru�domainr�r�z has both dhcpzdomain and dhcpz*-overrides.use-domains configured. Use one)rR�render_vlans�render_bonds�iter_interfacesr"rQr:r_rfr�r��iter_routesrrr�rr��RuntimeErrorr�r�rG)r/r��ret_dictr�r��	vlan_dictr��	bond_dictr�r]rS�
iface_name�vlan_link_name�mac�bond_link_namer�rur<r�rW�dev_name�dev_cfgr�r��	exceptions                         rr�zRenderer._render_contentis+�����	��	��b�i�i���)�)�"�-�I�#�M�2�K�!�+�.�I�&1�H�]�#��b�i�i���)�)�"�-�I�#�M�2�K�!�+�.�I�&1�H�]�#��'�'�)�M	:�E��+�C��v��J�&�]�]�:�6�N���"�"�9�f�n�E���'�I�M�M�,�,G���-�1�1�*�=���+.�E�-�(�&�]�]�:�6�N���"�"�9�f�n�E���'�I�M�M�,�,G���-�1�1�*�=���+.�E�-�(��.�.�u�c�:�D��&�&�u�c�2��%�%�e�S�1�D��N�N�5�#�r�*��C����)�
���!�!�A�c�U�)�U�C�8��A�g��	
��z�z�Q��&+�F�m��*,���;�)?�)E�)E�)G�"�%�H�g�!�W�,�"�;�;�z�2�d�:�#+�D�!�	"�
�2�9�9�[�1�1��Y�Y�{�3�D�9�F��$�$�V�S�1�#-�
N��"�7�)�6�2�f�<� -�%�z�z�D��	��*D�b�I�!J�$(�&��w�i�@,�,3�9�57�!8�&�
#/�y�"9�9��1�1�#�v�t�W�M�
N�
�O�O�T�3�#5�#5�#7�8�9�[M	:�^�rc��i}i}i|d<|jjdi�}|j�D�]\}}|jd�}|jd�}|�|�tj	d|��D|||<t�}	|	j
dd|�|	j
ddd	�|jd
�}
|
r|	j
dd|
�|jd�}
|
r+|
j�}
|	j
dd|
�|
|d|<|	j
d
d|�|	j�||<��||d�}|S)Nr�r��idr�z)Skipping VLAN %s - missing 'id' or 'link'r+rU�Kind�vlanrarbr[r,�Id)r�r�)	rRrQrr�r�r"r:�lowerrG)r/r��vlan_link_info�vlan_ndev_configsr��	vlan_name�vlan_cfg�vlan_id�parentrSr8r�s            rr�zRenderer.render_vlans�sU��)+����')��|�$��	�	�
�
�g�r�*��#(�;�;�=�	@��I�x��l�l�4�(�G��\�\�&�)�F���&�.����?����%.�N�6�"��+�C����x���;����x���8��,�,�u�%�C���"�"�8�Z��=��,�,�|�,�C���i�i�k���"�"�8�\�3�?�:=��|�,�Y�7����v�t�W�5�+.�+=�+=�+?��i�(�9	@�>-�'�
���rc	��i}i}d}i|d<|jjdi�}|j�D�]�\}}|jd�}|stj	d|��1|j|D�	cic]}	|	|��c}	�t
�}
|
jdd|�|
jddd	�|jd
�}|r|
jdd|�|jd�}|r+|j�}|
jdd|�||d|<|jd
i�}d|vr|
j|d|d�d|vr|
j|d|d�d��d|vr|
j|d|d�d��d|vr|
j|d|d�d��d|vr|
j|d|d�d��d|vr<|d}
t|
t�r|
g}
dj|
�}|
j|d|�d|vr|
j|d|d�d|vr|
j|d|d�d |vr|
j|d!|d �d"|vr|
j|d#|d"�d$|vr|
j|d%|d$�d&|vr|
j|d'|d&�d(|vr|
j|d)t|d(��d*|vr-|
j|d+t|d*�j��|
j�||<���||d,�}|Scc}	w)-Nr-r�r��
interfacesz'Skipping bond %s - missing 'interfaces'r+rUr��bondrarbr[�
parameters�mode�Modezmii-monitor-interval�
MIIMonitorSec�ms�updelay�
UpDelaySec�	downdelay�DownDelaySeczarp-interval�ARPIntervalSecz
arp-ip-targetr��ARPIPTargetszarp-validate�ARPValidatezarp-all-targets�
ARPAllTargetszprimary-reselect�PrimaryReselectPolicyz	lacp-rate�LACPTransmitRateztransmit-hash-policy�TransmitHashPolicyz	ad-select�AdSelectz	min-links�MinLinkszall-slaves-active�AllSlavesActive)r�r�)
rRrQrr�r�r�r"r:r�rr�r�rG)r/r��bond_link_info�bond_ndev_configsr�r��	bond_name�bond_cfgr�r]rSr8�params�targets�ip_listr�s                rr�zRenderer.render_bonds�s���)+������')��|�$��	�	�
�
�g�r�*��#(�;�;�=�h	@��I�x�!���l�3�J�����=�y����!�!��"L��5�)�#3�"L�M��+�C����x���;����x���8��,�,�u�%�C���"�"�8�Z��=��,�,�|�,�C���i�i�k���"�"�8�\�3�?�:=��|�,�Y�7��\�\�,��3�F�����"�"�7�F�F�6�N�C�%��/��"�"��#��4�5�6�b�9���F�"��"�"��\�f�Y�.?�-@��+C���f�$��"�"��^��{�0C�/D�B�-G����'��"�"��-�&��2H�1I��/L���&�(� ��1���g�s�+�&�i�G��(�(�7�+���"�"�7�N�G�D���'��"�"��]�F�>�,B��!�F�*��"�"��_�f�5F�.G��"�V�+��"�"��+��-�.���f�$��"�"��/���1D��&��/��"�"��(��1�2���f�$��"�"�7�J��{�8K�L��f�$��"�"��Z��V�K�-@�)A��#�f�,��"�"��%���2�3�4�:�:�<��,/�+=�+=�+?��i�(�Qh	@�V-�'�
�����M#Ms�8
L

�N)z.network)NN)rHrIrJ�__doc__r0r"r_rfrrr�r�rr�r�r�rrr�r�r�r�rKrrrMrMxs����
����&
?�	�
?�D�9�D�0?�	�?�D;�)�;�$I�I�I�<�I�"P�	�P�8	=�%)��	G�#�G��D�>�G�

�G�2`�,�`�D(�|�(��(�Tv�|�v��vrrMc�T�ddg}ddg}|D]}tj||��r�yy)N�ip�	systemctlz	/usr/sbinz/bin)r�FT)r�which)r��expectedr��ps    r�	availablerns;���k�"�H��6�
"�F�
����z�z�!�F�+���rr)�logging�typingrrrr�	cloudinitrr�
cloudinit.netr	r
�cloudinit.net.network_stater�	getLoggerrHr�r�rrr"rMrrKrr�<module>r$s����,�,� �B�4��g����!��	�D��d�3�i��(�	�T�#�t�C�y�.�-A�	��3��3��6=�=�@s�x� � �s�lr