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__/eni.cpython-312.pyc
�

쑛hx`�
���ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZddl
mZmZmZddlmZmZmZmZmZmZmZddlmZej6e�Zgd�Zgd�Zgd	�Z d
e!de!de"d
ee#fd�Z$d
e!de%dee#d
ee#fd�Z&	d"d
e!de"d
ee#fd�Z'de!de#de#de#d
df
d�Z(ejRd�de#d
e!fd��Z*de!d
e!fd�Z+de#de"d
e"fd�Z,Gd�d ejZ�Z-d
e"fd!�Z.y)#�N)�suppress)�Any�Dict�List�Optional)�performance�subp�util)�ParserError�is_ipv4_address�is_ipv4_network�is_ipv6_address�is_ipv6_network�renderer�subnet_is_ipv6)�NetworkState)zpre-up�upzpost-up�downzpre-downz	post-down)�
bridge_ageing�bridge_bridgeprio�	bridge_fd�
bridge_gcinit�bridge_hello�
bridge_maxage�bridge_maxwait�
bridge_stp)�address�netmask�	broadcast�network�metric�gateway�pointtopoint�media�mtu�hostname�
leasehours�	leasetime�vendor�client�bootfile�server�hwaddr�provider�frame�netnum�endpoint�local�ttl�iface�subnet�is_ipv6�returnc	���g}gd�}|j�D]�\}}|dk(r�|dk(r
|d�d|d��}|s�!||vs�&t|t�rE|dk(r.ttt	j
t|��|��}dj|�}n|dk(r
t
||�s��d	|vr|jd	d
�}|jdj||����t|�S)N)
rrrr!r"�pointopointr%�scope�
dns_search�dns_nameserversrr�/�prefixr<)r6� �_�-�    {0} {1})�items�
isinstance�list�filter�	functools�partial�has_same_ip_version�join�replace�append�format�sorted)r4r5r6�content�	valid_map�key�values       �3/usr/lib/python3/dist-packages/cloudinit/net/eni.py�_iface_add_subnetrTJs����G��I��l�l�n�=�
��U��)����)��%�i�0�&��2B�C�E��S�I�%��%��&��+�+� ��%�-�-� 3�W��"�	��E��������+�+�4G��7�5���c�z��k�k�#�s�+���N�N�=�/�/��U�;�<�1=�4�'�?���index�ipv4_subnet_mtuc�`�|dk7rgSg}gd�}gd�}ddi}|ddvr|jd�|j�D]�\}}|j||�}	d|	vr|	jdd	�}	t	|t
�r	||rd
nd}|r||vr�N|dk(r#|r!||k7rtjd
|d||��v||vr)|D]#}
|jdj|	|
���%��t	|t�rdj|�}|jdj|	|����t|�S)Nr)
�control�	device_id�dns�driverrV�inet�mode�name�subnets�type)�bridge_pathcost�bridge_portprio�bridge_waitport�mac_address�	hwaddressra)�bond�bridge�
infiniband�vlanr@rA�on�offr%zZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r_rBr?)rLrC�getrKrD�bool�LOG�warningrMrErJrN)r4rVrWrO�
ignore_map�multiline_keys�renamesrQrR�	key_write�vs           rS�_iface_add_attrsrvvsV��
��z��	��G��J��N��k�*�G��V�}�D�D����-�(��k�k�m�?�
��U��K�K��S�)�	��)��!�)�)�#�s�3�I��e�T�"�!�#�J�D�E�E���z�)���%�<�O���'����:��&�M��#��
��.� ��
C�����}�3�3�I�q�A�B�
C���e�T�"��H�H�U�O�E����}�+�+�I�u�=�>�3?�6�'�?�rU�render_hwaddressc�@�|d}|d}|dk(rd}n|dvrd|z}nd|z}|j�}|j||d��djdi|��d	jdi|��g}|r2|jd
�r!|j	djdi|���|S)
Nr_rY�auto)�hotplugzallow-z
# control-)�fullname�cverbz{cverb} {fullname}ziface {fullname} {inet} {mode}rez    hwaddress {mac_address}�)�copy�updaterMrmrL)r4rVrwr{rYr|�subst�liness        rS�_iface_start_entryr��s����V�}�H��I��G��&����	�L�	 ��7�"���w�&���J�J�L�E�	�L�L�h��7�8�	$��#�#�,�e�,�/�(�/�/�8�%�8�
�E��E�I�I�m�4�
���9�2�9�9�B�E�B�C��LrU�ifaces�contents�src_dir�src_pathc�*�d}|j�D�]F}|j�}|jd�r�&|jd�}|d}|dk(�r]|d}|jd�s tj
j
||�}tj|�D�]}	t	j|	�}
|
D�cgc]u}tj
jtj
j
|	|��r6tjd|�� tj
j
|	|���w}
}|
D]o}tj|�j�}
tj
j|�}t||
tj
j!|�|��q�����|d	k(r�|d}|jd�s tj
j
||�}tj|�D]}	t#|	d
�5}|j%�j�}
ddd�tj
j|	�}t|
tj
j!|�|�����s|dk(r|ddD]}||vrd|i||<d
||d<����|dk(rB|dd\}}}||vrd|i||<nd||vrt'd|�d|�d���|||d<|||d<|}���|dk(r|ddk(r|d}n|d}|||d<��|t(vr
|d|||<��|t*vr:|||vrg|||<|||j-dj
|dd����W|jd�r}d||vri||d<|dk(r1g||dd<|ddD]}||ddj-|�����|dk(s���g||dd<|ddD]}||ddj-|�����|jd��r
d||vri||d<|t.vr#|j1dd d�}|d||d|<��1|d!k(r1g||dd"<|ddD]}||dd"j-|����g|d#k(r6|dj3�d$k(r|d||dd$<���|d||dd$<���|d%k(r+d&||dvri||dd&<|d||dd&|d<���|d'k(s���d(||dvri||dd(<|d||dd(|d<��|jd)�s��d*||vri||d*<|j1d)d d�}|d||d*|<��I|j5�D]}d||vs�d+||d<�ycc}w#1swY��ZxYw),a~Parses the file contents, placing result into ifaces.

    '_source_path' is added to every dictionary entry to define which file
    the configuration information came from.

    :param ifaces: interface dictionary
    :param contents: contents of interfaces file
    :param src_dir: directory interfaces file was located
    :param src_path: file path the `contents` was read
    N�#r?rzsource-directory�r=z^[a-zA-Z0-9_-]+$�source�rry�_source_pathTr4��familyz
