Current File : //usr/lib/python3/dist-packages/cloudinit/net/__pycache__/networkd.cpython-312.pyc
�

Ӈg3���ddlZddlmZddlmZddlmZmZddlm	Z	m
Z
ddlmZeje�ZGd�d�ZGd	�d
e	j"�Zdd�Zy)
�N)�OrderedDict)�Optional)�subp�util)�renderer�should_add_gateway_onlink_flag)�NetworkStatec�$�eZdZd�Zd�Zd�Zd�Zy)�	CfgParserc
�4�tggggggid��|_y)N)�Match�Link�Network�DHCPv4�DHCPv6�Address�Route)r�	conf_dict)�selfs �8/usr/lib/python3/dist-packages/cloudinit/net/networkd.py�__init__zCfgParser.__init__s(��$��������
�

���c�R�|jj�D]�}||k(s�	|j|j|dzt|�z�t	t
j
|j|��|j|<|j|j���y)N�=�r�keys�append�str�list�dict�fromkeys�sort)r�sec�key�val�ks     r�update_sectionzCfgParser.update_section s������$�$�&�	)�A��C�x����q�!�(�(��s��S��X�)=�>�$(����t�~�~�a�7H�)I�$J����q�!����q�!�&�&�(�	)rc��|jj�D]�}||k(s�	||j|vrg|j||<|j||j|dzt|�z�t	t
j
|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.
        rNr)rr#�ridr$r%r&s      r�update_route_sectionzCfgParser.update_route_section(s���
���$�$�&�		.�A��C�x��d�n�n�Q�/�/�-/�D�N�N�1�%�c�*����q�!�#�&�-�-�c�C�i�#�c�(�.B�C�)-��M�M�$�.�.��"3�C�"8�9�*����q�!�#�&����q�!�#�&�+�+�-�		.rc��d}t|jj��D]�\}}|s�	|dk(r)t|�D]}|d|zdzz
}||dzz
}|dz
}��7|dk(r<t|�D]-}|d|zdzz
}t||�D]
}||dzz
}�|dz
}�/�x|d|zdzz
}t|�D]
}||dzz
}�|dz
}��|S)N�r�[z]
�
r)�sortedr�items)r�contentsr&�v�e�ns      r�get_final_confzCfgParser.get_final_conf8s�����4�>�>�/�/�1�2�	!�D�A�q����I�~����%�A���a��%��/�H���D��(�H���$�H�%��g�����%�A���a��%��/�H�#�A�a�D�\�-�� �A��H�,��-���$�H�	%��C�!�G�e�O�+�����)�A���D��(�H�)��D� ��%	!�(�rN)�__name__�
__module__�__qualname__rr'r*r5�rrrrs��
�)�.� rrc��eZdZdZdd�Zdefd�Zdefd�Zdefd�Zdefd�Z	defd	�Z
ded
efd�Zdefd�Z
d
�Z		ddedeeddfd�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/)�getr=r>)r�configs  rrzRenderer.__init__Ys:����F�%�z�z��;� 
���!'�
�
�� 7�!
��r�cfgc��d}dddd�}|sy|j�D]&\}}||vs�||s�|j||||��(|dS)Nr
�Name�Driver�
MACAddress)�name�driver�mac_addressrF)r0r')r�ifacerAr#�
match_dictr&r2s       r�generate_match_sectionzRenderer.generate_match_sectioncsj������'�
�
����$�$�&�	5�D�A�q��E�z�e�A�h��"�"�3��5��8�4�	5��V�}�rc��d}|syd|vr|dr|j|d|d�d|vr|dr|j|dd�yyy)Nr�mtu�MTUBytes�optional�RequiredForOnline�no)r')rrIrAr#s    r�generate_link_sectionzRenderer.generate_link_sectiontsZ�������E�>�e�E�l����s�J��e��=����5��#4����s�$7��>�$5�rc��d}dddd�}d}d|vrdt|d�z}|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�/rXN)rr0r*)	rr)�confrAr#�
route_cfg_maprZr&r2s	         r�parse_routeszRenderer.parse_routes�s���
�� �$��
�
����t���3�t�H�~�.�.�F��J�J�L�	D�D�A�q��
�%���I�~��V����$�$�S�#�}�Q�/?��C�	Drc	�p�d}d}d}|jdg�D�]P}|d}|dk(s|dk(r|dk(rd}n|d	k(rd
}n|dk(r|dk(rd	}n|dk(rd
}d|vr*|dr%|dD]}|jd
|��||�|dz}�d|vs�j|d}	d|vr|	dt|d�zz
}	ddddd�}
|j�D]�\}}|dk(r|j	d|
||	��"|dk(rZ|jdd|��|
||�t
||	�r.tjd||	�|jdd|��dd
�|dz}��|dk(s|dk(s��|j	||
|dj|������S|j	|d|�t|jd d!�t�r|j	|d"|d �|S)#NrQrr�subnets�type�dhcp4�dhcp�ipv4�ipv6�yes�dhcp6�routes�r��addressrZr[rrT�DNS�Domains)rkrW�dns_nameservers�
dns_searchrWr�azGGateway %s is not contained within subnet %s, adding GatewayOnLink flag�
GatewayOnLinkrnro� �DHCPz	accept-rar,�IPv6AcceptRA)r?r^rr0r'r*r�LOG�debug�join�
isinstance�bool)
rrIrArcr#r)r3�t�i�addr�subnet_cfg_mapr&r2s
             r�
