Your IP : 216.73.217.13


Current Path : /snap/core24/current/lib/python3/dist-packages/cloudinit/net/__pycache__/
Upload File :
Current File : //snap/core24/current/lib/python3/dist-packages/cloudinit/net/__pycache__/networkd.cpython-312.pyc

�

�t�h_���ddlZddlmZddlmZmZmZmZmZm	Z	ddl
mZmZddl
mZmZddlmZej$e�Zdeeeefdeeeeffd	�Zdedefd
�ZGd�d�ZGd
�dej2�Zdd�Zy)�N)�defaultdict)�Any�Callable�Dict�List�Optional�Tuple)�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)rrr�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
�,�ggggggiggggid�|_y)N)�Match�Link�Network�DHCPv4�DHCPv6�Address�Route�NetDev�VLAN�Bond�Bridge�RoutingPolicyRule)�	conf_dict)�selfs r�__init__zCfgParser.__init__:s/�������������!#�

��rc�>�|jj�D]�}||k(s�	|j|j|�d|���ttj|j|��|j|<|j|j
���y)N�=�r3�keysrrr�fromkeys�sort)r4�secr�val�ks     r�update_sectionzCfgParser.update_sectionJs������$�$�&�	)�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.
        r7Nr8)r4r<�ridrr=r>s      r�update_route_sectionzCfgParser.update_route_sectionQs���
���$�$�&�		.�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
}��+|dvr:t|�D]+}|d|�d�z
}t||�D]
}||�d�z
}�|dz
}�-�i|d|�d�z
}t|�D]
}||�d�z
}�|dz
}��|S)N�r,�[z]
�

)r-r2�
)rr3rr)r4�contentsr>�v�e�ns      r�get_final_confzCfgParser.get_final_confas����"�4�>�>�2����4�>�>�/�/�1�2�	!�D�A�q����I�~����2�A��!�A�3�c�!��D� 1�1�H�2��4�4����%�A��!�A�3�c�
�*�H�#�A�a�D�\�-�� �q�c��H�,��-���$�H�	%��a��s�#�J�&�����)�A��1�#�R��(�H�)��D� ��!	!�$�rN)�__name__�
__module__�__qualname__r5r?rBrL�rrr%r%9s��
� )�.� rr%c���eZdZdZdd�Zdefd�Zdefd�Zdefd�Zdefd�Z	defd	�Z
ded
efd�Zdefd�Z
dd
�Z		ddedeeddfd�Zdefd�Zdefd�Zd
efd�Zd
edefd�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/)�getrTrU)r4�configs  rr5zRenderer.__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_addressr\)rr?)r4�ifacerXr<�
match_dictr>rIs       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�MTUBytesr^r_rar`�optional�RequiredForOnline�no)rVr?)r4rbrXr<s    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}ddddd�}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�Table)�gateway�network�metric�tablerD�prefix�/rrN)rrB)	r4rA�confrXr<�
route_cfg_maprur>rIs	         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) Nrjr)r�subnetsr^>�dhcp�dhcp4�ipv4�ipv6�yes�dhcp6�routes�r��addressrurvr,rm�DNS�Domains)r�rq�dns_nameservers�
dns_searchrqr-�azGGateway %s is not contained within subnet %s, adding GatewayOnLink flag�
GatewayOnLink>r�r�� �DHCPz	accept-ra�IPv6AcceptRA)rVryrr?rBr
�LOG�debug�joinr�bool)r4rbrXr|r<rArJ�t�i�addr�subnet_cfg_mapr>rIr=s              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�dhcp6domainr�rj�routezInvalid dhcp4domain value - %sr�r*r+�
UseDomains)�str�casefoldr�translate_bool�
ValueErrorr��warningr?)r4�drXr"�ret�sections      r�dhcp_domainzRenderer.dhcp_domain
s���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�)rV�version�dns_searchdomainsr�r?r�)r4rbrXr�r<r�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�	UseRoutesr|�
-overridesr��ipv�DHCPv)�updaterr?)	r4rX�devicer|r��dhcp_config_maps�dhcp_overridesr>rIs	         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-rF���)r�r��endswithr�
write_file�chownbyname)r4�linkrw�nwk_dir�ext�net_fn_owner�net_fns       r�create_network_filezRenderer.create_network_fileIsa��(���	�	�4�d�;��9�N�4�&���6���=�=�� ����9�D������%������|�<r�
network_state�	templatesrc�l�|j}|rtj|�|z}tj|�|j|�}|j
di�}|j
di�}|j
di�}|j�D]\}	}
|j|	|
|��|j�D]\}	}
|j|	|
|d���|j�D]\}	}
|j|	|
|d���|j�D]\}	}
|j|	|
|d���y)N�vlan_netdev�bond_netdev�
bridge_netdevz.netdev)r�)	rUr
�target_pathr�
ensure_dir�_render_content�poprr�)r4r�r��target�network_dirrrr�r�r�r>rIs           r�render_network_statezRenderer.render_network_stateTsC���+�+����*�*�6�2�[�@�K�����$��&�&�}�5���k�k�-��4���k�k�-��4�����O�R�8�
��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�	G�"�'�'�)�	G�D�A�q��$�$�Q��;�I�$�F�	Grc��d}d}|D]A}|j�D]'\}}|j|||j�|��)|dz
}�Cy)Nrr2r�)rrB�
capitalize)r4�policyrXrArr=r>rIs        r�parseRoutingPolicyzRenderer.parseRoutingPolicyqsY����!���	�C��	�	��
F���1��(�(��c�1�<�<�>�1�E�
F��1�H�C�	r�nsCfgc�v�i}d}dD]/}||vr�||j�D]\}}||vs�||||<��1|S)Nzrouting-policy)�	ethernets�bonds�vlans�bridges)r)r4r��routingPoliciesrr�rb�settingss       r�extractRoutingPolicieszRenderer.extractRoutingPoliciesysc������A�	;�G��e�#��#(��>�#7�#7�#9�
;���x��(�?�-5�c�]�O�E�*�
;�	;��rc��i}i}i}i}d|jvr |j|�}|d}|d}||d<d|jvr |j|�}|d}	|d}|	|d<d|jvr |j|�}
|
d}|
d	}||d<|j	|j�}|j�D�]�}
t
�}|
d
}|j|g�}|D]}|jdd|��|j|�}|r|j||�|j|�}|r|jdd
|�|j|�}|r�|dj|i�j|�}|r|jdd|�|dj|i�j|�}|r|jdd|�|jdd|�|j|
|�}|j|
|�|j|
|�}|j|
||�d}|j�D]}|jd|��||�|dz}�|j dk(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)!Nr�r��	vlan_linkr�r��	bond_linkr�r��bridge_linkr\r)r/r0�	path-costr1�Cost�
port-priority�Priorityr�cr�r�r�zset-name)r��6r|�domainr�r�z has both dhcpzdomain and dhcpz*-overrides.use-domains configured. Use one)rW�render_vlans�render_bonds�render_bridgesr��iter_interfacesr%rVr?r�rdrkr�r��iter_routesryr�rr��RuntimeErrorr�r�rL) r4r��ret_dictr�r�r��	vlan_dictr��	bond_dictr��bridge_dictr�r�rbrX�
iface_name�vlan_link_namer��rPolicy�bond_link_name�bridge_link_namer=r�r|rAr�r\�dev_name�dev_cfgr�r��	exceptions                                 rr�zRenderer._render_content�s������	��	����b�i�i���)�)�"�-�I�#�M�2�K�!�+�.�I�&1�H�]�#��b�i�i���)�)�"�-�I�#�M�2�K�!�+�.�I�&1�H�]�#���	�	�!��-�-�b�1�K�'��8�M�%�m�4�K�(5�H�_�%��5�5�b�i�i�@���'�'�)�W	:�E��+�C��v��J�&�]�]�:�r�:�N�#�
9���"�"�9�f�a�8�
9�&�)�)�*�5�G���'�'���5�&�]�]�:�6�N���"�"�9�f�n�E�*���z�:�����,��S�)�2�.��S��_��
��&�&�x���=� ��0��S�)�2�.��S��_��
��&�&�x��S�A��"�"�9�h�8H�I��.�.�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�oW	:�r�rc��tt�}i}|jjdi�}|j	�D�]\}}|jd�}|jd�}|�|�t
j
d|��D||j|�t�}	|	jdd|�|	jddd�|jd	�}
|
r|	jdd
|
�|jd�}
|
r!|	jdd|
j��|	jd
d|�|	j�||<��
||d�S)Nr��idr�z)Skipping VLAN %s - missing 'id' or 'link'r.rZ�Kind�vlanrfrg�
macaddressr`r/�Id)r�r�)rrrWrVrr�r�rr%r?�lowerrL)r4r��vlan_link_info�vlan_ndev_configsr��	vlan_name�vlan_cfg�vlan_id�parentrXr=s           rr�zRenderer.render_vlans�sA��$�T�*�����	�	�
�
�g�r�*��#(�;�;�=�	@��I�x��l�l�4�(�G��\�\�&�)�F���&�.����?�����6�"�)�)�)�4��+�C����x���;����x���8��,�,�u�%�C���"�"�8�Z��=��,�,�|�,�C���"�"�8�\�3�9�9�;�G����v�t�W�5�+.�+=�+=�+?��i�(�5	@�:-�'�
�	
rc
���i}i}d}|jjdi�}|j�D�]3\}}|jd�}|stj	d|��1|j|D�	cic]}	|	|��c}	�t
�}
|
jdd|�|
jddd�|jd	�}|r|
jdd
|�|jd�}|r!|
jdd|j��|jd
i�}ttttttgtfff}
iddtf�ddd�f�ddtf�ddd�f�ddtf�ddd�f�ddtf�dd tf�d!d"tf�d#d$tf�d%d&d'�f�d(d)tf�d*d+tf�d,d-tf�d.d/tf�d0d1tf�d2d3d4�f�}|j�D])\}\}}||vs�|
j|||||���+d5|vr:|d5}t|t�r|g}|
j|d6d7j|��|
j!�||<��6||d8�Scc}	w)9Nr0r��
interfacesz'Skipping bond %s - missing 'interfaces'r.rZr�bondrfrgr	r`�
parametersz	ad-select�AdSelectzall-slaves-active�AllSlavesActivec�4�t|�j�S�N)r�r�rIs r�<lambda>z'Renderer.render_bonds.<locals>.<lambda>Fs��c�!�f�l�l�n�rzarp-all-targets�
ARPAllTargetszarp-interval�ARPIntervalSecc��|�d�S�N�msrPrs rrz'Renderer.render_bonds.<locals>.<lambda>Is���s�"�X�rzarp-validate�ARPValidatez
down-delay�DownDelaySecc��|�d�SrrPrs rrz'Renderer.render_bonds.<locals>.<lambda>Ks��A�3�b��rzfail-over-mac-policy�FailOverMACPolicyzgratuitous-arp�
GratuitousARPz	lacp-rate�LACPTransmitRatezlearn-packet-interval�LearnPacketIntervalSeczmii-monitor-interval�
MIIMonitorSecc��|�d�SrrPrs rrz'Renderer.render_bonds.<locals>.<lambda>Ps��q�c��H�rz	min-links�MinLinks�mode�Modezpackets-per-slave�PacketsPerSlavezprimary-reselect-policy�PrimaryReselectPolicyztransmit-hash-policy�TransmitHashPolicyzup-delay�
UpDelaySecc��|�d�SrrPrs rrz'Renderer.render_bonds.<locals>.<lambda>Vs���s�"�X�rzarp-ip-targets�ARPIPTargetsr�)r�r�)rWrVrr�r�r�r%r?rrr�r	r�objectrr�rL)r4r��bond_link_info�bond_ndev_configsr�r��	bond_name�bond_cfgrrbrXr=�params�ParamMapType�	param_mapr�option�	formatter�targetss                   rr�zRenderer.render_bonds s��)+�������	�	�
�
�g�r�*��#(�;�;�=�=	@��I�x�!���l�3�J�����=�y����!�!��"L��5�)�#3�"L�M��+�C����x���;����x���8��,�,�u�%�C���"�"�8�Z��=��,�,�|�,�C���"�"�8�\�3�9�9�;�G��\�\�,��3�F���U�3��&��3��0G�+G�%H� H�I�L�'��j�#�.�'�#�%�,�&�'�"�O�S�#9�
'��!1�3E� F�'���� 4�'��~�/A�B�'�'�)<�c�(B�'�!�?�C�"8�'��0�#�6�'�(�*B�C�)H�'�'��:L�(M�'��j�#�.�'� ���
�!'�"$�&7��%=�#'�$*�,C�S�+I�%'�&'�)=�s�(C�''�(�\�+=�>�)'�I�.-6�O�O�,=�
P�(��(�f�i��&�=��&�&�w��	�&��+�8N�O�
P� �6�)� �!1�2���g�s�+�&�i�G��"�"�7�N�C�H�H�W�<M�N�+.�+=�+=�+?��i�(�{=	@�@-�'�
�	
��o#Ms�3
I/
c�|�iiid�}i}|jjdi�}|j�D�]�\}}|jdg�}|stj	d|��2|D]}|||<�	t�}	|	j
dd|�|	j
ddd�|jd	�}
|
r|	j
dd
|
�|jd�}
|
r!|	j
dd|
j��|jd
i�}ddddddd�}|j�D]B\}
}|j|
�}
|
s�t|
t�r|
rdnd}
|	j
d||
��D|jd�}
|
r|
|d|<|jd�}
|
r|
|d|<|	j�||<���||d�S)N)r	r�r�r�rz)Skipping bridge %s - missing 'interfaces'r.rZr�bridgerfrgr	r`r�
AgeingTimeSec�ForwardDelaySec�HelloTimeSec�	MaxAgeSecr��STP)zageing-timez
forward-delayz
hello-timezmax-age�priority�stpr�rjr1r�r�)r�r�)rWrVrr�r�r%r?rrr�rL)r4r��bridge_link_info�bridge_ndev_configsr��bridge_name�
bridge_cfgrrbrXr=r8r:r�sysd_keys               rr�zRenderer.render_bridgesjs������,
��!���)�)�-�-�	�2�.��'.�}�}��2	D�#�K��#����b�9�J�����?����$�
6��*5� ��'�
6��+�C����x���=����x���:��.�.��'�C���"�"�8�Z��=��.�.��.�C���"�"�8�\�3�9�9�;�G� �^�^�L�"�5�F�.�!2�,�&�&��
�I�"+���!2�
@�
��X��j�j��o���!�#�t�,�'*�e����&�&�x��3�?�
@��*�*�[�)�C��=@� ��-�k�:��*�*�_�-�C��AD� ��1�+�>�/2�/A�/A�/C���,�e2	D�j1�+�
�	
rr)z.network)NN)rMrNrO�__doc__r5r%rdrkryr�r�rr�r�r�rrr�r�rr�r�r�r�r�rPrrrRrR{s
���
����&
?�	�
?�D�9�D�2?�	�?�D;�)�;�$I�I�I�<�I�"P�	�P�8	=�%)��	G�#�G��D�>�G�

�G�:�i��
�D�
�s�,�s�j$
�|�$
��$
�LH
�|�H
��H
�TA
��A
�$�A
rrRc�T�ddg}ddg}|D]}tj||��r�yy)N�ip�	systemctlz	/usr/sbinz/bin)r�FT)r
�which)r��expectedr��ps    r�	availablerS�s;���k�"�H��6�
"�F�
����z�z�!�F�+���rr)�logging�collectionsr�typingrrrrrr	�	cloudinitr
r�
cloudinit.netrr
�cloudinit.net.network_stater�	getLoggerrMr�r�rrr%rRrSrPrr�<module>r[s����#�=�=� �B�4��g����!��	�D��d�3�i��(�	�T�#�t�C�y�.�-A�	��3��3��6?�?�Dp
�x� � �p
�fr