Interface z* can only be defined once. Re-defined in 'z'.�methodrf�ether�zdns-r[z
dns-search�searchzdns-nameservers�nameservers�bridge_rh��bridge_ports�ports�	bridge_hw�macrb�pathcostrc�portpriozbond-rgF)�
splitlines�strip�
startswith�split�os�pathrJ�glob�listdir�isfile�re�matchr
�load_text_file�abspath�_parse_deb_config_data�dirname�open�readr�NET_CONFIG_OPTIONS�NET_CONFIG_COMMANDSrL�NET_CONFIG_BRIDGE_OPTIONSrK�lower�keys)r�r�r�r��currif�liner��option�parsed_src_dir�
expanded_path�dir_contentsr��entry�src_data�	abs_entry�new_src_path�fp�abs_pathr4r�r��val�domainr,�
bridge_option�bond_options                          rSr�r��sQ���F��#�#�%�r;���z�z�|���?�?�3����
�
�3����q����'�'�"�1�X�N�!�,�,�S�1�!#�����g�~�!F��!%���>�!:�
�
�!�z�z�-�8��!-� �������r�w�w�|�|�M�4�'H�I��H�H�%7��>�J�	�G�G�L�L���5� �� �*��E�#�2�2�5�9�?�?�A�H� "������ 6�I�*���"�'�'�/�/�)�*D�i���
� �x�
� ��8�L��*�*�3�/�!�w�w�|�|�G�\�B��!%���<�!8�
�
��-��-�1��!�w�w�y���0�H�1��7�7�?�?�=�9��&��H�b�g�g�o�o�h�&?���	
��v�
��q�r��
-����&�'��%�F�5�M�)-��u�
�f�%�

