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

Ӈg�S��6�ddlZddlZddlZddlZddlZddlmZddlmZddl	m
Z
mZmZddl
mZmZmZddlmZej&e�Zgd�Zgd�Zgd	�Zd
�Zd�Zdd�Zd
�Ze
j:d�d��Zd�ZGd�dej@�Z dd�Z!y)�N)�suppress)�Optional)�performance�subp�util)�ParserError�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�ttlc�D�g}gd�}|j�D]}\}}|dk(r�|dk(r
|d�d|d��}|s�!||vs�&t|t�rdj|�}d|vr|j	dd�}|jd	j
||���t|�S)
N)
rrrrr�pointopointr�scope�
dns_search�dns_nameserversrr�/�prefix� �_�-�    {0} {1})�items�
isinstance�list�join�replace�append�format�sorted)�iface�subnet�content�	valid_map�key�values      �3/usr/lib/python3/dist-packages/cloudinit/net/eni.py�_iface_add_subnetrGAs����G��I��l�l�n�
=�
��U��)����)��%�i�0�&��2B�C�E��S�I�%��%��&��������c�z��k�k�#�s�+���N�N�=�/�/��U�;�<�
=��'�?��c
�P�|dk7rgSg}gd�}gd�}ddi}|ddvr|jd�|j�D]�\}}t|t�r	||rdnd	}|r||vr�&|d
k(r#|r!||k7rtjd|d||��N||vr9|D]3}	|jd
j
|j||�|	���5��t|t�rdj|�}|jd
j
|j||�|����t|�S)Nr)	�control�	device_id�driver�index�inet�mode�name�subnets�type)�bridge_pathcost�bridge_portprio�bridge_waitport�mac_address�	hwaddressrR)�bond�bridge�
infiniband�vlan�on�offrzZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.rPr7r4)r=r8r9�bool�LOG�warningr>�getr:r;r?)
r@rM�ipv4_subnet_mturB�
ignore_map�multiline_keys�renamesrDrE�vs
          rF�_iface_add_attrsrg_sD��
��z��	��G�
�J��N��k�*�G��V�}�D�D����-�(��k�k�m�K�
��U��e�T�"�!�#�J�D�E�E���z�)���%�<�O���'����:��&�M��#��
��.� ��
O�����}�3�3�G�K�K��S�4I�1�M�N�
O���e�T�"��H�H�U�O�E����}�+�+�G�K�K��S�,A�5�I�J�-K�0�'�?�rHc�@�|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)
NrPrJ�auto)�hotplugzallow-z
# control-)�fullname�cverbz{cverb} {fullname}ziface {fullname} {inet} {mode}rVz    hwaddress {mac_address}�)�copy�updater>rar=)r@rM�render_hwaddressrkrJrl�subst�liness        rF�_iface_start_entryrs�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��LrHc�*�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�#r4rzsource-directory�r2z^[a-zA-Z0-9_-]+$�source�rri�_source_pathTr@��familyz
Interface z* can only be defined once. Re-defined in 'z'.�methodrW�ether�zdns-�dnsz
dns-search�searchzdns-nameservers�nameservers�bridge_rY��bridge_ports�ports�	bridge_hw�macrS�pathcostrT�portpriozbond-rXF)�
splitlines�strip�
startswith�split�os�pathr;�glob�listdir�isfile�re�matchr�load_text_file�abspath�_parse_deb_config_data�dirname�open�readr�NET_CONFIG_OPTIONS�NET_CONFIG_COMMANDSr=�NET_CONFIG_BRIDGE_OPTIONSr<�lower�keys)�ifaces�contents�src_dir�src_path�currif�liner��option�parsed_src_dir�
expanded_path�dir_contentsr��entry�src_data�	abs_entry�new_src_path�fp�abs_pathr@r{r|�val�domainr%�
bridge_option�bond_options                          rFr�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 datac�:�i}t||dd��t|�S)z=Return a network config representation of what is in eni_dataN)r�r�)r��_ifaces_to_net_config_data)�eni_datar�s  rF�convert_eni_datar�7s"���F��6�8�T�D�I�%�f�-�-rHc��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)rRrPrQrWrVr|)�_orig_eni_namerRrirJ�manual�staticr)rrrr)r�r��dns_rQrv)�version�config)r8�	partitionrar=r?)
r��devsrP�data�devname�dtyperA�copy_key�n�ds
          rFr�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	c�P�eZdZdZdd�Zdd�Zd
