HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/cloudinit/net/__pycache__/sysconfig.cpython-310.pyc
o

�Ad.��@sddlZddlZddlZddlZddlmZmZddlmZ	ddlm
Z
mZddlm
Z
mZddlmZmZmZmZmZddlmZe	�e�Zgd�Zdd
d�Zdd
�Zdd�ZGdd�d�ZGdd�de�ZGdd�de�Z Gdd�dej!�Z!dd�Z"ddd�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)�NetworkState)�	almalinux�centos�
cloudlinux�	eurolinux�fedora�miraclelinux�	openEuler�OpenCloudOS�openmandriva�rhel�rocky�suse�	TencentOS�	virtuozzo�#cCsLddg}tdt|��D]}||r|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�

r)cCsd}|ddko
|d|vS)N)z::z0.0.0.0�prefixr�networkr')�route�default_netsr'r'r(�_is_default_route5sr.cCs0t�d|�r|�d�r|�d�r|Sd|S|S)Nz\s�"z"%s")�re�search�
startswith�endswith)�valuer'r'r(�_quote_value:s
r5c@sjeZdZdZddd�Zdd�Zdd�Zd	d
�Zdd�Zd
d�Z	dd�Z
dd�Zdd�Zdd�Z
dd�ZdS)�	ConfigMapz!Sysconfig like dictionary object.�yes�no)TFcCs
i|_dS�N��_conf��selfr'r'r(�__init__N�
zConfigMap.__init__cCs||j|<dSr9r:)r=�keyr4r'r'r(�__setitem__QszConfigMap.__setitem__cCs
|j|Sr9r:�r=r@r'r'r(�__getitem__Tr?zConfigMap.__getitem__cCs|j�|�Sr9)r;�getrBr'r'r(rDWsz
ConfigMap.getcCs
||jvSr9r:rBr'r'r(�__contains__Zr?zConfigMap.__contains__cCs|j�|d�dSr9)r;�poprBr'r'r(�drop]szConfigMap.dropcCs
t|j�Sr9)r"r;r<r'r'r(�__len__`r?zConfigMap.__len__cCsdS)z6Skip the pair key, value if it matches a certain rule.Fr'�r=r@�valr'r'r(�skip_key_valuecszConfigMap.skip_key_valuecCs�t��}|�t��|jr|�d�t|j���D],}|j|}|�||�r'qt|t	�r1|j
|}t|t�s:t|�}|�d|t|�f�q|�
�S)Nr �%s=%s
)�io�StringIO�writer)r;�sorted�keysrK�
isinstance�bool�	_bool_map�strr5�getvalue)r=�bufr@r4r'r'r(�	to_stringgs




zConfigMap.to_stringcCs|j�|�dSr9)r;�update)r=�updatesr'r'r(rYwszConfigMap.updateN)�__name__�
__module__�__qualname__�__doc__rTr>rArCrDrErGrHrKrXrYr'r'r'r(r6Es�r6csReZdZdZ�fdd�Zdd�Zedd��Zedd	��Zd
d�Z	dd
d�Z
�ZS)�Routez!Represents a route configuration.cs<tt|���d|_d|_d|_||_||_||_||_	dS)N�F)
�superr_r>�last_idx�has_set_default_ipv4�has_set_default_ipv6�_route_name�_base_sysconf_dir�route_fn_tpl_ipv4�route_fn_tpl_ipv6)r=�
route_name�base_sysconf_dir�ipv4_tpl�ipv6_tpl��	__class__r'r(r>~s
zRoute.__init__cCs>t|j|j|j|j�}|j��|_|j|_|j|_|j	|_	|Sr9)
r_rerfrgrhr;�copyrbrcrd)r=�rr'r'r(ro�s�z
Route.copycC�|j|j|jd�S�N)�base�name)rgrfrer<r'r'r(�	path_ipv4���zRoute.path_ipv4cCrqrr)rhrfrer<r'r'r(�	path_ipv6�rvzRoute.path_ipv6cCsd|vS)N�:r')r=�addressr'r'r(�
is_ipv6_route�szRoute.is_ipv6_route�ipv4c	Cs�|dvrtdt|���t��}|�t��|jr|�d�d}t|j���D]�}d|vr.q'|�	dd�}t|j|�}t|jd|�}|dkr�|�
|�s�t|jd	|�}|d
}|�ddt|�t|�f�|�ddt|�t|�f�|�dd	t|�t|�f�d|}	|	|jvr�t|jd|�}
|�ddt|�t|
�f�q'|d
kr�|�
|�r�t|jd|���}d||jvr�dt|jd|�nd}
|�d||||
|jf�q'|�
�S)N)r{�ipv6zUnknown protocol '%s'r ����ADDRESSr�GATEWAYr{�NETMASKr`rL�METRICr|�PREFIXzmetric z%s/%s via %s %s dev %s
)�
ValueErrorrUrMrNrOr)r;rPrQ�replacerzr5rerV)r=�protorW�reindexr@�index�
address_value�
gateway_value�
netmask_value�
metric_key�metric_value�prefix_valuer'r'r(rX�st
������
���������zRoute.to_string)r{)r[r\r]r^r>ro�propertyrurwrzrX�
__classcell__r'r'rmr(r_{s


r_cs�eZdZdZdddddd�Z	d�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).�Ethernet�Bond�Bridge�
InfiniBand�Vlan)�ethernet�bond�bridge�
infiniband�vlanr�csrtt|���g|_||_|j�d�}t|||�d�|�d�d�|_|j�d�|_||_	||_
||jd<||_dS)N�route_templatesr{r|)rkrl�iface_templates�DEVICE)
rar�r>�children�	templatesrDr_�routes�iface_fn_tpl�kind�_iface_namer;rf)r=�
iface_namerjr�r��	route_tplrmr'r(r>�s�

zNetInterface.__init__cC�|jSr9)r�r<r'r'r(rt�zNetInterface.namecCs||_||jd<dS)Nr�)r�r;)r=r�r'r'r(rtscCr�r9)�_kindr<r'r'r(r�r�zNetInterface.kindcCs,||jvr	t|��||_|j||jd<dS)N�TYPE)�iface_typesr�r�r;)r=r�r'r'r(r�s
cCrqrr)r�rfrtr<r'r'r(�pathrvzNetInterface.pathFcCsHt|j|j|j|jd�}|j��|_|rt|j�|_|r"|j	��|_	|S)N)r�)
r�rtrfr�r�r;ro�listr�r�)r=�
copy_children�copy_routes�cr'r'r(ro"s�zNetInterface.copycCs|dkr
|dkr
dSdS)Nr�r�TFr'rIr'r'r(rK-szNetInterface.skip_key_value)r�)FF)r[r\r]r^r�r>r�rt�setterr�r�rorKr�r'r'rmr(r��s,�	�





r�c@s*eZdZUdZddddd�ddd�d	�Zd
ddd
ddd�dddddd�d	�Zegd��ZiZe	e
d<d7dd�Zedd��Z
edd��Zedd ��Zed!d"��Zed#d$��Zed%d&��Zed'd(��Zed7d)d*��Zed7d+d,��Zed-d.��Zed/d0��Ze	d7d1d2��Z		d8d3edee	d4dfd5d6�ZdS)9�Rendererz7Renders network information in a /etc/sysconfig format.TF�none)�ONBOOT�USERCTL�
NM_CONTROLLED�	BOOTPROTO�static�auto)r��	STARTMODE)rr�IPV6_FORCE_ACCEPT_RA�STP�AGEING�PRIO�HWADDR�MTU)�	accept-ra�
bridge_stp�
bridge_ageing�bridge_bridgeprio�mac_address�mtu�
BRIDGE_STP�BRIDGE_AGEINGTIME�BRIDGE_PRIORITY�LLADDR)r�r�r�r�r�))�	bond_modezmode=%s)�bond_xmit_hash_policyzxmit_hash_policy=%s)�bond_miimonz	miimon=%s)�bond_min_linkszmin_links=%s)�bond_arp_intervalzarp_interval=%s)�bond_arp_ip_targetzarp_ip_target=%s)�bond_arp_validatezarp_validate=%s)�bond_ad_selectzad_select=%s)�bond_num_grat_arpznum_grat_arp=%s)�bond_downdelayzdowndelay=%s)�bond_updelayz
updelay=%s)�bond_lacp_ratezlacp_rate=%s)�bond_fail_over_maczfail_over_mac=%s)�bond_primaryz
primary=%s)�bond_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)rDr�r�r�r�r�r�)r=�config�nm_conf_pathr'r'r(r>ps ���zRenderer.__init__cCs�t�|j�|i��}|�|�dD]$}|�|�}|dur5|dkr'|ddvr'q|j|�|�}|r5|||<qd|vrJ|drL|ddkrNd|d<dSdSdSdS)	N)r�r�r�r��type)�physicalr��	wakeonlanr�zwol g�ETHTOOL_OPTS)ro�deepcopy�iface_defaultsrDrY�cfg_key_maps)�cls�iface�	iface_cfgr��flavor_defaults�old_key�	old_value�new_keyr'r'r(�_render_iface_shared�s&

���
��zRenderer._render_iface_sharedcCsX|dkrd|d<d|vrd|d<|�d�nd|d<t|t|j�d�D�]V\}}d}|�d	�}|d
ks7|dkrr|dkrP|ddkrFd|d<nd
|d<d
|d<�n|dkri|dkrid|d<d|d<d|d<d|d<n�d|d<d|d<n�|dkr�|dkr�|ddkr�d|d<nd
|d<d|d<n�d|d<d|d<d|d<d|d<n�|dkr�|dkr�|ddkr�d|d<nd
|d<d|d<n�d|d<d|d<n�|dvr�|d}	d|d<|dkr�|dkr�|	d
kr�d|d<n�|dv�rCt|�r�|dkr�d}d|d<d|v�r0t||v�o|d||k�}
|
�rt�d|j	|||d�t|��r*|dk�r#n
|d||<n|d||<t|��rB|dk�rBd|d<d|d<n!|d k�r[|dk�rTt�
d!|�n||v|d"<n	td#||j	f��|�d$�d k�rz|dk�rvd |d%<q#d|d"<q#d&}d&}t|t|j�d�D�] \}}|�d	�}d'|v�r�|dk�r�|d'|d(<|d)v�r�|dk�r�|�r�|ddk�r�d|d*<�q�|tv�rÐq�|dv�r�t|��r|d+}d,|d-|d.f}
|d/k�r�|dk�r�|
|d0<nQ|
|d1<nL|d+k�r|dk�r�|
|d2<n=|
|d3<n8|dk�r|
|d4|<n,|d3d5|
7<n!|d+}|d/k�r%d6nt
|�}|d-|d7|<t|d.�|d8|<d9|v�r]|dk�r]d|d:<t|d9��rW|d9|d;<n|d9|d<<d=|v�rp|dk�rpd5�|d=�|d><d?|v�r�|dk�r�t|d?�d@k�r�t�
dA|j	t|d?��t|d?dd@�d+�D]
\}}||dBt
|�<�q��q�dS)CNrr�r��BRIDGE�dhcpr���startr�r��dhcp6zipv6_dhcpv6-stateful�dhcp4�managed�DHCLIENT6_MODErT�DHCPV6C�IPV6INITF�
IPV6_AUTOCONFzipv6_dhcpv6-stateless�infoz-S�DHCPV6C_OPTIONS�
ipv6_slaac)r�r�)r��static6�IPV6_MTUr�zZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r��manualz Unknown subnet type setting "%s"r�z1Unknown subnet type '%s' found for interface '%s'r�r�r}�metricr��r�r��DHCLIENT_SET_DEFAULT_ROUTEr`z%s/%sryr*r�IPADDR6�IPV6ADDR�	IPADDR6_1�IPV6ADDR_SECONDARIESz
IPADDR6_%drr�IPADDRr��gateway�DEFROUTE�IPV6_DEFAULTGWr�
dns_search�DOMAIN�dns_nameservers�z6%s has %d entries in dns_nameservers. Only 3 are used.�DNS)rG�	enumerater"r�rDr
rS�LOG�warningrt�debugr�r	rUrr
r#)r�r��subnets�has_default_router�r&�subnet�mtu_key�subnet_type�bootproto_in�mtu_mismatch�
ipv4_index�
ipv6_index�	ipv6_cidr�suff�kr'r'r(�_render_subnets�s"
�

��







�


��

�

��

�
















��
���zRenderer._render_subnetsc
Cs>|dkrdSt|t|j�d�D]�\}}|�d�}|�dg�D]}}|�d�p*t|d�}	t|�r||tvr||�d�r;|jsC|�d�rJ|jrJt	d|j
��d	|d
<|ddvrXd	|d
<d|vrq|	rh|d|d<d	|_n	|d|d<d	|_d|vr{|d|d<qdD]\}
}|
|vr�|�|j��}||
||<q~|jd7_qqdS)Nrr�r�r�r|r	r{z?Duplicate declaration of default route found for interface '%s'Tr
r�rrrrrr�))r	r)rr�)r*r�)�netmaskr�)r+r~r`)rr"r�rDr
r.r	rcrdr�rtrb)
r�r��	route_cfgrr��_rrr,�is_ipv6r��new_namer�r'r'r(�_render_subnet_routesesZ
���������	����zRenderer._render_subnet_routesc	Cs�g}|jD].\}}||�dd�g}|D]}||vr2||}t|ttf�r)d�|�}|�||�nqq|rL|dkrCd�|�|d<dSd�|�|d<dSdS)Nr$�-rr�BONDING_MODULE_OPTS�BONDING_OPTS)�
bond_tpl_optsr�rR�tupler�r#�append)	r�r�r�r��	bond_opts�bond_key�	value_tpl�	bond_keys�
bond_valuer'r'r(�_render_bonding_opts�s"
���zRenderer._render_bonding_optsc
Cs^tj}|�|�D]$}|d}|�dg�}||}|j}	|�|||j|�|�||	||�qdS)Nrtr)r�filter_by_physical�iter_interfacesrDr�r!rr')
r��
network_state�iface_contentsr��physical_filterr�r��
iface_subnetsr�r#r'r'r(�_render_physical_interfaces�s ���z$Renderer._render_physical_interfacescs^t�d�}t�d�}|�|�D]�}|d�|�}|�|||�|g}|�|j�|D]
}	d|	d<|dkr8d|	_q+|�d�rQ|dkrJ|�d�|d<n|�d�|d	<|�d
g�}
|j	}|�
||
|j|�|�|||
|�t
�fdd�|�|�D��}t|�D].\}
}|dkr�d
|
}nd|
}|||<||}|dkr�d|d<d|d<q}�|d<d|d<q}qdS)Nr��bond-masterrtT�BONDING_MASTERrr�r��MACADDRrcs g|]}|d�kr|d�qS)r;rtr')�.0�slave_iface�r�r'r(�
<listcomp>�s
��z4Renderer._render_bond_interfaces.<locals>.<listcomp>zBONDING_SLAVE_%szBONDING_SLAVE%sr�r��hotplugr��MASTER�SLAVE)r�filter_by_type�filter_by_attrr5r3�extendr�r�rDr�r!rr'rPr)r�r6r7r��bond_filter�slave_filterr�r��master_cfgs�
master_cfgr9r#�bond_slavesr��
bond_slave�slavestr�	slave_cfgr'r@r(�_render_bond_interfaces�s`

