BYPASS SHELL BY ./RAZORGANZ
Server: nginx/1.20.1
System: Linux iZdzfnv9mwfppeZ 5.10.134-19.2.al8.x86_64 #1 SMP Wed Oct 29 22:47:09 CST 2025 x86_64
User: apache (48)
PHP: 8.2.30
Disabled: NONE
Upload Files
File: //lib/python3.6/site-packages/cloudinit/sources/__pycache__/DataSourceOVF.cpython-36.opt-1.pyc
3

�q�h�)�@s�ddlZddlZddlZddlmZddlmZddlmZm	Z	m
Z
mZej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)�
DataSourceOVFZOVFcCsFtjj||||�d|_tjj|jd�|_d|_i|_	d|_
d|_dS)NZovf�/�file://)r	r
)r�
DataSource�__init__�seed�os�path�join�seed_dir�environment�cfg�supported_seed_starts�_network_config)�self�sys_cfg�distro�paths�r�#/usr/lib/python3.6/DataSourceOVF.pyrszDataSourceOVF.__init__cCstjj|�}d||jfS)Nz%s [seed=%s])rr�__str__r
)r�rootrrrr#szDataSourceOVF.__str__cCs�g}i}d}d}ddi}t|jj�\}}|r^tjj|jj|�}t|�\}}}	||_|j|�npdt	fdt
fg}
d}x|
D]\}}|�}|rxPqxW|r�t|d�\}}}	||_d|kr�|dr�|d|_|j|�t|�dkr�d	Sd
|ko�|d
�rp|d
}
d	}x"|j
D]}|
j|��r|}P�qW|�s8tjd|
|�d	Stj|
dd�\}}}tjd
|
�tj||g�}|j|
�tj||g�}dj|�|_||_||_||_|	|_dS)N�zinstance-idz	iid-dsovfzcom.vmware.guestInfoZisoTznetwork-configrF�seedfromz Seed from %s not supported by %s)ZtimeoutzUsing seeded cache data from %s�,)�get_ovf_envrrrrr�read_ovf_environmentr�append�transport_vmware_guestinfo�transport_iso9660r�lenr�
startswith�LOG�debugrZread_seededZ
mergemanydictr
�metadataZuserdata_rawZvendordata_rawr)r�found�md�udZvdZdefaultsZseedfile�contentsr
rZnp�nameZ	transfuncrZ	seedfound�protoZmd_seedrrr�	_get_data's^



zDataSourceOVF._get_datacCs
d|jS)Nzovf (%s))r
)rrrr�_get_subplatformiszDataSourceOVF._get_subplatformcCs0d|jkrgS|jd}t|t�r&|S|gSdS)Nzpublic-keys)r*�
isinstance�list)rZpksrrr�get_public_ssh_keysls


z!DataSourceOVF.get_public_ssh_keyscCs|jS)N)r)rrrr�get_config_objxszDataSourceOVF.get_config_objcCs|jS)N)r)rrrr�network_config{szDataSourceOVF.network_configN)�__name__�
__module__�__qualname__Zdsnamerrr1r2r5r6�propertyr7rrrrrs	Brc@seZdZdd�ZdS)�DataSourceOVFNetcCs,tj||||�tjj|jd�|_d|_dS)Nzovf-net�http://�https://)r=r>)rrrrrrr)rrrrrrrr�szDataSourceOVFNet.__init__N)r8r9r:rrrrrr<�sr<FcCst|�}i}i}d}dg}ddddg}dg}x�|j�D]�\}	}
|	dkrJd}	|	|kr\|
||	<q6|	|krn|
||	<q6|	|kr�|r�y$tj|
j��}t|�jd�||	<Wq�tk
r�tj	d	�Yq�Xq6|	d
kr6ytj|
j��}Wq6tk
r�|
j�}Yq6Xq6W|||fS)NZpasswordrzlocal-hostnamezpublic-keyszinstance-idznetwork-configZhostnameZnetworkz%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�valr7rrrr"�s4