d�Zd
d�Z		ddede	e
d	dfd
�Zy)�Rendererz@Renders network information in a /etc/network/interfaces format.Nc��|si}|jdd�|_|jdd�|_|jdd�|_y)N�eni_path�etc/network/interfaces�
eni_header�
netrules_pathz(etc/udev/rules.d/70-persistent-net.rules)rar�r�r�)�selfr�s  rF�__init__zRenderer.__init__ksF����F��
�
�:�/G�H��
� �*�*�\�4�8���#�Z�Z��G�
��rHc���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(rCd||
vr|	dz
}	n|jd
�dk(r|	dz
}	n|	dz
}	d
|vs�_|	d||
�d|d
��z
}	�q|	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)rrr�rz0.0.0.0rz defaultz::r3rz -A inet6 default)rrrrr4r�z	 -A inet6� z -hostz -netr2)rar=)r��route�indentrBrr
�or_true�mapping�
default_gw�
route_line�ks           rF�
_render_routezRenderer._render_routetse����
�)�
)���,�,������
��
�
����y�(�U�9�-=��-J�#�J�
�9�
��
%�%��/�Q�*>�,�J��
�1�	D�A��a�9�n���I�~��J���
�E�!�H�M�M�
��e���	�>��e�A�h��"�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��rHc	���tj|�}tt�5|j	d�ddd�g}|jdi�}|j	dd�}|j	dd�}|rd|d<|�rit
|�D�]X\}}d}	||d<|d|d	<|jd
d�|d
<d}
t|�r|
d
z
}
n|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
<tt|||��t||�zt|||	�z�}|jdg�D]$}
|j|j|
d� ���&|j|���[|Sg}d!|vsd"|vr!|jd#jd'i|���|jd$jd'i|���|jt|d%d�&��|j|�|S#1swY��1xYwcc}w)(N�	config_idrQz	accept-ra�	wakeonlan�gzethernet-wolrMrRrOrJrirN�6r�dhcp4�dhcp6zipv6_dhcpv6-stateful�dhcp�1�0�	accept_razipv6_dhcpv6-stateless�
ipv6_slaacr�Tzauto %srP�alias�rp�routesz    )r�zbond-masterzbond-slaveszauto {name}ziface {name} {inet} {mode}r)rMrbrm)rn�deepcopyr�KeyError�popra�	enumerater
r:rsrGrg�extendr�r=r>)r�r@rp�sectionsrQr��ethernet_wolrMrArb�subnet_inetr�rrr�s              rF�
_render_ifacezRenderer._render_iface�s����
�
�e�$���h�
�	#��I�I�k�"�	#����)�)�I�r�*���I�I�k�4�0�	��y�y��d�3���$'�E�.�!��!*�7�!3�7
'�
��v�"&��!&��g�� &�v���f�
�#)�:�:�i��#@��i� �$��!�&�)��3�&�K�&,�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�)�$��&��u�7G��(��v�6�7�'�u�e�_�E�	F���$�Z�Z��"�5�K�E��L�L��!3�!3�E�&�!3�!I�J�K�����&�o7
'�D���E���%��%�)?����1�]�1�1�:�E�:�;��L�L�<�5�<�<�E�u�E�F��L�L� ��a��F�
�
�O�O�E�"���Y	#�	#��ds�I&�I3�&I0c��
�dddddd�gd�}|j�D],}|jd�dk(s�tj|�}�.|j}|rd	j|�|d
dd<|j}|rd	j|�|d
dd
<ddddddd��
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�rNr�ri)rRrJ)rPrRrNrQrPr4rQrr1r0rvr~�rz�)r�r�rZrXrYr[c����|d|dfS)NrRrPrm)r��orders �rF�<lambda>z-Renderer._render_interfaces.<locals>.<lambda> s���5��6��+�Q�v�Y�7�rH)rDr�z

�
)
�iter_interfacesrarnr�r1r;�dns_searchdomainsr�r�r?�iter_routesr=r�)r��
network_staterpr�r@r��
searchdomainsr�r��sr�s          @rF�_render_interfaceszRenderer._render_interfaces�s�������!+��?�@�	
��#�2�2�4�	*�E��y�y�� �D�(��]�]�5�)��	*�$�3�3���25�(�(�;�2G�B�y�M�!��.�/�%�7�7�
��-0�X�X�m�-D�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�%Fr�	templates�returnc�8�tj||j�}tjt
jj|��|jr|jnd}tj|||j|�z�|jrztj||j�}tjt
jj|��tj||j|�d��yy)Nr�T)rB�
preserve_mode)
r�target_pathr�r�
ensure_dirr�r�r�r��
write_filerr��_render_persistent_net)r�rr�target�fpeni�header�netruless       rF�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�"�
�rH�N)r��F)NN)�__name__�
__module__�__qualname__�__doc__r�r�r�rrr�dictrrmrHrFr�r�hsK��J�
�2�hP�d2D�n%)��	�#���D�>��

�rHr�c���gd�}ddg}|D]}tj|||��r�ytj|d�}tjj|�syy)N)�ifquery�ifup�ifdownz/sbinz	/usr/sbin)r�r
Fr�T)r�whichr	r�r�r�)r
�expectedr��p�enis     rF�	availabler!Cs^��,�H��{�
#�F�
����z�z�!�F�6�:����
�
�6�#;�
<�C�
�7�7�>�>�#���rHrr)"rnr��loggingr�r��
contextlibr�typingr�	cloudinitrrr�
cloudinit.netrr	r
�cloudinit.net.network_stater�	getLoggerrr_r�r�r�rGrgrsr��timedr�r�r�r!rmrHrF�<module>r*s������	�	���-�-�?�?�4��g����!����	����8�<9�x�0A*�H����(�)�.�*�.�&E�RX�x� � �X�v
rH