parse_subnetszRenderer.parse_subnets�s)�����������9�b�)�1	P�A��&�	�A��G�|�q�F�{��4�<�!�D��V�^� �D��g���4�<�!�D��V�^� �D��1�}��8���8��"�A��%�%��#��i��C�8���'�C�	"�
�A�~���|���q�=��C�#�a��k�"2�2�2�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���/�/�1��3D��*�*�3��q�0A�3�8�8�A�;�O�+P�91	P�f	���3���-��e�i�i��R�0�$�7����s�N�E�+�4F�G��rc��dD]\}||vr�t||�j�}	tj|�}|rdnd}|dk(rd}nd}|j|d	|��^y#t$r |dk7rt
j
d|�d}Y�HwxYw)
N)�dhcp4domain�dhcp6domainrfrQ�routezInvalid dhcp4domain value - %sr�rr�
UseDomains)r�casefoldr�translate_bool�
ValueErrorru�warningr')r�drA�item�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�dnsrj)�search�nameservers�r�rmrrr�rl)r?�version�dns_searchdomainsrnr'rw)rrIrAr�r#r�s      r�	parse_dnszRenderer.parse_dns�s������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�	UseRoutesrc�
-overridesrf�ipv�DHCPv)�updater0r')	rrA�devicercr��dhcp_config_maps�dhcp_overridesr&r2s	         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|�|dz|zdz}tj||�tj|||�y)Nzsystemd-networkz Setting Networking Config for %sz10-cloud-init-z.network)rurvr�
write_file�chownbyname)r�linkr\�nwk_dir�net_fn_owner�net_fns      r�create_network_filezRenderer.create_network_filesK��(���	�	�4�d�;��+�+�d�2�Z�?�������%������|�<r�
network_state�	templates�returnc���|j}|rtj|�|z}tj|�|j|�}|j
�D]\}}|j|||��y�N)r>r�target_pathr�
ensure_dir�_render_contentr0r�)rr�r��target�network_dir�ret_dictr&r2s        r�render_network_statezRenderer.render_network_stateso���+�+����*�*�6�2�[�@�K�����$��'�'�
�6���N�N�$�	8�D�A�q��$�$�Q��;�7�	8rc�<�i}|j�D�]�}t�}|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)Nr�crjr�rF�	ethernetszset-name)r��6rc�domainr�r�z has both dhcpzdomain and dhcpz*-overrides.use-domains configured. Use one)�iter_interfacesrrKrRr~r��iter_routesr^r�r@r0r?r��RuntimeErrorr�r�r5)rr�r�rIrAr�rcr)r�rF�dev_name�dev_cfgr�r��	exceptions               rr�zRenderer._render_content/s������'�'�)�4	:�E��+�C��.�.�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�i4	:�l�rr�)NN)r6r7r8�__doc__rrrKrRr^r~r�r	r�r�r�rr r�r�r9rrr;r;Qs����
����"
?�	�
?�D�9�D�0<�	�<�~;�)�;�$I�I�I�<�I�"P�	�P�8=�%)��	8�#�8��D�>�8�

�8� 8�,�8�4�8rr;c�V�ddg}ddg}|D]}tj|||��r�yy)N�ip�	systemctlz	/usr/sbinz/bin)r�r�FT)r�which)r��expectedr��ps    r�	availabler�js=���k�"�H��6�
"�F�
����z�z�!�F�6�:���rr�)�logging�collectionsr�typingr�	cloudinitrr�
cloudinit.netrr�cloudinit.net.network_stater	�	getLoggerr6rurr;r�r9rr�<module>r�sP���#�� �B�4��g����!��<�<�~V�x� � �V�rr