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/sources/__pycache__/DataSourceOpenNebula.cpython-310.pyc
o

�Ad�?�@s�ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZe�
e�ZdZdZdgZGdd�de
j�ZGd	d
�d
e�ZGdd�de�ZGd
d�d�Zdd�Zdd�Z	ddd�Zddd�Zdd�ZeZee
jffgZ dd�Z!dS)�N)�log)�net�sources�subp�utilziid-dsopennebula�nobody�
context.shc@sFeZdZdZdd�Zdd�Zdd�Zdd	�Zed
d��Z	dd
d�Z
dS)�DataSourceOpenNebula�
OpenNebulacCs.tj�||||�d|_tj�|jd�|_dS)N�
opennebula)r�
DataSource�__init__�seed�os�path�join�seed_dir)�self�sys_cfg�distro�paths�r�H/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOpenNebula.pyr
$szDataSourceOpenNebula.__init__cCstj�|�}d||j|jfS)Nz%s [seed=%s][dsmode=%s])rr�__str__r�dsmode)r�rootrrrr)szDataSourceOpenNebula.__str__c
Csldti}d}d}t}d|jvr|j�d�}|jg}|�t��|D]Z}z&tj�	|j�r4t
||j|d�}n|�d�rHt
jt
||jd�}t�||�}Wn%tyRYq!ty_}z|�d}~wtjynt�d|�Ynw|r{|}t�d|�nq!|s�dS|d	}	t�|	|g�}	|�|�d
�|j�d�g�|_|jtjkr�dS||_|�d�|_|	|_|�d
�|_dS)Nzinstance-id�	parseuser��asuserz/dev)rrz%s was not mountablezfound datasource in %sF�metadata�DSMODEr�network-interfaces�userdataT) �DEFAULT_IID�DEFAULT_PARSEUSER�ds_cfg�getr�extend�find_candidate_devsrr�isdir�read_context_disk_dirr�
startswith�	functools�partialr�mount_cb�NonContextDiskDir�BrokenContextDiskDir�MountFailedError�LOG�warning�debug�
mergemanydict�_determine_dsmoderr�DSMODE_DISABLEDr�networkr�userdata_raw)
r�defaults�resultsrr�
candidates�cdev�partially_applied_func�exc�mdrrr�	_get_data-sb
�
������zDataSourceOpenNebula._get_datacCs$|j|jvr	d}nd}d||jfS)z/Return the subplatform metadata source details.zseed-dirzconfig-diskz%s (%s))rr)r�subplatform_typerrr�_get_subplatformjsz%DataSourceOpenNebula._get_subplatformcCs|jdur|jSdS�N)r8)rrrr�network_configrs
z#DataSourceOpenNebula.network_configFcCs.|dur|jtjkr
d}nd}tj�|||�S)NTF)rr�DSMODE_NETWORKr�get_hostname)r�fqdn�
resolve_ip�
metadata_onlyrrrrGys
z!DataSourceOpenNebula.get_hostnameN)FFF)�__name__�
__module__�__qualname__�dsnamer
rrArC�propertyrErGrrrrr	 s=
r	c@�eZdZdS)r/N�rKrLrMrrrrr/��r/c@rP)r0NrQrrrrr0�rRr0c@s�eZdZddd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Zdd�Z	dd�Z
dd�Zdd�Zdd�Z
dd�Zddd�Zdd�ZdS)�OpenNebulaNetworkNcCs|||_|durt|�}t�dd�t|��dd�d�D��|_i|_|��D]\}}t�	d|�}|r;|�
d�|j|��<q%dS)NcSsg|]}|�qSrr��.0�krrr�
<listcomp>�s��z.OpenNebulaNetwork.__init__.<locals>.<listcomp>cSst�|d�S)N�)r�natural_sort_key)rVrrr�<lambda>�sz,OpenNebulaNetwork.__init__.<locals>.<lambda>)�keyz
^(.+)_MAC$rX)�context�get_physical_nics_by_mac�collections�OrderedDict�sorted�items�ifaces�context_devname�re�match�group�lower)rr\r�system_nics_by_macrV�v�mrrrr
�s$�����zOpenNebulaNetwork.__init__cCs"d�dd�|�d�dd�D��S)N�.cSsg|]	}tt|d���qS)�)�str�int)rU�crrrrW�sz,OpenNebulaNetwork.mac2ip.<locals>.<listcomp>�:�)r�split�r�macrrr�mac2ip�s"zOpenNebulaNetwork.mac2ipcCs|�|��d�ddS)Nrkrz.0)ru�
rpartitionrsrrr�mac2network�szOpenNebulaNetwork.mac2networkcCs\i}|�|dd���}|�|j�dd����|r||d<|�|dd���}|r,||d<|S)N�dns��DNS�	addresses�
search_domain�search)�	get_fieldrrr'r\r&)r�dev�nameserversrxr|rrr�get_nameservers�sz!OpenNebulaNetwork.get_nameserverscC�|�|d�S)N�mtu�r~�rrrrr�get_mtu��zOpenNebulaNetwork.get_mtucC�|�|d|�|��S)N�ip)r~ru�rrrtrrr�get_ip��zOpenNebulaNetwork.get_ipcCs<g}|�|d�}|r|�|�|�|d�}|r|�|�|S)N�ip6�ip6_ula)r~�append)rr�
addresses6r�r�rrr�get_ip6�s

