Your IP : 216.73.217.13


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

U

�Ad�2�@s�ddlmZddlmZddlmZddlmZmZddl	m
Z
ddlmZe�
e�ZGdd�d�ZGd	d
�d
e
j�Zddd
�Zed�dd�ZdS)�)�OrderedDict)�Optional)�log)�subp�util)�renderer)�NetworkStatec@s4eZdZdd�Zdd�Zdd�Zdd�Zd	d
�ZdS)�	CfgParserc	Cstggggggid��|_dS)N)�Match�Link�Network�DHCPv4�DHCPv6�Address�Route)r�	conf_dict)�self�r�8/usr/lib/python3/dist-packages/cloudinit/net/networkd.py�__init__s��zCfgParser.__init__cCs`|j��D]P}||kr
|j|�|dt|��tt�|j|��|j|<|j|��q
dS)N�=�r�keys�append�str�list�dict�fromkeys�sort)r�sec�key�val�krrr�update_section#s
zCfgParser.update_sectioncCs�|j��D]|}||kr
||j|kr2g|j||<|j||�|dt|��tt�|j||��|j||<|j||��q
dS)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"rrr�update_route_section+s �zCfgParser.update_route_sectioncCs�d}t|j���D]�\}}|s q|dkr\t|�D](}|d|d7}||d7}|d7}q0q|dkr�t|�D]:}|d|d7}t||�D]}||d7}|d7}q�qlq|d|d7}t|�D]}||d7}q�|d7}q|S)N�r�[z]
�
r)�sortedr�items)r�contentsr"�v�e�nrrr�get_final_conf;s(
zCfgParser.get_final_confcCs6|st�d�dS|��}t�d|�t�||�dS)NzTarget file not givenzFinal content: %s)�LOG�warningr/�debugr�
write_file)rZ	target_fnr+rrr�	dump_dataSs
zCfgParser.dump_dataN)�__name__�
__module__�__qualname__rr#r%r/r4rrrrr	s

r	c@s�eZdZdZddd�Zed�dd�Zed�dd	�Zed�d
d�Zed�dd
�Z	ed�dd�Z
eed�dd�Zed�dd�Z
dd�Zdeeedd�dd�Zeed�dd�ZdS)�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.
    NcCs(|si}|�dd�|_|�dd�|_dS)N�resolve_conf_fnz/etc/systemd/resolved.conf�network_conf_dirz/etc/systemd/network/)�getr9r:)r�configrrrres��zRenderer.__init__)�cfgcCsTd}dddd�}|sdS|��D]*\}}||kr ||r |�||||�q |dS)Nr
�NameZDriverZ
MACAddress)�nameZdriverZmac_addressr?)r*r#)r�ifacer=rZ
match_dictr"r,rrr�generate_match_sectionos�zRenderer.generate_match_sectioncCs2d}|sdSd|kr.|dr.|�|d|d�dS)NrZmtuZMTUBytes)r#)rr@r=rrrr�generate_link_section�s
zRenderer.generate_link_sectionc	Cspd}dddd�}d}d|kr,dt|d�}|��D]6\}}||krFq4|d	krV||7}|�|||||�q4d
S)zy
        Parse a route and use rid as a key in order to isolate the route from
        others in the route dict.
        r�GatewayZDestinationZMetric)�gateway�networkZmetricr&�prefix�/rEN)rr*r%)	rr$�confr=rZ
route_cfg_maprFr"r,rrr�parse_routes�s�zRenderer.parse_routesc	Cs�d}d}d}|�dg�D�]N}|d}|dks6|dkrR|dkrDd}qt|d	krtd
}n"|dkrt|dkrhd	}n|dkrtd
}d|kr�|dr�|dD] }|�d
|��||�|d}q�d|krddddd�}	|��D]�\}
}|
dk�rd|kr�|dt|d�7}|�d|	|
|�q�|
dk�r<|�dd|��|	|
|�|d}q�|
dk�sN|
dkr�|�||	|
d�|��q�q|�|d|�|dk�r�t|�dd �t��r�|�|d!|d�|S)"N�norrZsubnets�typeZdhcp4�dhcpZipv4�ipv6�yesZdhcp6Zroutes�r��addressrrC�DNS�Domains)rQrD�dns_nameservers�
dns_searchrFrGrDr�arTrU� ZDHCP)rMrNz	accept-rar&ZIPv6AcceptRA)	r;rIr*rr#r%�join�
isinstance�bool)rr@r=rLrr$r-�t�iZsubnet_cfg_mapr"r,rrr�
parse_subnets�s^
�

�

�zRenderer.parse_subnetsc	Cs�dD]�}||krqt||���}zt�|�}|r6dnd}Wn,tk
rh|dkrdt�d|�d}YnX|dkrxd}nd}|�|d	|�qdS)
N)�dhcp4domainZdhcp6domainrNrJ�routezInvalid dhcp4domain value - %sr^r
r�
UseDomains)r�casefoldrZtranslate_bool�
ValueErrorr0r1r#)r�dr=�itemZretZsectionrrr�dhcp_domain�s

zRenderer.dhcp_domain)r=�nsc		Cs�d}dddd�}|�d�}|s8|jdkr8|j|jd�}n|sJ|jdkrJdS|��D]0\}}||krR||rR|�||d	�||��qRdS)
NrrSrR)�search�nameserversZ	addresses�dnsrP)rgrh�rW)r;�versionZdns_searchdomainsrTr*r#rX)	rr@r=rfrZdns_cfg_maprir"r,rrr�	parse_dns�s�
�zRenderer.parse_dnsc	Cs�ddddd�}|dkr,|�ddd	d
dd��d
|�d�|kr�|dd|��fkr�|d
|�d�}|��D](\}}||krf|�d|��|||�qfdS)Nzuse-dns�use-domainszuse-hostnamezuse-ntp)ZUseDNSr`ZUseHostnameZUseNTP�4z
send-hostnameZhostnamezroute-metriczuse-mtuz
use-routes)ZSendHostnameZHostnameZRouteMetricZUseMTUZ	UseRoutesrL�
-overridesrNZipvZDHCPv)�updater*r#)	rr=�devicerLrkZdhcp_config_mapsZdhcp_overridesr"r,rrr�parse_dhcp_overrides�s,���
�zRenderer.parse_dhcp_overridescCs>d}t�d|�|d|d}t�||�t�|||�dS)Nzsystemd-networkz Setting Networking Config for %sz10-cloud-init-z.network)r0r2rr3Zchownbyname)r�linkrHZnwk_dirZnet_fn_ownerZnet_fnrrr�create_network_files
zRenderer.create_network_file)�
network_state�	templates�returncCsP|j}|rt�|�|}t�|�|�|�}|��D]\}}|�|||�q4dS�N)r:rZtarget_pathrZ
ensure_dir�_render_contentr*rt)rrurv�targetZnetwork_dir�ret_dictr"r,rrr�render_network_state$s

