Anons79 Mini Shell

Directory : /proc/self/root/lib/python2.7/site-packages/ansible/module_utils/
Upload File :
Current File : //proc/self/root/lib/python2.7/site-packages/ansible/module_utils/vmware.pyc

�
�Udac@`sgddlmZmZmZeZddlZddljj	j
ZddlZddl
Z
ddlZddlZddlZddlZddlmZddlmZdZyddlZeZWn#ek
r�ej�ZeZnXdZyEddlm Z ddl!m"Z"m#Z#m$Z$eZ%e&e$d�Z'Wn)ek
rcej�ZeZ%eZ'nXddl(m)Z)m*Z*dd	l+m,Z,m-Z-m.Z.m/Z/dd
l0m1Z1ddl2m3Z3m4Z4ddl5m6Z6d
e7fd��YZ8ddd�Z9dd�Z:edd�Z;d�Z<ded�Z=dd�Z>d�Z?d�Z@dd�ZAdd�ZBd�ZCd�ZDd�ZEdddded �ZFded!�ZGd"�ZHd#�ZId$�ZJd%�ZKd&�ZLd'�ZMd(�ZNd)�ZOd*�ZPd+�ZQeed,�ZRded-�ZSd.�ZTd/�ZUd0�ZVdd1�ZWdd2�ZXd3eYfd4��YZZdS(5i(tabsolute_importtdivisiontprint_functionN(trandint(t
StrictVersion(tconnect(tvimtvmodltVmomiSupporttVmomiJSONEncoder(tto_textt	to_native(t
integer_typest	iteritemststring_typest
raise_from(turlparse(tenv_fallbacktmissing_required_lib(tgeneric_urlparset	TaskErrorcB`seZd�ZRS(cO`stt|�j||�dS(N(tsuperRt__init__(tselftargstkwargs((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR1s(t__name__t
__module__R(((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR0si@icC`swd}tj�}x^trrtj�||kr@td��n|jjtjjjkrkt|jj	fS|jjtjjj
kr|jj
}d}zLy4|j}t
|jj
d�r�|jj
j}nWntk
r�nXWdtt||�|jj
�Xn|jjtjjjtjjjgkrtd|tdd�d|�}tj|�|d7}qqWdS(s<Wait for given task using exponential back-off algorithm.

    Args:
        task: VMware task object
        max_backoff: Maximum amount of sleep time in seconds
        timeout: Timeout for the given task in seconds

    Returns: Tuple with True and result for successful task
    Raises: TaskError on failure
    itTimeoutt
thumbprintNiii�(ttimetTrueRtinfotstateRtTaskInfotStatetsuccesstresultterrortNonetmsgthasattrRtAttributeErrorRtrunningtqueuedtminRtsleep(ttasktmax_backoffttimeouttfailure_countert
start_timet	error_msgthost_thumbprintt
sleep_time((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyt
wait_for_task5s,		
 *$
i,cC`sjt�}d}xT|dkret||�}|dsA|drK|}Pntj|�||8}qW|S(Niitipv4tipv6(tdicttgather_vm_factsRR.(tcontenttvmR1tfactstintervalt_facts((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytwait_for_vm_ipYs	
cC`s�|jj|p|jdtd|�}g|jD].}|sYt|j�t|�kr1|^q1}|j�|r�|r�|dSdS|S(Nt	recursivettypei(	tviewManagertCreateContainerViewt
rootFolderRtviewR
tnametDestroyR'(R<tvimtypeRHtfirsttfoldert	containertobjtobj_list((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_objgs'>
cC`s1|j}x!|D]}|j|kr|SqWdS(N(t	portgroupRHR'(t	dv_switchtportgroup_namet
portgroupstpg((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_dvspg_by_namews
	
cC`s^t|t�s|g}nt||d|d|�}x!|D]}|j|kr=|Sq=WdS(NRLtrecurse(t
isinstancetlisttget_all_objsRHR'(R<RHtobj_typeRLRWtobjectsRN((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_object_by_name�s
cC`s7|r|j}n	|j}t||tjgd|�S(NRL(t
hostFolderRFR]RtClusterComputeResource(R<tcluster_namet
datacenterRL((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_cluster_by_name�s	cC`st||tjg�S(N(R]Rt
Datacenter(R<tdatacenter_name((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_datacenter_by_name�scC`set|tj�r|Sd}xBtr`t|d�s8Pn|j}t|tj�r|}PqqW|S(s5 Walk the parent tree to find the objects datacenter tparentN(RXRRcR'RR)Rf(RNRa((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytget_parent_datacenter�s		cC`st||tjg|�S(N(R]Rt	Datastore(R<tdatastore_nameRd((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_datastore_by_name�scC`st||tjgd|�S(NRL(R]RtDistributedVirtualSwitch(R<tswitch_nameRL((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_dvs_by_name�scC`st||tjg�S(N(R]Rt
HostSystem(R<thostname((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_hostsystem_by_name�scC`st||tjg�S(N(R]RtResourcePool(R<tresource_pool_name((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_resource_pool_by_name�scC`st||tjg�S(N(R]RtNetwork(R<tnetwork_name((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_network_by_name�stvm_namec	C`s�|j}d}|dkr<|jd|d|dt�}nt|dkro|jd|dtd|dt�}nA|dkr�|jd|dtd|dt�}n|dkr�|jd|d|dt�}n�|d	krd}|r�|}n|r|j}nt|||�}n�|d
kr�|}	|j	|	�}
|
r�t
|
tj�r\|
j
}
nxN|
jD]@}t
|tj�s�qfn|j|krf|}|r�Pq�qfqfWq�n|S(sA UUID is unique to a VM, every other id returns the first match. tdns_nameRatdnsNametvmSearchtuuidtinstanceUuidt
instance_uuidtipRwtinventory_pathN(tsearchIndexR't
FindByDnsNameRt
FindByUuidtFalsetFindByIpR^tfind_vm_by_nametFindByInventoryPathRXRRctvmFoldertchildEntitytVirtualMachineRH(R<tvm_idt
vm_id_typeRatclusterRLtmatch_firsttsiR=t
searchpathtf_objtc_obj((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyt
find_vm_by_id�s>	!''!	cC`s"t||tjgd|d|�S(NRLRW(R]RR�(R<RwRLRW((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR��scC`s4x-|jjjD]}|jj|kr|SqWdS(N(tconfigtnetworkRQtspecRHR'(thostRSRQ((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_host_portgroup_by_name�scC`s�g}t|tj�r+|j|j�n|}xxt|d�r�|j}y
|j}Wntk
rrd}nX|dkr�Pnt|tj�r4|j|j�q4q4W|j
�ddj|�S(s7 make a /vm/foo/bar/baz like folder path for an object Rfsgroup-d1sha-folder-roott/N(sgroup-d1sha-folder-root(RXRtFoldertappendRHR)Rft_moIdR*R'treversetjoin(tvobjtpathstthisobjtmoid((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytcompile_folder_path_for_object�s 	



cC`sI|}x<|D]4}yt||�}Wq
ttfk
r@dSXq
W|S(s$Safely get a property or return NoneN(tgetattrR*t
IndexErrorR'(R=t
attributesR%t	attribute((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyt_get_vm_props
	c	C`soitd6|jjd6|jjjd6|jjjd6|jjjd6|jj	d6|jj
jd6|jj
jd6|jj
j
d	6gd
6gd6gd6d:d
6d:d6|jjd6d:d6|jjd6|jjd6t|d;�d6t|d<�d6|jjjd6|jjjd6d:d6d:d6|jjd6id6gd6d:d6id 6|jd!6d"|jd#6}|jjjr�yZ|jjj}|jjj|d
<|jr�t|jtj�r�|jjnd:|d$<Wq�tjjk
r�q�Xn|jjjr|jjjj|d<n|j }x%|D]}|dj!|j"j�q%Wy3|jj#}|j$}|rx|j%g|d<xE|j&D]:}x1|j'D]&}	d%|	kr�|dj!|	�q�q�Wq~Wx@|j(D]5}|dj!t)j*j+t)j*j,|j%�|��q�Wx7|j$j-D])}|dj!t)j*j+|j.|��qWx<|j$j/D]+}x"|j0D]}
|dj!|
�qVWqFWnWnt1k
r�nXt2j3||�|d<|j4}xy|jj5D]k}|j6}
|d:k	r|j7rx3|j7D]%}|j6|j6kr�|j}
Pq�q�Wn|j8|d|
<q�Wi}t|d=�}|rmx'|D]}t9|j:�||j;<qJWn|jj:r�d'|jj:kr�|jj:|d<q�|jj:|d<nd(}xj|jj
j<D]Y}t=|d)�s�q�n|j;r	|j;}|j>d'd*�}n
d:}}t=|d+�rt=|j?d,�rt=|j?j@d-�rt=|j?j@d.�r|j?j@jA}|j?j@jB}nd:}d:}d/tC|�}i|jDd06|jEjFd16|d26|jG|j;d:�d36|d46|jEjd56|d66|d76||<|d
j!d8tC|��|d97}q�WtH|�}d|kr[|d|d<|d|d<ntI|�|d <|S(>s. Gather facts from vim.VirtualMachine object. t	module_hwthw_namethw_power_statusthw_guest_full_namethw_guest_idthw_product_uuidthw_processor_countthw_cores_per_socketthw_memtotal_mbt
hw_interfacest
hw_datastoresthw_filesthw_esxi_hostthw_guest_ha_statethw_is_templatet	hw_foldert
hw_versionR}tguestttoolsRunningStatustguest_tools_statusttoolsVersiontguest_tools_versiontguest_questiontguest_consolidation_neededR8R9t
annotationtcustomvaluest	snapshotstcurrent_snapshottvncR�svim.VirtualMachine:%stvimreft
hw_clustertvmsntnett:it
macAddresst-tbackingtporttportKeytportgroupKeythw_ethtaddresstypetlabelt
macaddresstipaddressestmacaddress_dashtsummarytportgroup_portkeyt
portgroup_keytethiN(sgueststoolsRunningStatus(sguestR�(sguestR�(JRR�RHR�truntimet
powerStateR�t
guestFullNametguestIdR{thardwaretnumCPUtnumCoresPerSockettmemoryMBR'ttemplatetversionR|R�tquestiontconsolidationNeededR�R�R�RfRXRR_tfaulttNoPermissiontdasVmProtectiontdasProtectedt	datastoreR�R tfilestlayoutt
vmPathNametsnapshottsnapshotFilet
configFiletostpathR�tdirnametlogFiletlogDirectorytdisktdiskFilet	ExceptiontPyVmomitget_vm_pathtcustomFieldsManagertcustomValuetkeytfieldtvalueRYt	ipAddressR�tdeviceR)treplaceR�R�R�R�tstrtaddressTypet
deviceInfoR�tgettlist_snapshotstget_vnc_extraconfig(R<R=R>R�t
datastorestdsR�R�titemtsnapR�tcfmt	value_objtkntftnet_dicttvmnetRtethernet_idxtentrytmac_addrt
mac_addr_dashtport_group_keytport_keytfactnametsnapshot_facts((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR;s�






8	
	3' 
			
		
!*


cC`s6i|jd6|jd6|jd6|jd6|jd6S(NtidRHtdescriptiont
creation_timeR!(RRHRt
createTimeR!(RN((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytdeserialize_snapshot_obj�s




cC`sAg}x4|D],}|jt|��|t|j�}q
W|S(N(R�Rtlist_snapshots_recursivelytchildSnapshotList(R�t
snapshot_dataR�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR �s

cC`sPg}xC|D];}|j|kr2|j|�n|t|j|�}q
W|S(N(R�R�tget_current_snap_objR!(R�tsnapobtsnap_objR�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR#�s
cC`s�i}t|d�}|s|S|jdkr2|St|jj�|d<|jj}t|jj|�}|r�t|d�|d<n
t�|d<|S(NR�R�iR�(ssnapshot(	R�R�R'R trootSnapshotListtcurrentSnapshotR#RR:(R=R%R�tcurrent_snapreftcurrent_snap_obj((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR�s
cC`sgi}xZ|jjD]L}xCddddgD]/}|jj�d|kr,|j||<q,q,WqW|S(NtenabledR~R�tpasswordsremotedisplay.vnc.(R�textraConfigR�tlowerR�(R=R%toptst
optkeyname((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR�scC`s3tdtdddtdtdgf�dtdddd	d
gdtdtdgf�dtdddd
dgdtdtdtdgf�dtdddddtdgf�dtdddtdtdtdgf�dtdddtdddtdgf�dtdddtdddtdgf��S(NRoRCRtrequiredtfallbacktVMWARE_HOSTtusernametaliasestusertadmintVMWARE_USERR+tpasstpwdtno_logtVMWARE_PASSWORDR�tinttdefaulti�tVMWARE_PORTtvalidate_certstbooltVMWARE_VALIDATE_CERTSt
proxy_hosttVMWARE_PROXY_HOSTt
proxy_porttVMWARE_PROXY_PORT(R:R�RRR'(((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytvmware_argument_spec�s8cC`s�|jd}|jd}|jd}|jjdd�}|jd}|sb|jdd�n|s{|jdd	�n|s�|jdd
�n|r�ttd�r�|jdd�ny|r�tjtj�}tj|_t	|_
|j�n?ttd�r0tjtj�}tj|_t
|_
nd}d}	|jjd
�}
|jjd�}td|d|�}|r�|jd|�nd}
y�|
rd|
|f}
|jd|
d|�tj|�}tj|tjj||��}tjd|�}	n%|jd|d|�tj|�}	WnLtjjk
r}}d||f}|jdd|||jf|
�ntjjk
r�}|jdd||||jf�n�tjtjfk
r�}|jdd|||f�n�tjj k
r<}d||f}|jdd||jf|
�nAt!k
r|}d||f|
}|jdd||f�nX|	dkr�d||f}|jd||
�n|r�t"j#tj$|	�n|r�|	|	j%�fS|	j%�S( NRoR3R+R�i�R?R(s�Hostname parameter is missing. Please specify this parameter in task or export environment variable like 'export VMWARE_HOST=ESXI_HOSTNAME's�Username parameter is missing. Please specify this parameter in task or export environment variable like 'export VMWARE_USER=ESXI_USERNAME's�Password parameter is missing. Please specify this parameter in task or export environment variable like 'export VMWARE_PASSWORD=ESXI_PASSWORD't
SSLContextsxpyVim does not support changing verification mode with python < 2.7.9. Either update python or use validate_certs=false.RBRDR�t
sslContextts [proxy: %s:%d]t
httpProxyHostt
httpProxyPorttServiceInstanceR5R9s1Unable to log on to vCenter or ESXi API at %s:%s s%s as %s: %ssXUser %s does not have required permission to log on to vCenter or ESXi API at %s:%s : %ss<Unable to connect to vCenter or ESXi API at %s on TCP/%s: %ss+Failed to get a response from server %s:%s s%s as request is malformed: %ss>Unknown error while connecting to vCenter or ESXi API at %s:%ss%s : %s(&tparamsRt	fail_jsonR)tsslRGtPROTOCOL_SSLv23t
CERT_REQUIREDtverify_modeRtcheck_hostnametload_default_certst	CERT_NONER�R'R:tupdateRtSmartStubAdaptertVimSessionOrientedStubtmakeUserLoginMethodRRLtSmartConnectR�tInvalidLoginR(R�trequeststConnectionErrortSSLErrorRtInvalidRequestR�tatexittregistert
DisconnecttRetrieveContent(tmoduletdisconnect_atexitt	return_siRoR3R+R�R?tssl_contexttservice_instanceRBRDtconnect_argst
msg_suffixt
smart_stubtsession_stubt
invalid_loginR(t
no_permissiontgeneric_req_exctinvalid_requesttgeneric_exc((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytconnect_to_api�s~



	
	!' $cC`s_|s|j}ni}|jj|||�}x(|jD]}|ji|j|6�q:W|S(N(RFRDRERGRVRH(R<RJRLRWRNRMtmanaged_object_ref((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyRZQscC`s�itd6}|jj}	|	dks1|	dkrIt|d<d|d<|Stjjjd|d|�}
y(|jj}tjjj	j
d|d	|d
|�}|j||
|�}
|
|d<|j||
|
g�}x6|dj
stjd
�|j||
|
g�}q�W|dj|d<|djj�|d<|dj
j�|d<|dj|d<|ddkr�t|d<d|d<n
d|d<Wn-tk
r�}t|�|d<t|d<nX|S(NtfailedttoolsNotInstalledttoolsNotRunnings;VMwareTools is not installed or is not running in the guestR(R3R+tprogramPatht	argumentstworkingDirectorytpidiitownert	startTimetendTimetexitCodesprogram exited non-zerosprogram completed successfully(R�R�ttoolsStatusRRR=tNamePasswordAuthenticationtguestOperationsManagertprocessManagertProcessManagertProgramSpectStartProgramInGuesttListProcessesInGuestR}RR.R{R|t	isoformatR~R�R(R<R=R3R+tprogram_pathtprogram_argstprogram_cwdtprogram_envR%ttools_statustcredstpmtpstrestpdatate((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytrun_command_in_guest\sB


	



c	C`s	i}t|�}g|D]}|jd�s|^q}x�|D]�}t||�}t|�rhqAnt|�}|dkr�d||<qAt|tjj	�r�t
|�||<qAt|tjj�r�t
|�||<qAt|tjjj
�rt
|�||<qAt|tjjjj�r6t|�||<qAt|tj�r�it
|j�d6t
|j�d6t
|j�d6t
|j�d6||<qAt|d�r�t|�dt|j�||<qAt|tjj�r�qAt|t�r$g||<x|D]}||jt
|��qWqAt|ttttf�rvt|t�rct |�||<qt|�||<qAt|t�r�|||<qAt|t!�r�i|t|�<xM|j"�D],\}}t|�}t
|�|||<q�WqAt#|�||<qAW|S(	s*Serialize a clonespec or a relocation spect_tdynamicPropertytdynamicTypeR�R�RHR�N($tdirt
startswithR�tcallableRCR'RXRR=t
ConfigSpectserialize_spectRelocateSpecRtVirtualDisktVirtualDeviceSpect
FileOperationR
tDescriptionR�R�R�R�R)RHtProfileSpect
issubclassRYR�RRtfloatR@R<R:titemsR(	t	clonespectdatatattrstxtxotxttxetktv((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR��sZ(

$


cC`s�t||�}|dkr2|jdd|�nt||d|�}|dkrj|jdd|�nx*|jD]}|j|krt||fSqtWd|fS(NR(s&Unable to find datacenter with name %sRas#Unable to find cluster with name %s(ReR'RNRbR�RH(RdR<RdR`t	host_nametdcR�R�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_host_by_cluster_datacenter�scC`s�t||�}|jdd�jdd�j�}|dj�}tdtdt�}|r�|dkr�t|d<d	||d
<|S||kr�d}	y�|dkr�|j�}	no|dkr�|j�}	nT|dkr|dkr�|j	�}	q&t|d<d||d
<n|dkrV|dkr;|j
�}	q&t|d<d||d
<n�|dkr|dkr�|jjdkr�|dkr�|j
�}	|dkr�|jt||��q�n|j�}	t|d<qt|d<d|d
<q&t|d<d|j|d
<nt|d<d||d
<Wn-tk
rV}
t|d<t|
�|d
<nX|	r�t|	�|	jjdkr�t|d<|	jjj|d
<q�t|d<q�nt||�|d<|S(sm
    Set the power status for a VM determined by the current and
    requested states. force is forceful
    R�RIR�R�tchangedRtt	poweredont
poweredoffs8Virtual Machine is in %s power state. Force is required!R(t	restartedt
poweringont	resettings6Cannot restart virtual machine in the current state %st	suspendeds6Cannot suspend virtual machine in the current state %st
shutdownguesttrebootguesttguestToolsRunningis:VMware tools should be installed for guest shutdown/rebootsGVirtual machine %s must be in poweredon state for guest shutdown/reboots'Unsupported expected state provided: %sR&tinstance(R�R�N(R�R�R�R�(R�R�(R�R�(R;RR-R:R�RR'tPowerOfftPowerOntResettSuspendR�R�t
ShutdownGuestRVtwait_for_powerofftRebootGuestRHR�R
R7R R!R&R((R<R=R!tforceR1R>texpected_statet
current_stateR%R/R�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytset_vm_power_state�sj$	










cC`smt�}d}xW|dkrT|jjj�dkr:Pntj|�||8}qWt|d<d|d<|S(NiiR�Rts'Timeout while waiting for VM power off.R((R:R�R�R-RR.R(R=R1R%R?((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR�*s	


R�cB`sIeZd�Zd�Zdd�Zd�Zd�Zed��Z	dd�Z
dd�Zd�Zd	�Z
ddd
�Zdddd�Zed��Zd
�Zdd�Zdd�Zd�Zdd�Zdd�Zd�Zdd�Zddd�Zd�Zd�Zd�Zd�Zd�Zdd�Zd�Z RS(cC`s�ts%|jdtd�dt�ntsJ|jdtd�dt�n||_|j|_d|_	t
|jdt�\|_|_
g|_|j
jr�|j
jj|_ndS(s
        Constructor
        R(R\t	exceptionR�RfN(tHAS_REQUESTSRNRtREQUESTS_IMP_ERRtHAS_PYVMOMItPYVMOMI_IMP_ERRRdRMR'tcurrent_vm_objRrRR�R<tcustom_field_mgrR�R�(RRd((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR9s

		!	cC`s|d}y|jjj}Wn<tjtjjfk
rW}|j	j
dd|j�nX|dkrhtS|dkrxt
SdS(s�
        Check if given hostname is vCenter or ESXi host
        Returns: True if given connection is with vCenter server
                 False if given connection is with ESXi server

        R(s+Failed to get status of vCenter server : %st
VirtualCentert	HostAgentN(R'R<tabouttapiTypeRtRuntimeFaultRR�tVimFaultRdRNR(RR�(Rtapi_typetexc((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyt
is_vcenterMsc		C`s�|jj}|dkr$dg}n|jjj||gt�}tjjj	dddddt
dtjj
�}tjjjd|dt
d|�}tjjjd	|dtd
|g�}tjjjd|gd|gd
t
�}|jjj|g�S(s
        Look up a Managed Object Reference in vCenter / ESXi Environment
        :param vim_type: Type of vim object e.g, for datacenter - vim.Datacenter
        :param properties: List of properties related to vim object e.g. Name
        :return: local content object
        RHttraversal_specR�RGtskipRCtalltpathSetRNt	selectSett	objectSettpropSettreportMissingObjectsInResultsN(R<RFR'RDRERRtquerytPropertyCollectort
TraversalSpecR�RRGt
ContainerViewtPropertySpect
ObjectSpect
FilterSpectpropertyCollectortRetrieveContents(	Rtvim_typet
propertiestroot_foldertmorR�t
property_spectobject_spectfilter_spec((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytget_managed_objects_properties_s,				c	C`sd}d}|jjd�p!t}d|jkr�|jdr�|skt|jd|jddd�}q|rt|jd|jddd�}qnjd|jkr�|jdr�|jdtjddg�}g}xg|D]_}t	|j
�d	krq�nx;|j
D]0}|j|jdkr|j|j
�PqqWq�Wt	|�d	kr�|jd
dkr�|jjdd|jdd
d�n|jd
}|jd}	t|j|jd�}
td|
�}|jd�s�|d7}n|dkr|jjdd|jd�n+|jd�r?d||	|f}n|}xt|D]V}|jd|jd|�}
|
jd||	f�s�qLn||
krL|}PqLqLWq|r|d}qnDd|jkr|jdrtjd�|jd|jj�}n|r||_n|S(s�
        Find unique virtual machine either by UUID, MoID or Name.
        Returns: virtual machine object if found, else None.

        tuse_instance_uuidR{R�R�R}RHR�R�iRLR(s�Multiple virtual machines with same name [%s] found, Folder value is a required parameter to find uniqueness of the virtual machinetdetailssIPlease see documentation of the vmware_guest module for folder parameter.RaR�R�RIstvmware_guest found multiple virtual machines with same name [%s], please specify folder path other than blank or '/'s/vm/s%s%s%sR<Rws%s%siR�R�N(NRIR�(R'RMRR�R�R<R�RR�tlenR�tvalR�RNRdRNReR�tendswithR�R�Rt
templateOfR�t_stubR�(Rtvm_objtuser_desired_pathR�R\tvmsttemp_vm_objectttemp_vm_object_propertytuser_foldertuser_defined_dctdatacenter_objtdcpathR=tactual_vm_folder_path((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytget_vm�sf%






(cC`st|j|�S(s�
        Gather facts of virtual machine.
        Args:
            vm: Name of virtual machine.

        Returns: Facts dictionary of the given virtual machine.

        (R;R<(RR=((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytgather_facts�s	cC`s�d}|j}|r�|j}|j}xa|dk	r�|jdk	r�||jkr�|jd|}y
|j}Wq*tk
r�Pq*Xq*Wd|}n|S(s�
        Find the path of virtual machine.
        Args:
            content: VMware content object
            vm_name: virtual machine managed object

        Returns: Folder of virtual machine if exists, else None

        R�N(R'RfRHRFR�(R<Rwtfolder_nameRLtfp((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR��s			-

	
c	C`sZd}|s|Sd|krktjj|�}tjj|�}t|j|ddd|�}|rV|Sn�t|jd|dd�}|r�|S|jdtj	dd	g�}g}x`|D]X}t
|j�d
kr�q�nx4|jD])}|j|kr�|j
|j�Pq�q�Wq�Wt
|�d
krC|jjdd|�n|rV|d
}n|S(s
        Find the virtual machine or virtual machine template using name
        used for cloning purpose.
        Args:
            template_name: Name of virtual machine or virtual machine template

        Returns: virtual machine or virtual machine template object

        R�R�RRLR�R{R�R�RHiR(sAMultiple virtual machines or templates with same name [%s] found.iN(R'R�R�R�tbasenameR�R<R�RR�R�R�R�R�RNRdRN(	Rt
template_namettemplate_objtvm_obj_pathtvm_obj_nameR\t	templatesR�R�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytget_vm_or_templates4


cC`st|j|d|�S(s�
        Find Cluster by name in given datacenter
        Args:
            cluster_name: Name of cluster name to find
            datacenter_name: (optional) Name of datacenter

        Returns: True if found

        Ra(RbR<(RR`Rd((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyRb;s
cC`s:|jd|�}|r2g|jD]}|^q"SgSdS(s�
        Get all hosts from cluster by cluster name
        Args:
            cluster_name: Name of cluster

        Returns: List of hosts

        R`N(RbR�(RR`tcluster_objR�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytget_all_hosts_by_clusterGs	cC`st|jd|�S(s{
        Find Host by name
        Args:
            host_name: Name of ESXi host

        Returns: True if found

        Ro(RpR<(RR�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyRpWs	cC`s.g}|j�sSt|jtjg�j�}|r*|jt|�d�q*n�|r�|jd|�}|r�g|j	D]}|^q{}q*|j
jdtdd|�nz|r*t
|t�r�|g}nxV|D]K}|jd|�}|r|j|�q�|j
jdtdd|�q�Wn|S(s�
        Get all host system managed object

        Args:
            cluster_name: Name of Cluster
            esxi_host_name: Name of ESXi server

        Returns: A list of all host system managed objects, else empty list

        iR`R�R(sCluster '%s' not foundR�sESXi '%s' not found(R�RZR<RRntkeysR�RYRbR�RdRNR�RXRRp(RR`tesxi_host_namet
host_obj_listthostsRR�t
esxi_host_obj((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytget_all_host_objsbs& 
$cC`s�|r|jjj}n.|r3|jd|�}n|jjdd�|r�|r�|jjjj}t	|�t	dj
tt|���kS|jjdd|||f�dS(s5
        Check that the ESXi Host is at least a specific version number
        Args:
            vm_obj: virtual machine object, required one of vm_obj, host_name
            host_name (string): ESXi host name
            version (tuple): a version tuple, for example (6, 7, 0)
        Returns: bool
        R�R(s,VM object or ESXi host name must be set one.t.s_Unable to get the ESXi host from vm: %s, or hostname %s,or the passed ESXi version: %s is None.N(
R�R�R�RpRdRNR�tproductR�RR�tmapR(RR�R�R�thost_systemthost_version((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pythost_version_at_least�s	(cC`s4x-|jjjD]}|jj|kr|SqWtS(s�
        Find Portgroup on given host
        Args:
            host: Host config object
            portgroup_name: Name of portgroup

        Returns: True if found else False

        (R�R�RQR�RHR�(R�RSRQ((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR��scC`s1g}x$|jjjD]}|j|�qW|S(s�
        Get all Port Group by host
        Args:
            host_system: Name of Host System

        Returns: List of Port Group Spec
        (R�R�RQR�(RRtpgs_listRU((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytget_all_port_groups_by_host�scC`s�g}|s|S|jdtjddg�}x`|D]X}t|j�dkrVq5nx4|jD])}|j|kr`|j|j�Pq`q`Wq5W|S(s�
        Get network specified by name
        Args:
            network_name: Name of network

        Returns: List of network managed objects
        R�R�RHi(R�RRtR�R�R�R�RN(RRutnetworksR\R�R�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyRv�s
cC`s2t}|s|S|jd|�r(tnt}|S(s�
        Check if network with a specified name exists or not
        Args:
            network_name: Name of network

        Returns: True if network exists else False
        Ru(R�RvR(RRutret((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytnetwork_exists_by_name�s
cC`st|jd|�S(s�
        Get datacenter managed object by name

        Args:
            datacenter_name: Name of datacenter

        Returns: datacenter managed object if found else None

        Rd(ReR<(RRd((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyRe�s
cC`s.|s&|jjdks&|jjr*tStS(s�
        Check if datastore selected is valid or not
        Args:
            datastore_obj: datastore managed object

        Returns: True if datastore is valid, False if not
        tnormal(R�tmaintenanceModet
accessibleR�R(Rt
datastore_obj((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytis_datastore_valid�s

cC`st|jd|d|�S(s�
        Get datastore managed object by name
        Args:
            datastore_name: Name of datastore
            datacenter_name: Name of datacenter where the datastore resides.  This is needed because Datastores can be
            shared across Datacenters, so we need to specify the datacenter to assure we get the correct Managed Object Reference

        Returns: datastore managed object if found else None

        RiRd(RjR<(RRiRd((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyRj�scC`s@t|jtjg�}x!|D]}|j|kr|SqWdS(s�
        Get datastore cluster managed object by name
        Args:
            datastore_cluster_name: Name of datastore cluster

        Returns: Datastore cluster managed object if found else None

        N(RZR<Rt
StoragePodRHR'(Rtdatastore_cluster_nametdata_store_clusterstdsc((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_datastore_cluster_by_name	s
	
cC`s[|s|jj}nt|jtjgd|�}x!|D]}|j|kr:|Sq:WdS(s�
        Get resource pool managed object by name
        Args:
            resource_pool_name: Name of resource pool

        Returns: Resource pool managed object if found else None

        RLN(R<RFRZRRqRHR'(RRrRLtresource_poolstrp((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyRss	
t	ResourcescC`skd}|s|S|dkr^|jj}|rgx*|D]}|j|kr5|}Pq5q5Wqgn	|j}|S(s�
        Get resource pool managed object by cluster object
        Args:
            resource_pool_name: Name of resource pool
            cluster: Managed object of cluster

        Returns: Resource pool managed object if found else None

        R+N(R'tresourcePoolRH(RRrR�t
desired_rpR)R*((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_resource_pool_by_cluster+s

	cC`s�yvtjd|tj�j�d}tjd|�j�d}tjj|�}tjj|�}||||fSWn<tt	fk
r�}|j
jdd|t|�f�nXdS(s�
        Takes a string in the format

            [datastore_name] path/to/vm_name.vmdk

        Returns a tuple with multiple strings:

        1. datastore_name: The name of the datastore (without brackets)
        2. vmdk_fullpath: The "path/to/vm_name.vmdk" portion
        3. vmdk_filename: The "vm_name.vmdk" portion of the string (os.path.basename equivalent)
        4. vmdk_folder: The "path/to/" portion of the string (os.path.dirname equivalent)
        s
^\[(.*?)\]is
\[.*?\] (.*)$R(s.Bad path '%s' for filename disk vmdk image: %sN(
tretmatchtDOTALLtgroupsR�R�RR�R�R*RdRNR(Rt	vmdk_pathRit
vmdk_fullpatht
vmdk_filenametvmdk_folderR�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytvmdk_disk_path_splitGs
"c	C`s�|j}|j}d|d}|dkrF|jjdd|�ntjjjj	dt
dt
dt
dt
�}tjjjd	|d
|gdt
�}	|jd|d
|	�}
t
}|d|}yt|
�\}}
Wn,tk
r
}|jjdt|��nX|s+|jjdd|�n|d|d|d|g}xP|
jjD]B}x9t|d�D](}|j|krn|j|krn|SqnWqXW|jjdd|�dS(sF
        Return vSphere file object or fail_json
        Args:
            datastore_obj: Managed object of datastore
            vmdk_fullpath: Path of VMDK file e.g., path/to/vm/vmdk_filename.vmdk
            vmdk_filename: Name of vmdk e.g., VM0001_1.vmdk
            vmdk_folder: Base dir of VMDK e.g, path/to/vm

        t[t]R(s)Unable to access browser for datastore %st	fileOwnertfileSizetfileTypetmodificationR�tmatchPatterntsearchCaseInsensitivet
datastorePatht
searchSpect s*No valid disk vmdk image found for path %sR�tfiles*No vmdk file found for path specified [%s]N(tbrowserRHR'RdRNRR�tDatastoreBrowsertFileInfotDetailsRt
SearchSpectSearchSubFoldersR�R7RRR R%R�R�t
folderPath(RR"R4R5R6RDRitdatastore_name_sqtdetail_querytsearch_spect
search_resR�R3R%ttask_ettarget_folder_pathstfile_resultR((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytfind_vmdk_file]s@							cC`sbx[t|�D]M\}}t|tj�rP|j|j|i�|�||<q
|||<q
W|S(s�
        Deep merges u into d.

        Credit:
          https://bit.ly/2EDOs1B (stackoverflow question 3232943)
        License:
          cc-by-sa 3.0 (https://creativecommons.org/licenses/by-sa/3.0/)
        Changes:
          using collections_compat for compatibility

        Args:
          - d (dict): dict to merge into
          - u (dict): dict to merge into d

        Returns:
          dict, with u merged into d
        (R
RXtcollections_compattMappingt
_deepmergeR(RtdtuR�R�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyRU�s
%cC`s]t�}d|kr'||||<|S|jdd�\}}|j|||�||<|S(s�
        This is used to break down dotted properties for extraction.

        Args:
          - data (dict): result of _jsonify on a property
          - remainder: the remainder of the dotted property to select

        Return:
          dict
        Ri(R:tsplitt_extract(RR�t	remainderR%R�((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyRY�s	c	C`s+tjtj|dtjdtdt��S(s�
        Convert an object from pyVmomi into JSON.

        Args:
          - obj (object): vim object

        Return:
          dict
        tclst	sort_keyst
strip_dynamic(tjsontloadstdumpsRR	R(RRN((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyt_jsonify�s
c	C`sZts|jjdd�nt�}|rGx(|D]}y�d|kr�|jdd�\}}t�}|j|jt||��|�||<|j||�nf|jt||��||<|}|j	�dkr�d}n|j	�dkr�d}n||||<Wq2t
tfk
r?|jjdd	j|��q2Xq2Wn|j|�}|S(
s�
        Convert a vSphere (pyVmomi) Object into JSON.  This is a deep
        transformation.  The list of properties is optional - if not
        provided then all properties are deeply converted.  The resulting
        JSON is sorted to improve human readability.

        Requires upstream support from pyVmomi > 6.7.1
        (https://github.com/vmware/pyvmomi/pull/732)

        Args:
          - obj (object): vim object
          - properties (list, optional): list of properties following
                the property collector specification, for example:
                ["config.hardware.memoryMB", "name", "overallStatus"]
                default is a complete object dump, which can be large

        Return:
          dict
        R(sNThe installed version of pyvmomi lacks JSON output support; need pyvmomi>6.7.1Rit_moidR�t_vimrefR�sProperty '{0}' not found.(
tHAS_PYVMOMIJSONRdRNR:RXRYRaR�RUR-R*tKeyErrortformat(	RRNR�R%tpropR�RZttmpt	prop_name((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytto_json�s,	
	(		'cC`scd|j}xOt|d�r^|jr^|j|jjkrAPn|j}d|j|}qW|S(NR�Rf(RHR)RfR<RF(Rtcurt	full_path((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pytget_folder_paths
	N(!RRRR�R'R�RRtstaticmethodR�RRbR
RpRRR�RRvRReR#RjR(RsR.R7RRRURYRaRjRm(((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyR�8s:		0	Z	-		$	
				;			
/([t
__future__RRRRCt
__metaclass__R`t/ansible.module_utils.common._collections_compattmodule_utilstcommont_collections_compatRSR^R�R/RORt	tracebacktrandomRtdistutils.versionRR'R�R\RR�tImportErrort
format_excR�R�tpyVimRtpyVmomiRRRR�R)Rdtansible.module_utils._textR
Rtansible.module_utils.sixRR
RRt+ansible.module_utils.six.moves.urllib.parseRtansible.module_utils.basicRRtansible.module_utils.urlsRR�RR7RARPRVR]RbReRgRjRmRpRsRvR�R�R�R�R�R;RR R#RRRFRrRZR�R�R�R�R�tobjectR�(((s?/usr/lib/python2.7/site-packages/ansible/module_utils/vmware.pyt<module>s�




"$	
					&				�								"Y	6	5	T

Anons79 File Manager Version 1.0, Coded By Anons79
Email: [email protected]