Your IP : 216.73.216.31


Current Path : /usr/lib/python3/dist-packages/cloudinit/net/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/cloudinit/net/__pycache__/network_manager.cpython-38.pyc

U

�Ad=4�@s�ddlZddlZddlZddlZddlZddlmZddlmZ	ddlm
Z
mZddlm
Z
mZmZddlmZdZdZd	Ze	�e�ZGd
d�d�ZGdd
�d
ej�Zddd�Zddd�ZdS)�N)�Optional)�log)�subp�util)�is_ipv6_address�renderer�subnet_is_ipv6)�NetworkStatez/etc/NetworkManagerz/usr/lib/NetworkManagerz'/etc/NetworkManager/NetworkManager.confc@s|eZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	dd�Z
dd�Zdd�Zdd�Z
edd��Zdd�Zdd�ZdS)�NMConnectionz/Represents a NetworkManager connection profile.cCsPt�d�}t��|_t|j_d|��tt�||��d�|jd<ddi|jd<dS)	z�
        Initializes the connection with some very basic properties,
        notably the UUID so that the connection can be referred to.
        z$a3924cb8-09e0-43e9-890b-77972a800108zcloud-init )�id�uuid�
connectionz%org.freedesktop.NetworkManager.originz
cloud-init�userN)rZUUID�configparser�ConfigParser�config�strZoptionxformZuuid5)�self�con_idZ
CI_NM_UUID�r�?/usr/lib/python3/dist-packages/cloudinit/net/network_manager.py�__init__s

��zNMConnection.__init__cCs6|j�|�si|j|<|j�||�s2||j||<dS)z_
        Sets a property unless it's already set, ensuring the section
        exists.
        N)rZhas_section�
has_option)r�sectionZoption�valuerrr�_set_default5s
zNMConnection._set_defaultcCs�dddddddd�}|�|dd�z||}Wn&tk
rTd}d|j|d<YnX|j|ddkrld	S|j|ddkr�|dkr�d	S||j|d<|�|dd
�d	S)z}
        Ensures there's appropriate [ipv4]/[ipv6] for given family
        appropriate for given configuration type
        Zmanual�auto)ZstaticZdhcp6Z
ipv6_slaaczipv6_dhcpv6-statelesszipv6_dhcpv6-statefulZdhcp4�dhcp�method�disabled�truezmay-failrN�false)r�KeyErrorr)r�familyZsubnet_typeZ
method_maprrrr�_set_ip_method@s(�zNMConnection._set_ip_methodcCs@t�d�D]0}|�|��}|j�||�s
||j||<q<q
dS)z�
        Adds a numbered property, such as address<n> or route<n>, ensuring
        the appropriate value gets used for <n>.
        �N)�	itertools�countrr)rrZ
key_prefixr�index�keyrrr�
_add_numberedds
zNMConnection._add_numberedcCs*|ddt|d�}|�|d|�dS)z5
        Adds an ipv[46]address<n> property.
        �address�/�prefixN�rr*)rr#�subnetrrrr�_add_addresspszNMConnection._add_addresscCsB|ddt|d�}d|kr0|d|d}|�|d|�dS)z3
        Adds a ipv[46].route<n> property.
        Znetworkr,r-�gateway�,�routeNr.)rr#r3rrrr�
_add_routexszNMConnection._add_routecCsPt|�rdnd}|�|dd�|�|dd�|j|d|d|j|d<dS)	zF
        Extends the ipv[46].dns property with a name server.
        �ipv6�ipv4rr�dns��;N)rrr)rr7r#rrr�_add_nameserver�s	zNMConnection._add_nameservercCs8|�|dd�|j|dd�|�d|j|d<dS)zM
        Extends the ipv[46].dns-search property with a name server.
        z
dns-searchr8r9N)rr�join)rr#�
dns_searchrrr�_add_dns_search�s�zNMConnection._add_dns_searchcCs|jddS)z-
        Returns the connection UUID
        r
r)r�rrrr�con_uuid�szNMConnection.con_uuidcCs|j�dd�S)zN
        Can this be serialized into a meaningful connection profile?
        r
�type)rrr>rrr�valid�szNMConnection.validcCs|�dd���S)z)
        Sanitize a MAC address.
        �-�:)�replace�upper)Zaddrrrr�mac_addr�szNMConnection.mac_addrc