zRenderer.render_network_state)rfrwcCshi}|��D�]T}t�}|�||�}|�||�|�||�}|�|||�d}|��D] }|�d|��||�|d}qV|jdk�rP|d}	|j	d�
�D]&\}
}d|kr�|�d�|	kr�|
}	q�q�|	|j	dk�rP|j	d|	}|�||�dD]^}
d	|
�d
�|k�r>d|�d	|
�d�i�k�r>|	�d
|
�d|
�d�}t
|��|�||||
�q�|�||��i�q|S)Nr�crPrjr?Z	ethernetszset-name)rn�6rLZdomainrmroz has both dhcpzdomain and dhcpz*-overrides.use-domains configured. Use one)Ziter_interfacesr	rArBr]rlZiter_routesrIrkr<r*r;re�	Exceptionrrrpr/)rrfr{r@r=rsrLr$r_r?Zdev_nameZdev_cfgrqrkZ	exceptionrrrry4sD

����zRenderer._render_content)N)NN)r5r6r7�__doc__rr	rArBrIr]rerrlrrrtrrr|ryrrrrr8]s$

	6��r8NcCs4ddg}ddg}|D]}tj|||d�sdSqdS)NZipZ	systemctlz	/usr/sbinz/bin)rgrzFT)rZwhich)rzZexpectedrg�prrr�	availableosr�)rfcCsti�}|�|�Srx)r8ry)rfrrrr�network_state_to_networkdxsr�)N)�collectionsr�typingrZ	cloudinitrZloggingrrZ
cloudinit.netrZcloudinit.net.network_staterZ	getLoggerr5r0r	r8r�r�rrrr�<module>
s
H