Your IP : 216.73.217.13


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

U

�Ad.��@sddlZddlZddlZddlZddlmZmZddlmZ	ddlm
Z
mZddlm
Z
mZddlmZmZmZmZmZddlmZe	�e�Zdd	d
ddd
ddddddddgZd)dd�Zdd�Zdd�ZGdd�d�ZGdd �d e�ZGd!d"�d"e�Z Gd#d$�d$ej!�Z!d%d&�Z"d*d'd(�Z#dS)+�N)�Mapping�Optional)�log)�subp�util)�networkmanager_conf�resolv_conf)�IPV6_DYNAMIC_TYPES�is_ipv6_address�net_prefix_to_ipv4_mask�renderer�subnet_is_ipv6)�NetworkStateZ	almalinuxZcentosZ
cloudlinuxZ	eurolinuxZfedoraZmiraclelinuxZ	openEulerZOpenCloudOSZopenmandriva�rhelZrocky�suseZ	TencentOSZ	virtuozzo�#cCsLddg}tdt|��D]*}||r8|d||||<q|||<qd�|�S)NzBCreated by cloud-init on instance boot automatically, do not edit.�r� �
)�range�len�join)�sep�lines�i�r�9/usr/lib/python3/dist-packages/cloudinit/net/sysconfig.py�_make_header(s�
rcCsd}|ddko|d|kS)N)z::z0.0.0.0�prefixr�networkr)�routeZdefault_netsrrr�_is_default_route5sr!cCs6t�d|�r.|�d�r$|�d�r$|Sd|Sn|SdS)Nz\s�"z"%s")�re�search�
startswith�endswith)�valuerrr�_quote_value:s

