Your IP : 216.73.217.13


Current Path : /lib/python3/dist-packages/cloudinit/sources/__pycache__/
Upload File :
Current File : //lib/python3/dist-packages/cloudinit/sources/__pycache__/DataSourceOVF.cpython-38.pyc

U

�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)�
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.pyrszDataSourceOVF.__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�rp|d
�rp|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_envrrr
rr�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_seedrrr�	_get_data'sd��

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


z!DataSourceOVF.get_public_ssh_keyscCs|jS�N)rr3rrr�get_config_objxszDataSourceOVF.get_config_objcCs|jSr9)rr3rrr�network_config{szDataSourceOVF.network_configN)�__name__�
__module__�__qualname__Zdsnamerrr2r4r8r:�propertyr;rrrrrs	Brc@seZdZdd�ZdS)�DataSourceOVFNetcCs,t�||||�tj�|jd�|_d|_dS)Nzovf-net)zhttp://zhttps://)rrr
rrrrrrrrr�szDataSourceOVFNet.__init__N)r<r=r>rrrrrr@�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-hostnamer5rrZhostnameZnetworkz%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)	r
rr�isfilerZ	load_filerGZlogexcr()�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	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)r6�str�
ValueErrorr
r�normpathr'�	partition�split�count�environrF�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�mountsrBrXr!Zfind_devs_withZmount_cbZMountFailedErrorr(r))
Zrequire_isor^r[�inforYZmpZ_fnamer/r]Zdevsrrrr%�s4
�

r%c
Cs�d}d}t�|�s|S|dg}z*t�|�\}}|r8|WSt�d||�WnHtjk
r�}z(|jdkr�t�d||j�t�|�W5d}~XYnX|S)Nzvmware-rpctoolzinfo-get guestinfo.ovfEnvz%cmd %s exited 0 with empty stdout: %s�z%s exited with code %d)rZwhichr(r)ZProcessExecutionErrorZ	exit_codeZwarning)ZrpctoolZ	not_found�cmd�outZ_err�errrr$s

r$cCs2g}|��s|S|jD]}||�r|�|�q|Sr9)�
hasChildNodesZ
childNodesr#)ZnodeZfilter_funcZretZchildrrr�
find_childs
rec	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>/�z get_properties.<locals>.<lambda>rzNo 'PropertySection'scSs
|jdkS)NZPropertyrfrhrrrrj7rk�key�value)rZparseStringZdocumentElementrg�XmlErrorrdrer&Z
attributesZgetNamedItemNSrm)	r/ZdomZenvNsURIZpropSectionsrHZ	propElems�elemrlrIrrrrA!s,

��
rAc@seZdZdS)rnN)r<r=r>rrrrrnBsrncCst�|t�Sr9)rZlist_from_depends�datasources)Zdependsrrr�get_datasource_listNsrqcCs|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)�datarrrrERsrE)F)T) rCr
rUZxml.domrZ	cloudinitrZloggingrrrrZ	getLoggerr<r(r
rr@r"r!rXr%r$rerArGrnZDEP_FILESYSTEMZDEP_NETWORKrprqrErrrr�<module>s*
j	

)
'
!