-��w�
�$)�!�A�J�!�E�6�6��F�"�#�H�!��u�
��V�E�]�*�!�-2�H�>���'-�F�5�M�(�#�&,�F�5�M�(�#��F�
�{�
"��Q�x�7�"��A�h���A�h��*-�F�6�N�;�'�
�)�
)�%*�1�X�F�6�N�6�"�
�*�
*��V�F�^�+�)+��v��v�&��6�N�6�"�)�)�#�(�(�5���9�*=�>�
�
�
�v�
&��F�6�N�*�(*��v��u�%���%�24��v��u�%�h�/�#�A�B�i�C�F��6�N�5�)�(�3�:�:�6�B�C��,�,�79��v��u�%�m�4�#�A�B�i�H�F��6�N�5�)�-�8�?�?��G�H�
�
�
�y�
)��v�f�~�-�+-��v��x�(��2�2� &���y�"�a� @�
�:?��(��v��x�(��7��>�)�46��v��x�(��1�"�1�2�Y�D�E��6�N�8�,�W�5�<�<�U�C�D��;�&�
��8�>�>�#�u�,�6;�A�h�F�6�N�8�,�U�3�6;�A�h�F�6�N�8�,�U�3��,�,��V�F�^�H�%=�=�;=�F�6�N�8�,�Z�8�AF�q���v��x�(��4�U�1�X�>��,�,��V�F�^�H�%=�=�;=�F�6�N�8�,�Z�8�AF�q���v��x�(��4�U�1�X�>�
�
�
�w�
'��V�F�^�+�)+��v��v�&� �.�.��"�a�8�K�27��(�F�6�N�6�"�;�/�er;�f����*������&�$)�F�5�M�&�!�*��O �&1�1�s�=A:V�V�VzConverting eni data�eni_datac�:�i}t||dd��t|�S)z=Return a network config representation of what is in eni_data�None)r�r�)r��_ifaces_to_net_config_data)r�r�s  rS�convert_eni_datar�Xs"���F��6�8�V�f�M�%�f�-�-rUc��i}|j�D]�\}}|jd�d}||vr"|dk(rd}nd}||gd�||<d|vr|d||d<||d	d
�}|jd�rd|d<nd
|d<|jd	�dk(r|d|d<dD]}||vs�||||<�d|vr&dD]!}||dvs�|d|s�|d||d|z<�#||dj|���dt	|�D�	cgc]}	||	��	c}	d�Scc}	w)z�Return network config that represents the ifaces data provided.
    ifaces = _parse_deb_config_data(...)
    config = ifaces_to_net_config_data(ifaces)
    state = parse_net_config_data(config).�:r�lo�loopback�physical)rar_r`rfrer�)�_orig_eni_nameraryrY�manual�staticr)rr"rr[)r�r��dns_r`r�)�version�config)rC�	partitionrmrLrN)