r(c@sjeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�	ConfigMapz!Sysconfig like dictionary object.�yesZno)TFcCs
i|_dS�N��_conf��selfrrr�__init__NszConfigMap.__init__cCs||j|<dSr+r,)r/�keyr'rrr�__setitem__QszConfigMap.__setitem__cCs
|j|Sr+r,�r/r1rrr�__getitem__TszConfigMap.__getitem__cCs|j�|�Sr+)r-�getr3rrrr5Wsz
ConfigMap.getcCs
||jkSr+r,r3rrr�__contains__ZszConfigMap.__contains__cCs|j�|d�dSr+)r-�popr3rrr�drop]szConfigMap.dropcCs
t|j�Sr+)rr-r.rrr�__len__`szConfigMap.__len__cCsdS)z6Skip the pair key, value if it matches a certain rule.Fr�r/r1�valrrr�skip_key_valuecszConfigMap.skip_key_valuecCs�t��}|�t��|jr$|�d�t|j���D]X}|j|}|�||�rNq2t|t	�rb|j
|}t|t�stt|�}|�d|t|�f�q2|�
�S)Nr�%s=%s
)�io�StringIO�writerr-�sorted�keysr<�
isinstance�bool�	_bool_map�strr(�getvalue)r/�bufr1r'rrr�	to_stringgs




zConfigMap.to_stringcCs|j�|�dSr+)r-�update)r/ZupdatesrrrrJwszConfigMap.updateN)�__name__�
__module__�__qualname__�__doc__rEr0r2r4r5r6r8r9r<rIrJrrrrr)Es�r)csReZdZdZ�fdd�Zdd�Zedd��Zedd	��Zd
d�Z	dd
d�Z
�ZS)�Routez!Represents a route configuration.cs<tt|���d|_d|_d|_||_||_||_||_	dS)N�F)
�superrOr0�last_idx�has_set_default_ipv4�has_set_default_ipv6�_route_name�_base_sysconf_dir�route_fn_tpl_ipv4�route_fn_tpl_ipv6)r/Z
route_name�base_sysconf_dir�ipv4_tpl�ipv6_tpl��	__class__rrr0~szRoute.__init__cCs>t|j|j|j|j�}|j��|_|j|_|j|_|j	|_	|Sr+)
rOrUrVrWrXr-�copyrRrSrT)r/�rrrrr^�s�z
Route.copycCs|j|j|jd�S�N)�base�name)rWrVrUr.rrr�	path_ipv4�s�zRoute.path_ipv4cCs|j|j|jd�Sr`)rXrVrUr.rrr�	path_ipv6�s�zRoute.path_ipv6cCsd|kS)N�:r)r/�addressrrr�
is_ipv6_route�szRoute.is_ipv6_route�ipv4c	Cs�|dkrtdt|���t��}|�t��|jr<|�d�d}t|j���D�]t}d|kr^qN|�	dd�}t|j|�}t|jd|�}|dk�rZ|�
|��sZt|jd	|�}|d
}|�ddt|�t|�f�|�ddt|�t|�f�|�dd	t|�t|�f�d|}	|	|jk�r�t|jd|�}
|�ddt|�t|
�f�qN|d
krN|�
|�rNt|jd|���}d||jk�r�dt|jd|�nd}
|�d||||
|jf�qN|�
�S)N)rh�ipv6zUnknown protocol '%s'r����ADDRESSr�GATEWAYrh�NETMASKrPr=�METRICri�PREFIXzmetric z%s/%s via %s %s dev %s
)�
ValueErrorrFr>r?r@rr-rArB�replacergr(rUrG)r/�protorHZreindexr1�indexZ
address_valueZ
gateway_valueZ
netmask_valueZ
metric_keyZmetric_valueZprefix_valuerrrrI�sp
�������������zRoute.to_string)rh)rKrLrMrNr0r^�propertyrcrdrgrI�
__classcell__rrr\rrO{s



rOcs�eZdZdZdddddd�Zd�fd	d
�	Zedd��Zejd
d��Zedd��Z	e	jdd��Z	edd��Z
ddd�Zdd�Z�Z
S)�NetInterfacezERepresents a sysconfig/networking-script (and its config + children).ZEthernetZBondZBridgeZ
InfiniBand�Vlan)�ethernet�bond�bridge�
infiniband�vlanrxcsrtt|���g|_||_|j�d�}t|||�d�|�d�d�|_|j�d�|_||_	||_
||jd<||_dS)N�route_templatesrhri)rZr[�iface_templates�DEVICE)
rQrvr0�children�	templatesr5rO�routes�iface_fn_tpl�kind�_iface_namer-rV)r/�
iface_namerYr�r�Z	route_tplr\rrr0�s�
zNetInterface.__init__cCs|jSr+)r�r.rrrrbszNetInterface.namecCs||_||jd<dS)Nr)r�r-)r/r�rrrrbscCs|jSr+)�_kindr.rrrr�szNetInterface.kindcCs,||jkrt|��||_|j||jd<dS)N�TYPE)�iface_typesrpr�r-)r/r�rrrr�s
cCs|j|j|jd�Sr`)r�rVrbr.rrr�paths�zNetInterface.pathFcCsHt|j|j|j|jd�}|j��|_|r4t|j�|_|rD|j	��|_	|S)N)r�)
rvrbrVr�r�r-r^�listr�r�)r/Z
copy_childrenZcopy_routes�crrrr^"s�zNetInterface.copycCs|dkr|dkrdSdS)Nr�rwTFrr:rrrr<-szNetInterface.skip_key_value)rx)FF)rKrLrMrNr�r0rtrb�setterr�r�r^r<rurrr\rrv�s*�	�





rvc@s:eZdZUdZddddd�ddd�d	�Zd
ddd
ddd�dddddd�d	�Zeddddddddddd d!d"d#d$g�ZiZe	e
d%<dDd'd(�Zed)d*��Z
ed+d,��Zed-d.��Zed/d0��Zed1d2��Zed3d4��Zed5d6��ZedEd7d8��ZedFd9d:��Zed;d<��Zed=d>��ZedGd?d@��ZdHeee	d&dA�dBdC�Zd&S)I�Rendererz7Renders network information in a /etc/sysconfig format.TF�none)�ONBOOTZUSERCTLZ
NM_CONTROLLED�	BOOTPROTO�static�auto)r��	STARTMODE)rr�IPV6_FORCE_ACCEPT_RAZSTPZAGEINGZPRIOZHWADDR�MTU)�	accept-ra�
bridge_stp�
bridge_ageing�bridge_bridgeprio�mac_address�mtu�
BRIDGE_STPZBRIDGE_AGEINGTIMEZBRIDGE_PRIORITY�LLADDR)r�r�r�r�r�)Z	bond_modezmode=%s)Zbond_xmit_hash_policyzxmit_hash_policy=%s)Zbond_miimonz	miimon=%s)Zbond_min_linkszmin_links=%s)Zbond_arp_intervalzarp_interval=%s)Zbond_arp_ip_targetzarp_ip_target=%s)Zbond_arp_validatezarp_validate=%s)Zbond_ad_selectzad_select=%s)Zbond_num_grat_arpznum_grat_arp=%s)Zbond_downdelayzdowndelay=%s)Zbond_updelayz
updelay=%s)Zbond_lacp_ratezlacp_rate=%s)Zbond_fail_over_maczfail_over_mac=%s)Zbond_primaryz
primary=%s)Zbond_primary_reselectzprimary_reselect=%sr�NcCsv|si}|�dd�|_|�dd�|_|�dd�|_d}|�d|�|_|�d	�|�d
�|�d�d�|_|�d
d�|_dS)N�sysconf_dirz
etc/sysconfig�
netrules_pathz(etc/udev/rules.d/70-persistent-net.rules�dns_pathzetc/resolv.confz,etc/NetworkManager/conf.d/99-cloud-init.conf�networkmanager_conf_path�controlr~r})r�r~r}�flavorr)r5r�r�r�r�r�r�)r/Zconfig�nm_conf_pathrrrr0ps$���zRenderer.__init__cCs�t�|j�|i��}|�|�dD]H}|�|�}|dk	r"|dkrN|ddkrNq"|j|�|�}|r"|||<q"d|kr�|dr�|ddkr�d|d<dS)	N)r�r�r�r��type)�physicalr{Z	wakeonlanr�zwol gZETHTOOL_OPTS)r^�deepcopy�iface_defaultsr5rJ�cfg_key_maps)�cls�iface�	iface_cfgr�Zflavor_defaults�old_key�	old_value�new_keyrrr�_render_iface_shared�s"


��
�zRenderer._render_iface_sharedcCs||dkr,d|d<d|kr4d|d<|�d�nd|d<t|t|j�d�D�]�\}}d}|�d	�}|d
ksn|dkr�|dkr�|ddkr�d|d<nd
|d<d
|d<nB|dkr�|dkr�d|d<d|d<d|d<d|d<nd|d<d|d<�n|dk�rF|dk�r"|ddk�rd|d<nd
|d<d|d<n d|d<d|d<d|d<d|d<�n�|dk�r�|dk�r�|ddk�rrd|d<nd
|d<d|d<nd|d<d|d<�nN|dk�r�|d}	d|d<|dk�r�|dk�r�|	d
k�r�d|d<�n
|dk�r�t|��r|dk�rd}d|d<d|k�r~t||k�o*|d||k�}
|
�rNt�d|j	|||d�t|��rr|dk�rdn|d||<n|d||<t|��r�|dk�r�d|d<d|d<nB|d k�r�|dk�r�t�
d!|�n||k|d"<ntd#||j	f��|�d$�d krF|dk�rd |d%<qFd|d"<qFd&}d&}t|t|j�d�D�]H\}}|�d	�}d'|k�r`|dk�r`|d'|d(<|d)k�r�|dk�r,|�r,|ddk�r,d|d*<�q,�q,|tk�r��q,�q,|dk�r,t|��rX|d+}d,|d-|d.f}
|d/k�r|dk�r�|
|d0<n|
|d1<nT|d+k�r*|dk�r |
|d2<n|
|d3<n,|dk�rB|
|d4|<n|d3d5|
7<nB|d+}|d/k�rnd6nt
|�}|d-|d7|<t|d.�|d8|<d9|k�r�|dk�r�d|d:<t|d9��r�|d9|d;<n|d9|d<<d=|k�r|dk�rd5�|d=�|d><d?|k�r,|dk�r,t|d?�d@k�rBt�
dA|j	t|d?��t|d?dd@�d+�D]\}}||dBt
|�<�qX�q,dS)CNrr�r��BRIDGE�dhcpr���startr�r�Zdhcp6zipv6_dhcpv6-stateful�dhcp4ZmanagedZDHCLIENT6_MODErTZDHCPV6CZIPV6INITFZ
IPV6_AUTOCONFzipv6_dhcpv6-stateless�infoz-SZDHCPV6C_OPTIONSZ
ipv6_slaac)r�r�)r�Zstatic6ZIPV6_MTUr�zZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r�Zmanualz Unknown subnet type setting "%s"r�z1Unknown subnet type '%s' found for interface '%s'r�r�rj�metricrn�r�r��DHCLIENT_SET_DEFAULT_ROUTErPz%s/%srfrrZIPADDR6ZIPV6ADDRZ	IPADDR6_1ZIPV6ADDR_SECONDARIESz
IPADDR6_%drrZIPADDRrm�gateway�DEFROUTE�IPV6_DEFAULTGWrlZ
dns_searchZDOMAIN�dns_nameservers�z6%s has %d entries in dns_nameservers. Only 3 are used.ZDNS)r8�	enumeraterr�r5r
rD�LOGZwarningrb�debugrpr	rFrr
r)r�r��subnets�has_default_router�r�subnetZmtu_key�subnet_typeZbootproto_inZmtu_mismatchZ
ipv4_indexZ
ipv6_indexZ	ipv6_cidrZsuff�krrr�_render_subnets�s


��













��




��



















��
�zRenderer._render_subnetsc
Cs@|dkrdSt|t|j�d�D�]\}}|�d�}|�dg�D]�}|�d�pVt|d�}	t|�r�|tkr�|�d�rx|js�|�d�r�|jr�t	d|j
��d	|d
<|ddkr�d	|d
<d|kr�|	r�|d|d<d	|_n|d|d<d	|_d|kr�|d|d<q>dD]*\}
}|
|kr�|�|j��}||
||<q�|jd7_q>qdS)Nrr�r�r�rir�rhz?Duplicate declaration of default route found for interface '%s'Tr�r�r�r�r�rlr�rn))r�rl)r�rn)rro)Znetmaskrm)rrkrP)r�rr�r5r
r!r	rSrTrprbrR)
r�r��	route_cfgr�r��_r�r�r Zis_ipv6r��new_namer�rrr�_render_subnet_routesesR
���������	zRenderer._render_subnet_routesc	Cs�g}|jD]\\}}||�dd�g}|D]>}||kr&||}t|ttf�rRd�|�}|�||�q
q&q
|r�|dkr�d�|�|d<nd�|�|d<dS)Nr��-rrZBONDING_MODULE_OPTSZBONDING_OPTS)�
bond_tpl_optsrqrC�tupler�r�append)	r�r�r�r�Z	bond_optsZbond_keyZ	value_tplZ	bond_keysZ
bond_valuerrr�_render_bonding_opts�s
zRenderer._render_bonding_optsc
Cs^tj}|�|�D]H}|d}|�dg�}||}|j}	|�|||j|�|�||	||�qdS)Nrbr�)rZfilter_by_physical�iter_interfacesr5r�r�r�r�)
r��
network_state�iface_contentsr�Zphysical_filterr�r��
iface_subnetsr�r�rrr�_render_physical_interfaces�s$��z$Renderer._render_physical_interfacescsdt�d�}t�d�}|�|�D�]>}|d�|�}|�|||�|g}|�|j�|D]}	d|	d<|dkrXd|	_qX|�d�r�|dkr�|�d�|d<n|�d�|d	<|�d
g�}
|j	}|�
||
|j|�|�|||
|�t
�fdd�|�|�D��}t|�D]`\}
}|dk�rd
|
}nd|
}|||<||}|dk�rLd|d<d|d<q��|d<d|d<q�qdS)Nry�bond-masterrbTZBONDING_MASTERrr�r��MACADDRr�cs g|]}|d�kr|d�qS)r�rbr)�.0Zslave_iface�r�rr�
<listcomp>�s�z4Renderer._render_bond_interfaces.<locals>.<listcomp>zBONDING_SLAVE_%szBONDING_SLAVE%sr�r�Zhotplugr�ZMASTERZSLAVE)r�filter_by_typeZfilter_by_attrr�r��extendr�r�r5r�r�r�r�rAr�)r�r�r�r�Zbond_filterZslave_filterr�r�Zmaster_cfgsZ
master_cfgr�r�Zbond_slavesrsZ
bond_slaveZslavestrZ	slave_cfgrr�r�_render_bond_interfaces�s`


��
���




z Renderer._render_bond_interfacesc
	Cs�t�d�}|�|�D]�}|d}||}|dkr^|�d�}|rF||d<|d|�d��|d<nJd|d	<d|_|d
}	t|	|d�}
||
kr�t�d||	d�	|
��|	|d
<|�dg�}|j
}|�|||j|�|�
||||�qdS)Nr|rbr�vlan_idZVLAN_ID�.ZETHERDEVICETZVLANzvlan-raw-devicezIName '%s' for vlan '%s' is not officially supportedby RHEL. Supported: %srZPHYSDEVr�)rr�r�r5�rfindr��_supported_vlan_namesr�r�rr�r�r�r�)
r�r�r�r�Zvlan_filterr�r�r�r��rdevZ	supportedr�r�rrr�_render_vlan_interfacessF

���z Renderer._render_vlan_interfacescCs�tt|j�t|j�g�sdSt�d�}|rFtj�|�rFt�t	�
|��}|jD]}|�|�qL|jD]}|�|�qbt
d�}t|�}|�|�s�|d|}|S)Nr�;r)�anyrr�Zdns_searchdomainsrZ
ResolvConf�osr��isfilerZ	load_fileZadd_nameserverZadd_search_domainrrFr%)r��existing_dns_path�contentZ
nameserverZsearchdomain�headerZcontent_strrrr�_render_dns9s$��



zRenderer._render_dnscCsPt�d�}|jr|�ddd�t|�dkr.dSd�t�dd�|���dg�}|S)Nr�mainZdnsr�rr)rZNetworkManagerConfr�Zset_section_keypairrrrr@)r�r�r��outrrr�_render_networkmanager_confPs
z$Renderer._render_networkmanager_confcCs�dd�|j|��D�}t�d�}|�|�D�]P}|d}||}|dkrPd|_|��D]\}	}
|	|krX||	||
<qX|dkr�d|kr�|�d�r�d|d<nd|d<|�d	�r�d
}|dkr�d}|�d	�||<|dkr�|�dg�r�d
d�|�d��|d<|�dg�D]F}||}
|
g}|�|
j	�|D] }|}|dk�r:d}||d<�q$�q|�dg�}|j
}|�|||j|�|�
||||�q,dS)NcSs i|]\}}|�d�r||�qS)rz)r%)r�Zold_kZnew_krrr�
<dictcomp>as
�z6Renderer._render_bridge_interfaces.<locals>.<dictcomp>rzrbrr�ZonZoffr�r�Z	LLADDRESSZbridge_portsz%srZBRIDGE_PORTSr*r�r�)r��itemsrr�r�r�r5rr�r�r�r�r�r�)r�r�r�r�Zbridge_key_mapZ
bridge_filterr�r�r�r�r�r1Zbridged_iface_nameZbridged_cfgZbridged_cfgsZ
bridge_cfgZbridge_valuer�r�rrr�_render_bridge_interfaces_sd�



�

��z"Renderer._render_bridge_interfacesc
Csht�d�}|�|�D]N}|d}||}d|_|�dg�}|j}	|�|||j|�|�||	||�qdS)Nr{rbr�)	rr�r�r�r5r�r�r�r�)
r�r�r�r�Z	ib_filterr�r�r�r�r�rrr�_render_ib_interfaces�s&
��zRenderer._render_ib_interfacescCsN|s
|j}i}|��D]X}|ddkr(q|d}t|||�}|dkrX|�d�|�d�|�|||�|||<q|�|||�|�|||�|�|||�|�|||�|�	|||�i}	|�
�D]�\}}|s�|j�r|��|	|j
<|jD]}|r�|��|	|j
<q�|jr�t|jj|jjgddg�D]$\}
}|
|	k�r"|j�|�|	|
<�q"q�|	S)	z3Given state, return /etc/sysconfig files + contentsr�Zloopbackrbrrr�rhri)r�r�rvr8r�r�r�r�r�r�r�r�rIr�r��ziprcrd)r�rYr�r�r�r�r�r�r��contentsZcpathrrrrr�_render_sysconfig�sB



�
zRenderer._render_sysconfig)r�r��returncCsP|s
|j}d}t�||j�}|j|||j|d���D]\}}t�|||�q4|j	r�t�||j	�}|j
||d�}	|	r�t�||	|�|jr�t�||j�}
|�||�}|r�t�|
||�|j
r�|�|�}t�||j
�}
t�|
||�t�||�d��}|�d��rLt�tj�|��t�dg}|j�r4|�d�|�d�t�|d	�|�d	|�dS)
Ni�)r�)r�r�rzNETWORKING=yeszNETWORKING_IPV6=yeszIPV6_AUTOCONF=nor)r�r�target_pathr�r�r�r�rZ
write_filer�r�r�r�r�Z_render_persistent_netr5r&Z
ensure_dirr�r��dirnamerZuse_ipv6r�r)r/r�r��targetZ	file_moderYr��datar�Zresolv_contentr�Znm_conf_contentZnetrules_contentr�Zsysconfig_pathZnetcfgrrr�render_network_state�s\����



�zRenderer.render_network_state)N)N)N)N)NN)rKrLrMrNr�r�r�r�r��dict�__annotations__r0�classmethodr�r�r�r�r�r�r��staticmethodr�r�r�r�r�rrr�rrrrr�3s�
	���	����


H
=


>
&
<
�*��r�cs��fdd�dD�S)ziReturn list of supported names for vlan devices per RHEL doc
    11.5. Naming Scheme for VLAN Interfaces.csg|]}|j�t��d��qS)�r�Zvid)�format�int)r��vrrrr�
s�z)_supported_vlan_names.<locals>.<listcomp>)z{rdev}{vid:04}z{rdev}{vid}z{rdev}.{vid:04}z{rdev}.{vid}rrrrrr�s�r�cCstt��dtkrdSddg}ddg}|D]}tj|||d�s(dSq(dd	g}|D]}tj�t�||��rPd
SqPdS)NZvariantFZifupZifdownz/sbinz	/usr/sbin)r$r�z/etc/sysconfig/network-scripts/network-functionszetc/sysconfig/configT)	rZsystem_info�
KNOWN_DISTROSrZwhichr�r�r�r�)r�Zexpectedr$�pZexpected_pathsrrr�	availables�r)r)N)$r^r>r�r#�typingrrZ	cloudinitrZloggingrrZcloudinit.distros.parsersrrZ
cloudinit.netr	r
rrr
Zcloudinit.net.network_staterZ	getLoggerrKr�rrr!r(r)rOrvr�r�rrrrr�<module>sN
�

6nJY