관리-도구
편집 파일: DataSourceOVF.cpython-39.opt-1.pyc
a ����'�Dg�2����������������������@���s��d�Z�ddlZddlZddlZddlZddlmZ�ddlZddlm Z m Z mZ�e�e �ZG�dd��de j�ZG�dd��de�Zd#d d�Zdd ��Zdd��Zd$dd�Zdd��Zdd��Zdd��Zdd��Zdd��ZG�dd��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�������������������@���sL���e�Zd�ZdZdd��Zdd��Zdd��Zdd ��Zd d��Zdd ��Z e dd���ZdS�)� DataSourceOVFZOVFc�����������������C���sF���t�j�|�|||��d�|�_tj�|jd�|�_d�|�_i�|�_ d|�_ d�|�_d�S�)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 ��� ���s����zDataSourceOVF.__init__c�����������������C���s���t�j�|��}d||�jf�S�)Nz%s [seed=%s])r���r����__str__r ���)r����rootr���r���r���r���)���s����zDataSourceOVF.__str__c�����������������C���s���g�}i�}d}d}ddi}t�|�jj�\}}|r^tj�|�jj|�}t|�\}}} ||�_|�|��nndt fdt fg} d�}| D�]\}}|��}|rv�q�qv|r�t|d�\}}} ||�_d|v�r�|d�r�|d�|�_|�|��t|�dkr�d S�d |v��rr|d ��rr|d �} d }|�j D�]}| �|��r|}��q �q|�s8t�d| |���d S�tj| d�d�\}}}}t�d | ��t�||g�}|�| ��t�||g�}d�|�|�_||�_||�_||�_| |�_dS�)N���instance-idz iid-dsovfzcom.vmware.guestInfoZisoT�network-configr���F�seedfromz Seed from %s not supported by %s)�timeoutzUsing seeded cache data from %s�,)�get_ovf_envr���r���r���r���r ����read_ovf_environmentr����append�transport_vmware_guestinfo�transport_iso9660r����lenr���� startswith�LOG�debugr���Zread_seededZ mergemanydictr ����metadataZuserdata_rawZvendordata_rawr���)r����found�md�udZvd�defaultsZseedfile�contentsr ���r���Znp�nameZ transfuncr���Z seedfound�protoZmd_seed�_r���r���r���� _get_data-���sb������ zDataSourceOVF._get_datac�����������������C���s ���d|�j��S�)Nzovf (%s))r ����r���r���r���r����_get_subplatformo���s����zDataSourceOVF._get_subplatformc�����������������C���s0���d|�j�vrg�S�|�j�d�}t|t�r&|S�|gS�d�S�)N�public-keys)r)���� isinstance�list)r���Zpksr���r���r����get_public_ssh_keysr���s���� z!DataSourceOVF.get_public_ssh_keysc�����������������C���s���|�j�S��N)r���r3���r���r���r����get_config_obj~���s����zDataSourceOVF.get_config_objc�����������������C���s���|�j�S�r9���)r���r3���r���r���r����network_config����s����zDataSourceOVF.network_configN)�__name__� __module__�__qualname__Zdsnamer ���r���r2���r4���r8���r:����propertyr;���r���r���r���r���r������s��� Br���c�������������������@���s���e�Zd�Zdd��ZdS�)�DataSourceOVFNetc�����������������C���s,���t��|�|||��tj�|jd�|�_d|�_d�S�)Nzovf-net)zhttp://zhttps://)r���r ���r���r���r ���r���r���r���r���r���r���r �������s����zDataSourceOVFNet.__init__N)r<���r=���r>���r ���r���r���r���r���r@�������s���r@���Fc�������������� ���C���s����t�|��}i�}i�}d�}dg}g�d�}dg}|���D�]�\} } | dkrDd} | |v�rV| || <�q0| |v�rh| || <�q0| |v�r�|r�z$t�| ����}t|��d�|| <�W�q��ty����t� d��Y�q�0�q0| dkr0zt�| ����}W�q0�ty����| ���}Y�q00�q0|||fS�) N�password)r����local-hostnamer5���r���r����hostnamerB����networkz%Ignore network-config in wrong formatz user-data) �get_properties�items�base64Z b64decode�encode�safeload_yaml_or_dict�get� Exceptionr'���r(���)r.���Zread_network�propsr+���r���r,���Z cfg_propsZmd_propsZ network_propsZprop�valr;���r���r���r���r!�������s4���� r!���c�������������� ���C���sf���d}|D�]X}t�j�|�|�}t�j�|�rzt�|�}||fW���S��ty^���t�td|��Y�q0�qdS�)N)zovf-env.xmlzovf_env.xmlzOVF_ENV.XMLzOVF-ENV.XMLzFailed loading ovf file %s)NF) r���r���r ����isfiler���Zload_text_filerK����logexcr'���)�dirnameZ env_names�fnameZfull_fnr.���r���r���r���r �������s���� r ���c�����������������C���s����|�sdS�t�|�t�std|����tj�|��}�|��d�rB|��d�d�}�|��d�r\|��d�d�}�n|�� d�dkrndS�|�svdS�d}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/���r���r���z^(sr[0-9]+|hd[a-z]|xvd.*)ZCLOUD_INIT_CDROM_DEV_REGEXN)r6����str� ValueErrorr���r����normpathr&���� partition�split�count�environrJ����re�compile�match)ZdevnameZ default_regexZ devname_regexZcdmatchr���r���r����maybe_cdrom_device����s"���� r]���Tc����������� ��� ���C���s����t����}|���D�]L\}}|d�}|dkr.|�r.qt|�s8q|d�}t|�\}}|dur|��S�q|�rhd}nd�}dd��t��|r�d|�nd��D��} | D�]R}zt�j|t|d�\}}W�n$�t�jy����t� d |��Y�q�Y�n0�|dur�|��S�q�d�S�) N�fstypeZiso9660Z mountpointFc�����������������S���s���g�|�]}t�|�r|�qS�r���)r]���)�.0�devr���r���r���� <listcomp>����s����z%transport_iso9660.<locals>.<listcomp>zTYPE=%s)�mtypez%s not mountable as iso9660) r����mountsrF���r]���r ���Zfind_devs_withZmount_cbZMountFailedErrorr'���r(���) Zrequire_isorc���r`����infor^���ZmpZ_fnamer.���rb���Zdevsr���r���r���r$�������s4���� � r$���c�����������������C���s ���|�|g}t���|�\}}|||fS�r9����r�����rpctool�arg�cmd�stdout�stderrr���r���r����exec_vmware_rpctool ��s����rl���c�����������������C���s"���|�d|g}t���|�\}}|||fS�)Nz--cmdre���rf���r���r���r���� exec_vmtoolsd��s���� rm���c��������������� ���C���sF��d\}�}t��d�}t��d�}|r6|t�}�}t�d|��|rT|sH|t�}�}t�d|��|�sft�d��d�S�dd��}z||�|�W�S��t�j�y@�}�z�|r�|�|kr�t�td |��W�Y�d�}~d�S�|s�t� d ��W�Y�d�}~d�S�z"t� d��||t�W�W��Y�d�}~S��t�j�y*�}�zt�td |��W�Y�d�}~n d�}~0�0�W�Y�d�}~n d�}~0�0�d�S�)N)NN�vmtoolsdzvmware-rpctoolzdiscovered vmware-rpctool: %szdiscovered vmtoolsd: %szno rpctool discoveredc�������������� ���S���s����t��d|���z,||�d�\}}}|r(|W�S�t��d|��W�d�S��tjy|�}�z*|jdkrdt��d|�|j��|�W�Y�d�}~n d�}~0�0�d�S�)Nzquery guestinfo.ovfEnv with %szinfo-get guestinfo.ovfEnvz!cmd %s exited 0 with empty stdout����z%s exited with code %d)r'���rd���r(���r����ProcessExecutionErrorZ exit_codeZwarning)rg���� rpctool_fnri���rj���r1����errorr���r���r����query_guestinfo-��s���� z3transport_vmware_guestinfo.<locals>.query_guestinfoz+vmtoolsd failed to get guestinfo.ovfEnv: %sz$vmtoolsd fallback option not presentzfallback to vmtoolsd) r����whichrl���r'���r(���rm���rp���r���rO���rd���)rg���rq���rn���Zvmware_rpctoolrs���rr���r���r���r���r#�����sB���� � �0r#���c�����������������C���s2���g�}|�����s|S�|�jD�]}||�r|�|��q|S�r9���)� hasChildNodesZ childNodesr"���)ZnodeZfilter_func�ret�childr���r���r���� find_child[��s���� rx���c����������� ������C���s����t��|��}|jjdkrtd��|j���s0td��d}t|jdd���}t|�dkrXtd��i�}t|d�d d���}|D�],}|j� |d �j }|j� |d�j }|||<�qr|S�)NZEnvironmentzNo Environment NodezNo Child Nodesz)http://schemas.dmtf.org/ovf/environment/1c�����������������S���s ���|�j�dkS�)NZPropertySection�� localName��nr���r���r����<lambda>r�������z get_properties.<locals>.<lambda>r���zNo 'PropertySection'sc�����������������S���s ���|�j�dkS�)NZPropertyry���r{���r���r���r���r}���z��r~����key�value)r���ZparseStringZdocumentElementrz����XmlErrorru���rx���r%���Z attributesZgetNamedItemNSr����) r.���ZdomZenvNsURIZpropSectionsrL���Z propElems�elemr���rM���r���r���r���rE���e��s(���� �� rE���c�������������������@���s���e�Zd�ZdS�)r����N)r<���r=���r>���r���r���r���r���r�������s���r����c�����������������C���s���t��|�t�S�r9���)r���Zlist_from_depends�datasources)Zdependsr���r���r����get_datasource_list���s����r����c�����������������C���s���|�si�S�t��|��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)�datar���r���r���rI������s����rI���)F)T)"�__doc__rG���Zloggingr���rZ���Zxml.domr���r����Z cloudinitr���r���r���Z getLoggerr<���r'���r���r���r@���r!���r ���r]���r$���rl���rm���r#���rx���rE���rK���r����ZDEP_FILESYSTEMZDEP_NETWORKr����r����rI���r���r���r���r����<module>���s2��� i ) &E �