r��devsr_�data�devname�dtyper5�copy_key�n�ds
          rSr�r�`sn��
�D��l�l�n�0�
��d��.�.��%�a�(���$���$��"��"��%*�G��K�D��M��d�"�/3�K�/@��W�
�m�,�$(�$�x�.�A���8�8�F�� &�F�9�� (�F�9���8�8�H���)� $�Y��F�9��;�	2�H��4��#'��>��x� �	2��D�=�.�
8����U��#��U��A��)-�e��Q��F�6�A�:�&�
8�	
�W�
�i� �'�'��/�=0�@�f�T�l�$C��T�!�W�$C�D�D��$Cs�8D	�addr_or_netc�f�|st|�xst|�St|�xst|�S�N)rr
rr)r�r6s  rSrIrI�s/����{�+�K��{�/K�K��;�'�G�?�;�+G�GrUc	��eZdZdZddeefd�Zddededeefd�Z		dd	ed
e
deeefd�Z	dded
e
defd
�Z
		ddedeedeeddfd�Zy)�Rendererz@Renders network information in a /etc/network/interfaces format.Nr�c��|si}|jdd�|_|jdd�|_|jdd�|_y)N�eni_pathzetc/network/interfaces�
eni_header�
netrules_pathz(etc/udev/rules.d/70-persistent-net.rules)rmr�r�r�)�selfr�s  rS�__init__zRenderer.__init__�sF����F��
�
�:�/G�H��
� �*�*�\�4�8���#�Z�Z��G�
��rU�route�indentr7c���g}|dz}|dz}d}ddd�}d}|dd	k(r|d
d	k(rd}n|ddk(r
|d
dk(rd}d}	dD]�}
|r|
dk(r�|
dk(r|	|�d||
�d||
��z
}	�$|
|vs�)|
dk(rJt||
�r|	dz
}	n|jd
�dk(r|	dz
}	n|	dz
}	d
|vs�f|	d||
�d|d
��z
}	�x|	d||
�d||
��z
}	��|j||	z|z�|j||	z|z�|S)a�When rendering routes for an iface, in some cases applying a route
        may result in the route command returning non-zero which produces
        some confusing output for users manually using ifup/ifdown[1].  To
        that end, we will optionally include an '|| true' postfix to each
        route line allowing users to work with ifup/ifdown without using
        --force option.

        We may at somepoint not want to emit this additional postfix, and
        add a 'strict' flag to this function.  When called with strict=True,
        then we will not append the postfix.

        1. http://askubuntu.com/questions/168033/
                 how-to-set-static-routes-in-ubuntu-server
        zpost-up route addzpre-down route delz || true�gwr!)r"r!r�r z0.0.0.0rz defaultz::r>rz -A inet6 default)r r"r!r"r?z	 -A inet6� z -hostz -netr=)rrmrL)r�r�r�rOrr�or_true�mapping�
default_gw�
route_line�ks           rS�
_render_routezRenderer._render_route�sf����
�)�
)���,�,������
��
�
����y�(�U�9�-=��-J�#�J�
�9�
��
%�%��/�Q�*>�,�J��
�1�	D�A��a�9�n���I�~��J���
�E�!�H�M�M�
��e���	�>�&�u�Q�x�0�"�k�1�
����8�,��2�"�h�.�
�"�g�-�
��5�(�"�%��(�E�(�O�&L�L�
��g�a�j�%��(�"C�C�J�!	D�"	���r�J���0�1����t�j�(�7�2�3��rUr4rwc	�4��tj|�}tt�5|j	d�ddd�g}|jdi�}|j	dd�}|j	dd�}|rd|d<|�r�d}g}t
|�D�]�\}	�d}
|	|d<�d|d	<�jd
d�|d
<d}t��rd
}|dz
}nd}�jd�}
||d<�ddk(s�ddk(s�ddk(rd|d	<|�K|rdnd|d<nA�ddk(rd|d	<d|d<n.�ddk(rd|d	<d|d<nt��rd|d	<|�	|rdnd|d<d
|D�
cgc]}
d|dz|
v��c}
vrd|d
<d�vxsd�v}|�|rt�fd �d!D��}|�|si��|��tt||	|�"�t|�|�zt||	|
�z�}�jd#g�D]U}t|jd$d%��}|r|s|j|��4|j|j!|d&�'���W|r;|r9|D]$}|j|j!|d&�'���&|j#�|j|����|r||d|d
dd(d)�}d|d*��|�i��|��tt|d+|�"�t|�d
�z�}�d#D]$}|j|j!|d&�'���&|j|�|Sg}d,|vsd-|vr!|jd.j$d2i|���|jd/j$d2i|���|jt|d0d�1��|j|�|S#1swY��RxYwcc}
w)3N�	config_idr`z	accept-ra�	wakeonlan�gzethernet-wolrVrar^rYryr]T�6Fr%�dhcp4�dhcp6zipv6_dhcpv6-stateful�dhcp�1�0�	accept_razipv6_dhcpv6-stateless�
ipv6_slaacr�zauto %sr_�aliasr;r<c3�D�K�|]}|�j|�f���y�wr�)rm)�.0r�r5s  �rS�	<genexpr>z)Renderer._render_iface.<locals>.<genexpr>s&��������F�J�J�q�M�*��s� )r;r<�rw�routesr r�z    )r��inet6)r_rYr^r])rar���zbond-masterzbond-slaveszauto {name}ziface {name} {inet} {mode}r)rVrWr})r~�deepcopyr�KeyError�poprm�	enumerater�dictrEr�rTrvrrL�extendr��clearrM)r�r4rw�sectionsr`r��ethernet_wolr[�routes6rVrW�subnet_inetr6r��dns_presentr�r��ipv6_networkr5s                  @rS�
_render_ifacezRenderer._render_iface�sg����
�
�e�$���h�
�	#��I�I�k�"�	#�$&���)�)�I�r�*���I�I�k�4�0�	��y�y��d�3���$'�E�.�!���C��G�!*�7�!3�O
'�
��v�"&��!&��g�� &�v���f�
�#)�:�:�i��#@��i� �$��!�&�)�"�G��3�&�K�#�G�&,�j�j��&7�O� +��f�
��6�N�g�-��f�~��0��f�~�)?�?�%+�E�&�M� �,�4=�S�3��k�*��F�^�'>�>�$*�E�&�M�$'�E�&�M��F�^�|�3�$*�E�&�M�$'�E�&�M�#�F�+�$,�E�&�M� �,�4=�S�3��k�*��DL��<@�I��v��/�4�7���(/�E�)�$�
!�F�*�I�.?�6�.I���;�;���!B���C��?�;�.��.�#�.�F��&��u�7G��(��v�w�?�@�'�u�e�_�E�	F���$�Z�Z��"�5�K�E�#2�5�9�9�Y��3K�#L�L�#�G����u�-� ��L�L��!3�!3�E�&�!3�!I�J�K��w�!(�O�����T�%7�%7��f�%7�%M�N�O��M�M�O�����&�_O
'�b�"�&�M�$�Y�/�$�#�	��#+�g�>���?�.��.�#�.�F��&��r�4D��(��v�t�<�=���$�H�-�K�E��L�L��!3�!3�E�&�!3�!I�J�K�����&����E���%��%�)?����1�]�1�1�:�E�:�;��L�L�<�5�<�<�E�u�E�F��L�L� ��a��F�
�
�O�O�E�"���y	#�	#��ls�N�N�N�
network_statec���
�dddddd�gd�}|j�D],}|jd�dk(s�tj|�}�.|j}|r||d	d
d<|j
}|r||d	d
d<d
d
ddddd��
g}|j
|j|��t|j��
fd���D]9}|jd�dk(r�|j
|j||����;|j�D]"}|j|j|���$dj|D�	cgc]}	dj|	���c}	�dzScc}	w)z1Given state, emit etc/network/interfaces content.r�r�r]r�ry)rarY)r_rar]r`r_r`rr<r;r�r��r��)r�r�rirgrhrjc����|d|dfS)Nrar_r})r��orders �rS�<lambda>z-Renderer._render_interfaces.<locals>.<lambda>{s���5��6��+�Q�v�Y�7�rU)rQrz

�
)
�iter_interfacesrmr~rr<�dns_searchdomainsr	rrN�iter_routesrLr�rJ)r�rrwr�r4r��
searchdomainsrr��srs          @rS�_render_interfaceszRenderer._render_interfacesSs�������!+��?�@�	
��#�2�2�4�	*�E��y�y�� �D�(��]�]�5�)��	*�$�3�3���2=�B�y�M�!��.�/�%�7�7�
��-:�B�y�M�!��\�*�
������

��������*�*�2�.�/���)�)�+�7�
�		�E�
�y�y�� �D�(���O�O��"�"�5�;K�"�L�
�		�#�.�.�0�	7�E��O�O�D�.�.�u�5�6�	7��{�{�(�;�Q�D�I�I�a�L�;�<�t�C�C��;s�E)�	templates�targetc�8�tj||j�}tjt
jj|��|jr|jnd}tj|||j|�z�|jrztj||j�}tjt
jj|��tj||j|�d��yy)Nr�T)rO�
preserve_mode)
r	�target_pathr�r
�
ensure_dirr�r�r�r��
write_filerr��_render_persistent_net)r�rr r!�fpeni�header�netruless       rS�render_network_statezRenderer.render_network_state�s���� � �����7�����������.�/�$(�O�O����������v��(?�(?�
�(N�N�O�����'�'���0B�0B�C�H��O�O�B�G�G�O�O�H�5�6��O�O���3�3�M�B�"�
�rUr�)r��F)NN)�__name__�
__module__�__qualname__�__doc__rrr��strrr�rnrrrr+r}rUrSr�r��s���J�
�x��~�
�2�4�2��2�d�3�i�2�j5:�B��B�-1�B�	
�d�3�i��B�JEJ�4D�)�4D�=A�4D�	�4D�r%)� $�	�#���D�>����
�	�

�rUr�c��gd�}ddg}|D]}tj||��r�yd}tjj	|�syy)N)�ifquery�ifup�ifdownz/sbinz	/usr/sbin)r�Fz/etc/network/interfacesT)r	�whichr�r�r�)�expectedr��p�enis    rS�	availabler:�sN��,�H��{�
#�F�
����z�z�!�F�+���$�C�
�7�7�>�>�#���rUr,)/r~rGr��loggingr�r��
contextlibr�typingrrrr�	cloudinitrr	r
�
cloudinit.netrrr
rrrr�cloudinit.net.network_stater�	getLoggerr-ror�r�r�rrnr1rT�intrvr�r��timedr�r�rIr�r:r}rUrS�<module>rDs�������	�	��,�,�-�-����5��g����!����	����8(�T�(�4�(�$�(�4��9�(�X?��?��?�.6�s�m�?�	�#�Y�?�F27����*.��	�#�Y��4C*��C*��C*�*-�C*�9<�C*�	�C*�L����(�)�.�s�.�t�.�*�.�&E�t�&E��&E�RH�S�H�4�H�D�H�L�x� � �L�^
�4�
rU