zOpenNebulaNetwork.get_ip6cC�|�|dd�S)N�ip6_prefix_length�64r�r�rrr�get_ip6_prefix��z OpenNebulaNetwork.get_ip6_prefixcCr�)N�gatewayr�r�rrr�get_gateway�r�zOpenNebulaNetwork.get_gatewaycCs|�|d|�|d��S)N�ip6_gateway�gateway6r�r�rrr�get_gateway6�s�zOpenNebulaNetwork.get_gateway6cCr�)N�maskz
255.255.255.0r�r�rrr�get_mask�r�zOpenNebulaNetwork.get_maskcCr�)Nr8)r~rwr�rrr�get_network�r�zOpenNebulaNetwork.get_networkcCs*|j�d�||f����}|dvr|S|S)z�return the field name in context for device dev.

        context stores <dev>_<NAME> (example: eth0_DOMAIN).
        an empty string for value will return default.�_)Nry)r\r&r�upper)rr�name�default�valrrrr~�s���	zOpenNebulaNetwork.get_fieldcs0i}d|d<i|d<i}|j��D]�\}}|��}|j�||�}i}d|i|d<g|d<|�|�}tt�|��}|d�	|�
||�d|�|�|�}	|	ra|�|��|d�
�fdd	�|	D��|�|�}
|
rl|
|d
<|�|�}|rw||d<|�|�}|r�||d<|�|�}
|
r�|
|d
<|||<q||d<|S)Nrq�version�	ethernets�
macaddressrer{�/csg|]}|d��qS)r�r)rU�i��prefix6rrrWsz.OpenNebulaNetwork.gen_conf.<locals>.<listcomp>�gateway4r�r�r�)rbrargrcr&r�rmr�ipv4_mask_to_net_prefixr�r�r�r�r'r�r�r�r�)r�netconfr�rtr�c_dev�devconfr��prefixr�r�r�r�r�rr�r�gen_conf�sD


�




zOpenNebulaNetwork.gen_confrD)rKrLrMr
rurwr�r�r�r�r�r�r�r�r�r~r�rrrrrS�s


rScCs@g}dD]}t�|�}|��|D]}||vr|�|�qq|S)zE
    Return a list of devices that may contain the context disk.
    )z
