HEX
Server: Apache
System: Linux scp1.abinfocom.com 5.4.0-216-generic #236-Ubuntu SMP Fri Apr 11 19:53:21 UTC 2025 x86_64
User: confeduphaar (1010)
PHP: 8.1.33
Disabled: exec,passthru,shell_exec,system
Upload Files
File: //usr/lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceOVF.cpython-38.pyc
U

Ӈg�2�@sdZddlZddlZddlZddlZddlmZddlZddlm	Z	m
Z
mZe�e
�ZGdd�de	j�ZGdd�de�Zd#d
d�Zdd
�Zdd�Zd$dd�Zdd�Zdd�Zdd�Zdd�Zdd�ZGdd�de�Zee	jffee	je	jfffZdd �Z d!d"�Z!dS)%zZCloud-Init DataSource for OVF

This module provides a cloud-init datasource for OVF data.
�N)�minidom)�sources�subp�utilc@sLeZdZdZdd�Zdd�Zdd�Zdd	�Zd
d�Zdd
�Z	e
dd��ZdS)�
DataSourceOVFZOVFcCsFtj�||||�d|_tj�|jd�|_d|_i|_	d|_
d|_dS)NZovf)�/zfile://)r�
DataSource�__init__�seed�os�path�join�seed_dir�environment�cfg�supported_seed_starts�_network_config��selfZsys_cfgZdistro�paths�r�A/usr/lib/python3/dist-packages/cloudinit/sources/DataSourceOVF.pyr	 szDataSourceOVF.__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|�\}}}	||_|�|�nndt	fdt
fg}
d}|
D]\}}|�}|rvq�qv|r�t|d�\}}}	||_d|kr�|dr�|d|_|�|�t|�dkr�d	Sd
|k�rr|d
�rr|d
}
d	}|j
D]}|
�|��r|}�q �q|�s8t�d|
|�d	Stj|
dd�\}}}}t�d
|
�t�||g�}|�|
�t�||g�}d�|�|_||_||_||_|	|_dS)N��instance-idz	iid-dsovfzcom.vmware.guestInfoZisoT�network-configrF�seedfromz Seed from %s not supported by %s)ZtimeoutzUsing seeded cache data from %s�,)�get_ovf_envrrrrr
�read_ovf_environmentr�append�transport_vmware_guestinfo�transport_iso9660r�lenr�
startswith�LOG�debugrZread_seededZ
mergemanydictr
�metadataZuserdata_rawZvendordata_rawr)r�found�md�udZvd�defaultsZseedfile�contentsr
rZnp�nameZ	transfuncrZ	seedfound�protoZmd_seed�_rrr�	_get_data-sd��




zDataSourceOVF._get_datacCs
d|jS)Nzovf (%s))r
�rrrr�_get_subplatformoszDataSourceOVF._get_subplatformcCs0d|jkrgS|jd}t|t�r&|S|gSdS)N�public-keys)r(�
isinstance�list)rZpksrrr�get_public_ssh_keysrs


z!DataSourceOVF.get_public_ssh_keyscCs|jS�N)rr2rrr�get_config_obj~szDataSourceOVF.get_config_objcCs|jSr8)rr2rrr�network_config�szDataSourceOVF.network_configN)�__name__�
__module__�__qualname__Zdsnamer	rr1r3r7r9�propertyr:rrrrrs	Brc@seZdZdd�ZdS)�DataSourceOVFNetcCs,t�||||�tj�|jd�|_d|_dS)Nzovf-net)zhttp://zhttps://)rr	rrr
rrrrrrr	�szDataSourceOVFNet.__init__N)r;r<r=r	rrrrr?�sr?Fc	Cst|�}i}i}d}dg}ddddg}dg}|��D]�\}	}
|	dkrHd}	|	|krZ|
||	<q4|	|krl|
||	<q4|	|kr�|r�z$t�|
���}t|��d�||	<Wq�tk
r�t�	d	�Yq�Xq4|	d
kr4zt�|
���}Wq4tk
r�|
��}Yq4Xq4|||fS)NZpasswordrzlocal-hostnamer4rrZhostnameZnetworkz%Ignore network-config in wrong formatz	user-data)
�get_properties�items�base64Z	b64decode�encode�safeload_yaml_or_dict�get�	Exceptionr&r')r-Zread_network�propsr*rr+Z	cfg_propsZmd_propsZ
network_propsZprop�valr:rrrr �s4