r"cCsfd}x\|D]T}tjj||�}tjj|�r
ytj|�}||fStk
r\tjtd|�Yq
Xq
WdS)	N�ovf-env.xml�ovf_env.xml�OVF_ENV.XML�OVF-ENV.XMLzFailed loading ovf file %sF)rHrIrJrK)NF)	rrr�isfilerZ	load_filerEZlogexcr()�dirnameZ	env_namesZfnameZfull_fnr.rrrr!�s

r!cCs�|sdSt|t�std|��tjj|�}|jd�rB|jd�d
}|jd�r\|jd�d}n|j	d�dkrndS|svdSd}tj
jd|�}tj
|�}|j|�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/�r	rz^(sr[0-9]+|hd[a-z]|xvd.*)ZCLOUD_INIT_CDROM_DEV_REGEXN���rO)r3�str�
ValueErrorrr�normpathr'�	partition�split�count�environrD�re�compile�match)ZdevnameZ
default_regexZ
devname_regexZcdmatchrrr�maybe_cdrom_device�s"



rZTc
Cs�tj�}xT|j�D]H\}}|d}|dkr0|r0qt|�s:q|d}t|�\}}|dk	r|SqW|rhd}nd}dd�tj|r�d|nd�D�}	xV|	D]N}ytj|t|d�\}}Wn$tjk
r�tj	d	|�w�YnX|dk	r�|Sq�WdS)
N�fstypeZiso9660Z
mountpointFcSsg|]}t|�r|�qSr)rZ)�.0�devrrr�
<listcomp>�sz%transport_iso9660.<locals>.<listcomp>zTYPE=%s)�mtypez%s not mountable as iso9660)
r�mountsr@rZr!Zfind_devs_withZmount_cbZMountFailedErrorr(r))
Zrequire_isor`r]�infor[ZmpZ_fnamer.r_Zdevsrrrr%�s2
r%cCs�d}d}tj|�s|S|dg}y(tj|�\}}|r6|Stjd||�WnHtjk
r�}z*|jdkr~tjd||j�tj|�WYdd}~XnX|S)Nzvmware-rpctoolzinfo-get guestinfo.ovfEnvz%cmd %s exited 0 with empty stdout: %srNz%s exited with code %d)rZwhichr(r)ZProcessExecutionErrorZ	exit_codeZwarning)ZrpctoolZ	not_found�cmd�outZ_err�errrr$s

r$cCs6g}|j�s|Sx |jD]}||�r|j|�qW|S)N)�
hasChildNodesZ
childNodesr#)ZnodeZfilter_func�retZchildrrr�
find_childsrgc	Cs�tj|�}|jjdkrtd��|jj�s0td��d}t|jdd��}t|�dkrXtd��i}t|dd	d��}x4|D],}|jj	|d
�j
}|jj	|d�j
}|||<qtW|S)NZEnvironmentzNo Environment NodezNo Child Nodesz)http://schemas.dmtf.org/ovf/environment/1cSs
|jdkS)NZPropertySection)�	localName)�nrrr�<lambda>/sz get_properties.<locals>.<lambda>rzNo 'PropertySection'scSs
|jdkS)NZProperty)rh)rirrrrj7s�key�value)rZparseStringZdocumentElementrh�XmlErrorrergr&Z
attributesZgetNamedItemNSrl)	r.ZdomZenvNsURIZpropSectionsrFZ	propElems�elemrkrGrrrr?!s$


r?c@seZdZdS)rmN)r8r9r:rrrrrmBsrmcCstj|t�S)N)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_listNsrpcCs|siStj|�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)�datarrrrCRsrC)F)T) rArrWZxml.domrZ	cloudinitrZloggingrrrrZ	getLoggerr8r(rrr<r"r!rZr%r$rgr?rErmZDEP_FILESYSTEMZDEP_NETWORKrorprCrrrr�<module>s(
j	

)
'
!