LABEL=CONTEXTzLABEL=CDROMzTYPE=iso9660)r�find_devs_with�sortr�)�combined�f�devs�drrrr( s

��r(cCs
dd|gS)N�sudoz-ur��userrrr�switch_user_cmd/s
r�c	Csrt|t�r	|g}n|durddg}|durt}dd�tjdD�}|}|dur+|}g}d�d�}dd	�}d
|||�d|d
||�d}	g}
|durR||�}
|
�|�tj|
|	d�\}}d
}
i}i}d}|dd�}|�d�D]C}z&|�dd�\}}||ur�|||<n||
vr�||vs�|�	|�|kr�|||<Wqst
y�|dkr��|dur�|}n||ur�|}Yqsw|S)N�bashz-ecSsg|]}d|�qS)z${!%s*}r)rU�xrrrrWAsz&parse_shell_config.<locals>.<listcomp>r��
)z__v="";rycSsd�ddd�|�dddf�S)Nr�zprintf "%s\0" _start_zfor __v in %s; do� z%   printf "%s=%s\0" "$__v" "${!__v}";�donery)r)�vlistrrr�
varprinterOs��z&parse_shell_config.<locals>.varprinterz
unset IFS
z{
%s

:
} > /dev/null
)�data)�
EPOCHREALTIME�EPOCHSECONDS�RANDOM�LINENO�SECONDSr��SRANDOM�__vr�����=rX�_start_)�
isinstancermr��string�
ascii_lettersrr'rrrr&�
ValueError)�content�keylistr�r�switch_user_cb�allvars�
keylist_in�setupr��bcmd�cmd�output�_error�excluded�preset�ret�target�liner[r�rrr�parse_shell_config3sz
��������



�����r�c
CsJi}tD]}tj�||�}tj�|�r|||<q|s"td|df��i}did�}d|vr�|durNzt�|�WntyM}z	t	dj
|d��|�d}~wwztj�|d�}	t�|	�}
t
|
|d�}Wn*tjyv}zt	d	|�|�d}~wty�}ztd
|�|�d}~wwtd��|s�|S||d<d}d
|vr�d
}nd|vr�d}|r�|�|���}dd�|D�|dd<dD]}
|
|vr�||
|dd<nq�d|vr�|d|d<n
d|vr�|d|d<d|v�r|�d|�d��}|dk�rzt�|d�|d<Wnt�y
t�d�Ynwdd�|D�}|�r#t||�}|��|d<|S)z�
    read_context_disk_dir(source_dir):
    read source_dir and return a tuple with metadata dict and user-data
    string populated.  If not a valid dir, raise a NonContextDiskDir
    z%s: %szno files foundN)r"rrz'configured user '{user}' does not existr�rzError processing context.sh: %szError reading context.sh: %szMissing context.shr�SSH_KEY�SSH_PUBLIC_KEYcSs"g|]
}t|�r|�d�s|�qS)�#)�lenr+)rUr�rrrrW�s���z)read_context_disk_dir.<locals>.<listcomp>zpublic-keys)�SET_HOSTNAME�HOSTNAME�	PUBLIC_IP�	IP_PUBLIC�ETH0_IPzlocal-hostname�	USER_DATAr"�USERDATA�USERDATA_ENCODING�USER_DATA_ENCODING�base64z"Failed base64 decoding of userdatacSsg|]
}t�d|�r|�qS)z
^ETH\d+_IP.*$)rdrerTrrrrW�sr!)�CONTEXT_DISK_FILESrrr�isfiler/�pwd�getpwnam�KeyErrorr0�formatr�	load_filer�r�ProcessExecutionError�IOErrorr&�
splitlines�b64d�	TypeErrorr2r3rSr�)�
source_dirrr�found�af�fnr\r;�err��ssh_key_var�linesrV�encoding�ipaddr_keys�onetrrrr*�s��
�����
���������

�
�
r*cs"t��}t�fdd�|��D��S)Ncs$g|]\}}�j�|�r||f�qSr)�
networking�is_physical)rUrj�n�rrrrWs$z,get_physical_nics_by_mac.<locals>.<listcomp>)r�get_interfaces_by_mac�dictra)rr�rr
rr]�s�r]cCst�|t�SrD)r�list_from_depends�datasources)�dependsrrr�get_datasource_listr�r)NNNNrD)"r^r,rr�rdr��	cloudinitr�loggingrrrr�	getLoggerrKr2r#r$r�rr	�	Exceptionr/r0rSr(r�r�r*r]�DataSourceOpenNebulaNet�DEP_FILESYSTEMrrrrrr�<module>s6
b
�
k`