�
��
���



��z Renderer._render_bond_interfacesc
	Cs�t�d�}|�|�D]d}|d}||}|dkr/|�d�}|r#||d<|d|�d��|d<n%d|d	<d|_|d
}	t|	|d�}
||
vrPt�d||	d�	|
��|	|d
<|�dg�}|j
}|�|||j|�|�
||||�q
dS)Nr�rtr�vlan_id�VLAN_ID�.�ETHERDEVICET�VLANzvlan-raw-devicezIName '%s' for vlan '%s' is not officially supportedby RHEL. Supported: %sr�PHYSDEVr)rrEr5rD�rfindr��_supported_vlan_namesrr�r#r�r!rr')
r�r6r7r��vlan_filterr�r�r�rQ�rdev�	supportedr9r#r'r'r(�_render_vlan_interfacessB

����z Renderer._render_vlan_interfacescCs�tt|j�t|j�g�sdSt�d�}|r#tj�|�r#t�t	�
|��}|jD]}|�|�q&|jD]}|�|�q1t
d�}t|�}|�|�sL|d|}|S)Nr�;r )�anyr"r�dns_searchdomainsr�
ResolvConf�osr��isfiler�	load_file�add_nameserver�add_search_domainr)rUr2)r6�existing_dns_path�content�
nameserver�searchdomain�header�content_strr'r'r(�_render_dns9s$��



zRenderer._render_dnscCsPt�d�}|jr|�ddd�t|�dkrdSd�t�dd�|���dg�}|S)Nr�main�dnsr�rr )r�NetworkManagerConfr�set_section_keypairr"r#r)rO)r6r�rg�outr'r'r(�_render_networkmanager_confPs
z$Renderer._render_networkmanager_confcCs|dd�|j|��D�}t�d�}|�|�D]�}|d}||}|dkr'd|_|��D]\}	}
|	|vr9||	||
<q+|dkrPd|vrP|�d�rLd|d<nd|d<|�d	�rdd
}|dkr]d}|�d	�||<|dkrz|�dg�rzd
d�|�d��|d<|�dg�D] }||}
|
g}|�|
j	�|D]}|}|dkr�d}||d<q�q�|�dg�}|j
}|�|||j|�|�
||||�qdS)NcSs i|]\}}|�d�r||�qS)r�)r2)r>�old_k�new_kr'r'r(�
<dictcomp>as��z6Renderer._render_bridge_interfaces.<locals>.<dictcomp>r�rtrr��on�offr�r=�	LLADDRESS�bridge_portsz%sr�BRIDGE_PORTSr7r�r)r��itemsrrEr5r�rDr#rGr�r�r!rr')r�r6r7r��bridge_key_map�
bridge_filterr�r�r�r�r�r@�bridged_iface_name�bridged_cfg�bridged_cfgs�
bridge_cfg�bridge_valuer9r#r'r'r(�_render_bridge_interfaces_sd�
�



�
����z"Renderer._render_bridge_interfacesc
Csht�d�}|�|�D]'}|d}||}d|_|�dg�}|j}	|�|||j|�|�||	||�q
dS)Nr�rtr)	rrEr5r�rDr�r!rr')
r�r6r7r��	ib_filterr�r�r�r9r#r'r'r(�_render_ib_interfaces�s"
���zRenderer._render_ib_interfacescCsH|s|j}i}|��D],}|ddkrq|d}t|||�}|dkr,|�d�|�d�|�|||�|||<q|�|||�|�|||�|�|||�|�|||�|�	|||�i}	|�
�D]@\}}|sj|jr�|��|	|j
<|jD]}|r|��|	|j
<qt|jr�t|jj|jjgddg�D]\}
}|
|	vr�|j�|�|	|
<q�qa|	S)	z3Given state, return /etc/sysconfig files + contentsr��loopbackrtrr�r�r{r|)r�r5r�rGr�r:rPr\r�r�r{r�rXr�r��ziprurw)r�rjr6r�r�r7r�r�r��contents�cpathr�r'r'r(�_render_sysconfig�sF




���zRenderer._render_sysconfigr6�returncCsP|s|j}d}t�||j�}|j|||j|d���D]\}}t�|||�q|j	r@t�||j	�}|j
||d�}	|	r@t�||	|�|jrYt�||j�}
|�||�}|rYt�|
||�|j
ro|�|�}t�||j
�}
t�|
||�t�||�d��}|�d�r�t�tj�|��t�dg}|jr�|�d�|�d�t�|d	�|�d	|�dSdS)
Ni�)r�)rfr�r+zNETWORKING=yeszNETWORKING_IPV6=yeszIPV6_AUTOCONF=nor )r�r�target_pathr�r�r�r{r�
write_filer�rlr�rrr��_render_persistent_netrDr3�
ensure_dirrar��dirnamer)�use_ipv6r-r#)r=r6r��target�	file_moderjr��datar��resolv_contentr��nm_conf_content�netrules_contentr��sysconfig_path�netcfgr'r'r(�render_network_state�sR
�
����




��zRenderer.render_network_stater9)NN)r[r\r]r^r�r�r,r+r��dict�__annotations__r>�classmethodr�r!r'r3r:rPr\�staticmethodrlrrr�r�r�rrr�r'r'r'r(r�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)�rZ�vid)�format�int)r>�vr�r'r(rA
s��z)_supported_vlan_names.<locals>.<listcomp>)z{rdev}{vid:04}z{rdev}{vid}z{rdev}.{vid:04}z{rdev}.{vid}r'r�r'r�r(rXs�rXcCstt��dtvr
dSddg}ddg}|D]
}tj|||d�s!dSqdd	g}|D]}tj�t�||��r7d
Sq(dS)N�variantF�ifup�ifdownz/sbinz	/usr/sbin)r1r�z/etc/sysconfig/network-scripts/network-functionszetc/sysconfig/configT)	r�system_info�
KNOWN_DISTROSr�whichrar�rbr�)r��expectedr1�p�expected_pathsr'r'r(�	availables ���r�)rr9)$rorMrar0�typingrr�	cloudinitr�loggingrr�cloudinit.distros.parsersrr�
cloudinit.netr	r
rrr
�cloudinit.net.network_stater�	getLoggerr[rr�r)r.r5r6r_r�r�rXr�r'r'r'r(�<module>s4


6nJY