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__/DataSourceOVF.cpython-310.pyc
o

�Ad�)�@s�ddlZddlZddlZddlmZddlmZddlmZm	Z	m
Z
mZe�e
�ZGdd�de	j�ZGdd�de�Zdd
d�Zdd
�Zdd�Zd dd�Zdd�Zdd�Zdd�ZGdd�de�Zee	jffee	je	jfffZdd�Zdd�ZdS)!�N)�minidom)�log)�safeyaml�sources�subp�utilc@sLeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	e
dd��ZdS)�
DataSourceOVF�OVFcCsFtj�||||�d|_tj�|jd�|_d|_i|_	d|_
d|_dS)N�ovf)�/zfile://)r�
DataSource�__init__�seed�os�path�join�seed_dir�environment�cfg�supported_seed_starts�_network_config��self�sys_cfg�distro�paths�r�A/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOVF.pyr
s
zDataSourceOVF.__init__cCstj�|�}d||jfS)Nz%s [seed=%s])rr�__str__r)r�rootrrrr#szDataSourceOVF.__str__cCs�g}i}d}d}ddi}t|jj�\}}|r/tj�|jj|�}t|�\}}}	||_|�|�n7dt	fdt
fg}
d}|
D]\}}|�}|rFnq;|rft|d�\}}}	||_d|vra|dra|d|_|�|�t|�dkrnd	Sd
|vr�|d
r�|d
}
d	}|j
D]}|
�|�r�|}nq|s�t�d|
|�d	Stj|
dd�\}}}t�d
|
�t�||g�}|�|
�t�||g�}d�|�|_||_||_||_|	|_dS)N��instance-idz	iid-dsovfzcom.vmware.guestInfo�isoT�network-configrF�seedfromz Seed from %s not supported by %s)�timeoutzUsing seeded cache data from %s�,)�get_ovf_envrrrrr�read_ovf_environmentr�append�transport_vmware_guestinfo�transport_iso9660r�lenr�
startswith�LOG�debugr�read_seeded�
mergemanydictr�metadata�userdata_raw�vendordata_rawr)r�found�md�ud�vd�defaults�seedfile�contentsrr�np�name�	transfuncr$�	seedfound�proto�md_seedrrr�	_get_data'sf���



�
zDataSourceOVF._get_datacCs
d|jS)Nzovf (%s))r�rrrr�_get_subplatformis
zDataSourceOVF._get_subplatformcCs,d|jvrgS|jd}t|t�r|S|gS)N�public-keys)r2�
isinstance�list)r�pksrrr�get_public_ssh_keysls


z!DataSourceOVF.get_public_ssh_keyscC�|jS�N)rrCrrr�get_config_objxszDataSourceOVF.get_config_objcCrJrK)rrCrrr�network_config{szDataSourceOVF.network_configN)�__name__�
__module__�__qualname__�dsnamer
rrBrDrIrL�propertyrMrrrrrs	Brc@seZdZdd�ZdS)�DataSourceOVFNetcCs,t�||||�tj�|jd�|_d|_dS)Nzovf-net)zhttp://zhttps://)rr
rrrrrrrrrr
�s
zDataSourceOVFNet.__init__N)rNrOrPr
rrrrrS�srSFc	Cs�t|�}i}i}d}dg}gd�}dg}|��D]^\}	}
|	dkr"d}	|	|vr+|
||	<q|	|vr4|
||	<q|	|vr[|r[zt�|
���}t|��d�||	<WqtyZt�	d�Yqw|	dkrvz	t�|
���}Wqtyu|
��}Yqwq|||fS)	N�password)r$�local-hostnamerEr!r#�hostnamerU�networkz%Ignore network-config in wrong formatz	user-data)
�get_properties�items�base64�	b64decode�encode�safeload_yaml_or_dict�get�	Exceptionr.r/)r;�read_network�propsr6rr7�	cfg_props�md_props�
network_props�prop�valrMrrrr(�s:

���
r(c	Csfd}|D],}tj�||�}tj�|�r0zt�|�}||fWSty/t�td|�YqwqdS)N)zovf-env.xmlzovf_env.xmlzOVF_ENV.XMLzOVF-ENV.XMLzFailed loading ovf file %s)NF)	rrr�isfiler�	load_filer_�logexcr.)�dirname�	env_names�fname�full_fnr;rrrr'�s
��r'cCs�|sdSt|t�std|��tj�|�}|�d�r!|�d�d}|�d�r.|�d�d}n	|�	d�dkr7dS|s;dSd}tj
�d|�}t�
|�}|�|�d	uS)
z�Test if devname matches known list of devices which may contain iso9660
       filesystems.

    Be helpful in accepting either knames (with no leading /dev/) or full path
    names, but do not allow paths outside of /dev/, like /dev/foo/bar/xxx.
    Fz Unexpected input for devname: %sz/dev/���rrz^(sr[0-9]+|hd[a-z]|xvd.*)�CLOUD_INIT_CDROM_DEV_REGEXN)rF�str�
ValueErrorrr�normpathr-�	partition�split�count�environr^�re�compile�match)�devname�
default_regex�
devname_regex�cdmatchrrr�maybe_cdrom_device�s"



r~Tc
	Cs�t��}|��D]&\}}|d}|dkr|rqt|�sq|d}t|�\}}|dur.|Sq|r4d}nd}dd�t�|rAd|nd�D�}	|	D]'}ztj|t|d�\}}Wntjyft�	d	|�YqHw|duro|SqHdS)
N�fstype�iso9660�
mountpointFcSsg|]}t|�r|�qSr)r~)�.0�devrrr�
<listcomp>�s��z%transport_iso9660.<locals>.<listcomp>zTYPE=%s)�mtypez%s not mountable as iso9660)
r�mountsrYr~r'�find_devs_with�mount_cb�MountFailedErrorr.r/)
�require_isor�r��infor�mp�_fnamer;r��devsrrrr+�s:����r+c
Cs�d}d}t�|�s|S|dg}zt�|�\}}|r|WSt�d||�W|StjyR}z |jdkrGt�d||j�t�|�WYd}~|SWYd}~|Sd}~ww)Nzvmware-rpctoolzinfo-get guestinfo.ovfEnvz%cmd %s exited 0 with empty stdout: %s�z%s exited with code %d)r�whichr.r/�ProcessExecutionError�	exit_code�warning)�rpctool�	not_found�cmd�out�_err�errrr*s(
�

���r*cCs2g}|��s|S|jD]}||�r|�|�q|SrK)�
hasChildNodes�
childNodesr))�node�filter_func�ret�childrrr�
find_childs

�r�c	Cs�t�|�}|jjdkrtd��|j��std��d}t|jdd��}t|�dkr,td��i}t|dd	d��}|D]}|j�	|d
�j
}|j�	|d�j
}|||<q9|S)N�EnvironmentzNo Environment NodezNo Child Nodesz)http://schemas.dmtf.org/ovf/environment/1cS�
|jdkS)N�PropertySection��	localName��nrrr�<lambda>/�
z get_properties.<locals>.<lambda>rzNo 'PropertySection'scSr�)N�Propertyr�r�rrrr�7r��key�value)r�parseString�documentElementr��XmlErrorr�r�r,�
attributes�getNamedItemNSr�)	r;�dom�envNsURI�propSectionsra�	propElems�elemr�rfrrrrX!s(


��
rXc@seZdZdS)r�N)rNrOrPrrrrr�Bsr�cCst�|t�SrK)r�list_from_depends�datasources)�dependsrrr�get_datasource_listNsr�cCs|siSt�|�S)z�
    The meta data could be JSON or YAML. Since YAML is a strict superset of
    JSON, we will unmarshal the data as YAML. If data is None then a new
    dictionary is returned.
    )r�load)�datarrrr]Rs
r])F)T) rZrrw�xml.domr�	cloudinitr�loggingrrrr�	getLoggerrNr.rrrSr(r'r~r+r*r�rXr_r��DEP_FILESYSTEM�DEP_NETWORKr�r�r]rrrr�<module>s,

j
	
)'
!