Cs�ddddddd�}||d}|dkr*dSd	|kr8d}nd}||jd
d<|dk	r|||jd
d<|�||d�|jd
d
<i|j|<dddddddddd�	ddd�ddiiid�}|d}d}|dD]�}	t|	�r�d nd!}
|�|
|	d�d"|	k�r|�|
|	�d#|	k�r|	d#|j|
d#<|	d$D]}|�|
|��q&d%|	k�r^|	d%D]}|�|��qLd&|	k�rx|�|
|	d&�|
d!kr�d|	kr�|	d}q�|dk�r�|}||k�s�t�	d'|d(||�||�
�D]n\}
}||k�r�q�||dk�r�q�t||t��r ||�rd)nd*|j||
<nt
||�|j||
<�q�|dk�r�|d+d,k�rdt
d-�|jdd.<|dk	�r�t
|�|jdd<|d/dk	�r�|�|d/�|jdd0<|dk�r�d1|k�r�|�|d1�|jdd2<|dk�r<|d3D]0}|�|�}|�d
dd�|�d
d
|����q�|d/dk	�r<|�|d/�|jdd0<|dk�r�|dk	�r�d4|jdd5<t
|�|jdd<|d/dk	�r�|�|d/�|jdd0<|dk�s�|j�|d0��s�|d(|jd
d6<dS)7z�
        Integrate information from network state interface information
        into the connection. Most of the work is done here.
        �ethernet�vlan�bond�bridge�
infinibandN)ZphysicalrHrIrJrKZloopbackr@zbond-masterr
z
slave-typez-masterZmasterz	bond-modeZbond_miimonzbond-xmit-hash-policyzbond-num-grat-arpzbond-downdelayzbond-updelayzbond-fail-over-maczbond-primary-reselectzbond-primary)	�modeZmiimonZxmit_hash_policyZnum_grat_arpZ	downdelayZupdelayZ
fail_over_macZprimary_reselectZprimaryZ
bridge_stpZbridge_bridgeprio)ZstpZpriorityrZvlan_id)rIrJrHrGrKZmtuZsubnetsr5r6r+r1ZroutesZdns_nameserversr<zZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.�namer r!Z	wakeonlanT�@zwake-on-lanZmac_addresszmac-addresszvlan-raw-device�parentZbridge_portsZdatagramztransport-modezinterface-name)r�con_refrr$r0r4r:r=�LOGZwarning�items�
isinstance�boolrrF�get_connrr?r)r�ifacerZ	_type_mapZif_typeZ
slave_typeZ	_prop_mapZ
device_mtuZipv4_mtur/r#r3Z
nameserverZnm_propr)Zportrrr�render_interface�s��	
�
����






�	
�

��

���zNMConnection.render_interfacecCs(t��}|jj|dd�d}||��S)z
        Stringify.
        F)Zspace_around_delimitersz2# Generated by cloud-init. Changes will be lost.

)�io�StringIOr�write�getvalue)rZbuf�headerrrr�dump>szNMConnection.dumpN)�__name__�
__module__�__qualname__�__doc__rrr$r*r0r4r:r=r?rA�staticmethodrFrWr]rrrrr
s $


r
c@sBeZdZdZddd�Zdd�Zdd�Zd
eee	dd	�d
d�Z
dS)�Rendererz?Renders network information in a NetworkManager keyfile format.NcCs
i|_dS�N��connections)rrrrrrLszRenderer.__init__cCs
|j|Srdre�rrrrrrUOszRenderer.get_conncCs ||jkr|j|��S|SdSrd)rfr?rgrrrrPRs
zRenderer.con_ref)�
network_state�	templates�returncCs�|��D]}t|d�|j|d<q|��D]}|j|d}|�||�q,|j��D].\}}|��shqVt||�}t�||�	�d�qVdS)NrMi�)
Ziter_interfacesr
rfrWrRrA�
conn_filenamerZ
write_filer])rrhri�targetrVZconnrrMrrr�render_network_stateYs	
zRenderer.render_network_state)N)NN)r^r_r`rarrUrPr	r�dictrmrrrrrcIs

��rccCs&t�|t�}d|�d�}|�d|��S)Nzcloud-init-z
.nmconnectionz/system-connections/)r�target_path�
NM_RUN_DIR)rrlZtarget_con_dirZcon_filerrrrkrsrkcCszddlm}tj�tj|td��}tjd|d�}d}|�rjzt�ddd	g�Wntj	k
rhd
}YnX|oxt
|�ox|S)Nr)�uses_systemd)�pathZnmcli)rlTZ	systemctlz
is-enabledzNetworkManager.serviceF)Zcloudinit.distrosrq�osrr�isfilerro�NM_CFG_FILEZwhichZProcessExecutionErrorrT)rlrqZconfig_presentZ
nmcli_presentZservice_activerrr�	availablexs
rv)N)N)rrXr&rsr�typingrZ	cloudinitrZloggingrrZ
cloudinit.netrrrZcloudinit.net.network_stater	rpZ
NM_LIB_DIRruZ	getLoggerr^rQr
rcrkrvrrrr�<module>	s&
0)