r c	Cshd}|D]Z}tj�||�}tj�|�rzt�|�}||fWStk
r`t�td|�YqXqdS)N)zovf-env.xmlzovf_env.xmlzOVF_ENV.XMLzOVF-ENV.XMLzFailed loading ovf file %s)NF)	rrr
�isfilerZload_text_filerF�logexcr&)�dirnameZ	env_names�fnameZfull_fnr-rrrr�s
rcCs�|sdSt|t�std|��tj�|�}|�d�rB|�d�d}|�d�r\|�d�d}n|�	d�dkrndS|svdSd}tj
�d|�}t�
|�}|�|�d	k	S)
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.*)ZCLOUD_INIT_CDROM_DEV_REGEXN)r5�str�
ValueErrorrr�normpathr%�	partition�split�count�environrE�re�compile�match)ZdevnameZ
default_regexZ
devname_regexZcdmatchrrr�maybe_cdrom_device�s"



rXTc
	Cs�t��}|��D]L\}}|d}|dkr.|r.qt|�s8q|d}t|�\}}|dk	r|Sq|rhd}nd}dd�t�|r�d|nd�D�}	|	D]T}ztj|t|d�\}}Wn&tjk
r�t�	d	|�Yq�YnX|dk	r�|Sq�dS)
N�fstypeZiso9660Z
mountpointFcSsg|]}t|�r|�qSr)rX)�.0�devrrr�
<listcomp>�s�z%transport_iso9660.<locals>.<listcomp>zTYPE=%s)�mtypez%s not mountable as iso9660)
r�mountsrArXrZfind_devs_withZmount_cbZMountFailedErrorr&r')
Zrequire_isor^r[�inforYZmpZ_fnamer-r]Zdevsrrrr#�s4
�

r#cCs ||g}t�|�\}}|||fSr8�r��rpctool�arg�cmd�stdout�stderrrrr�exec_vmware_rpctool
srgcCs"|d|g}t�|�\}}|||fS)Nz--cmdr`rarrr�
exec_vmtoolsds
rhc
Cs6d\}}t�d�}t�d�}|r6|t}}t�d|�|rT|sH|t}}t�d|�|sft�d�dSdd�}z|||�WStjk
�r0}z�|r�||kr�t�td	|�WY�tdS|s�t�	d
�WY�\dSzt�	d�||t�WWY�:Stjk
�r}zt�td	|�W5d}~XYnXW5d}~XYnXdS)N)NN�vmtoolsdzvmware-rpctoolzdiscovered vmware-rpctool: %szdiscovered vmtoolsd: %szno rpctool discoveredc
Ss�t�d|�z,||d�\}}}|r(|WSt�d|�WdStjk
rz}z"|jdkrft�d||j�|�W5d}~XYnXdS)Nzquery guestinfo.ovfEnv with %szinfo-get guestinfo.ovfEnvz!cmd %s exited 0 with empty stdout�z%s exited with code %d)r&r_r'r�ProcessExecutionErrorZ	exit_codeZwarning)rb�
rpctool_fnrdrer0�errorrrr�query_guestinfo-s
z3transport_vmware_guestinfo.<locals>.query_guestinfoz+vmtoolsd failed to get guestinfo.ovfEnv: %sz$vmtoolsd fallback option not presentzfallback to vmtoolsd)
rZwhichrgr&r'rhrkrrJr_)rbrlriZvmware_rpctoolrnrmrrrr"sJ





�



�(r"cCs2g}|��s|S|jD]}||�r|�|�q|Sr8)�
hasChildNodesZ
childNodesr!)ZnodeZfilter_funcZretZchildrrr�
find_child[s
rpc	Cs�t�|�}|jjdkrtd��|j��s0td��d}t|jdd��}t|�dkrXtd��i}t|dd	d��}|D],}|j�	|d
�j
}|j�	|d�j
}|||<qr|S)NZEnvironmentzNo Environment NodezNo Child Nodesz)http://schemas.dmtf.org/ovf/environment/1cSs
|jdkS)NZPropertySection��	localName��nrrr�<lambda>r�z get_properties.<locals>.<lambda>rzNo 'PropertySection'scSs
|jdkS)NZPropertyrqrsrrrruzrv�key�value)rZparseStringZdocumentElementrr�XmlErrorrorpr$Z
attributesZgetNamedItemNSrx)	r-ZdomZenvNsURIZpropSectionsrGZ	propElems�elemrwrHrrrr@es,

��
r@c@seZdZdS)ryN)r;r<r=rrrrry�srycCst�|t�Sr8)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_list�sr|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.
    )�yamlZ	safe_load)�datarrrrD�srD)F)T)"�__doc__rBZloggingrrUZxml.domrr}Z	cloudinitrrrZ	getLoggerr;r&rrr?r rrXr#rgrhr"rpr@rFryZDEP_FILESYSTEMZDEP_NETWORKr{r|rDrrrr�<module>s2
i	

)
&E
 
