name : DataSourceOVF.cpython-39.pyc
a

'�Dg�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�C/usr/lib/python3.9/site-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|vr�|dr�|d|_|�|�t|�dkr�d	Sd
|v�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)�timeoutzUsing 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-sb��




zDataSourceOVF._get_datacCs
d|jS)Nzovf (%s))r
�rrrr�_get_subplatformoszDataSourceOVF._get_subplatformcCs0d|jvrgS|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)rr3rrr�get_config_obj~szDataSourceOVF.get_config_objcCs|jSr9)rr3rrr�network_config�szDataSourceOVF.network_configN)�__name__�
__module__�__qualname__Zdsnamer	rr2r4r8r:�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	Cs�t|�}i}i}d}dg}gd�}dg}|��D]�\}	}
|	dkrDd}	|	|vrV|
||	<q0|	|vrh|
||	<q0|	|vr�|r�z$t�|
���}t|��d�||	<Wq�ty�t�	d�Yq�0q0|	dkr0zt�|
���}Wq0ty�|
��}Yq00q0|||fS)	N�password)r�local-hostnamer5rr�hostnamerB�networkz%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	Csfd}|D]X}tj�||�}tj�|�rzt�|�}||fWSty^t�td|�Yq0qdS)N)zovf-env.xmlzovf_env.xmlzOVF_ENV.XMLzOVF-ENV.XMLzFailed loading ovf file %s)NF)	rrr
�isfilerZload_text_filerK�logexcr')�dirnameZ	env_names�fnameZfull_fnr.rrrr �s
r cCs�|sdSt|t�std|��tj�|�}|�d�rB|�d�d}|�d�r\|�d�d}n|�	d�dkrndS|svdSd}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.*)ZCLOUD_INIT_CDROM_DEV_REGEXN)r6�str�
ValueErrorrr�normpathr&�	partition�split�count�environrJ�re�compile�match)ZdevnameZ
default_regexZ
devname_regexZcdmatchrrr�maybe_cdrom_device�s"



r]Tc
	Cs�t��}|��D]L\}}|d}|dkr.|r.qt|�s8q|d}t|�\}}|dur|Sq|rhd}nd}dd�t�|r�d|nd�D�}	|	D]R}ztj|t|d�\}}Wn$tjy�t�	d	|�Yq�Yn0|dur�|Sq�dS)
N�fstypeZiso9660Z
mountpointFcSsg|]}t|�r|�qSr)r])�.0�devrrr�
<listcomp>�s�z%transport_iso9660.<locals>.<listcomp>zTYPE=%s)�mtypez%s not mountable as iso9660)
r�mountsrFr]r Zfind_devs_withZmount_cbZMountFailedErrorr'r()
Zrequire_isorcr`�infor^ZmpZ_fnamer.rbZdevsrrrr$�s4
�

r$cCs ||g}t�|�\}}|||fSr9�r��rpctool�arg�cmd�stdout�stderrrrr�exec_vmware_rpctool
srlcCs"|d|g}t�|�\}}|||fS)Nz--cmdrerfrrr�
exec_vmtoolsds
rmc
CsFd\}}t�d�}t�d�}|r6|t}}t�d|�|rT|sH|t}}t�d|�|sft�d�dSdd�}z|||�WStj�y@}z�|r�||kr�t�td	|�WYd}~dS|s�t�	d
�WYd}~dSz"t�	d�||t�WWYd}~Stj�y*}zt�td	|�WYd}~n
d}~00WYd}~n
d}~00dS)N)NN�vmtoolsdzvmware-rpctoolzdiscovered vmware-rpctool: %szdiscovered vmtoolsd: %szno rpctool discoveredc
Ss�t�d|�z,||d�\}}}|r(|WSt�d|�WdStjy|}z*|jdkrdt�d||j�|�WYd}~n
d}~00dS)Nzquery guestinfo.ovfEnv with %szinfo-get guestinfo.ovfEnvz!cmd %s exited 0 with empty stdout�z%s exited with code %d)r'rdr(r�ProcessExecutionErrorZ	exit_codeZwarning)rg�
rpctool_fnrirjr1�errorrrr�query_guestinfo-s
z3transport_vmware_guestinfo.<locals>.query_guestinfoz+vmtoolsd failed to get guestinfo.ovfEnv: %sz$vmtoolsd fallback option not presentzfallback to vmtoolsd)
r�whichrlr'r(rmrprrOrd)rgrqrnZvmware_rpctoolrsrrrrrr#sB





�

�0r#cCs2g}|��s|S|jD]}||�r|�|�q|Sr9)�
hasChildNodesZ
childNodesr")ZnodeZfilter_func�ret�childrrr�
find_child[s
rxc	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)NZPropertyryr{rrrr}zr~�key�value)rZparseStringZdocumentElementrz�XmlErrorrurxr%Z
attributesZgetNamedItemNSr�)	r.ZdomZenvNsURIZpropSectionsrLZ	propElems�elemrrMrrrrEes(


��
rEc@seZdZdS)r�N)r<r=r>rrrrr��sr�cCst�|t�Sr9)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)�datarrrrI�srI)F)T)"�__doc__rGZloggingrrZZxml.domrr�Z	cloudinitrrrZ	getLoggerr<r'rrr@r!r r]r$rlrmr#rxrErKr�ZDEP_FILESYSTEMZDEP_NETWORKr�r�rIrrrr�<module>s2
i	

)
&E
 
�

© 2025 Cubjrnet7