summaryrefslogtreecommitdiffstats
path: root/vesagent/py/getAllVmInfo.py
diff options
context:
space:
mode:
authorArun Arora <aroraarun@vmware.com>2017-09-26 21:57:03 +0530
committerArun Arora <aroraarun@vmware.com>2017-10-16 17:12:45 +0530
commite4a8fb1d9a9106a03cf2c30b8165966567339a11 (patch)
tree272ccfda5393e797705795ade21bda1d9aafde77 /vesagent/py/getAllVmInfo.py
parent3406b48e1526dd7723f534d8d36ad183b01cbd06 (diff)
VMWare vesagent for FCAPS
Fix python verify job fail issue Change-Id: If4b7f82fe7175a4d018cd5c5232217e98824c0bd Issue-ID: MULTICLOUD-8 Signed-off-by: Arun Arora <aroraarun@vmware.com>
Diffstat (limited to 'vesagent/py/getAllVmInfo.py')
-rw-r--r--vesagent/py/getAllVmInfo.py178
1 files changed, 178 insertions, 0 deletions
diff --git a/vesagent/py/getAllVmInfo.py b/vesagent/py/getAllVmInfo.py
new file mode 100644
index 0000000..a0c7c6b
--- /dev/null
+++ b/vesagent/py/getAllVmInfo.py
@@ -0,0 +1,178 @@
+#!/usr/bin/env python
+# VMware vSphere Python SDK
+# Copyright (c) 2008-2015 VMware, Inc. All Rights Reserved.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+List the vms on an ESX / vCenter host
+"""
+
+from __future__ import print_function
+from pyVim.connect import SmartConnect, Disconnect
+from pyVmomi import vim
+import argparse
+import atexit
+import getpass
+import ssl
+import json
+import os.path
+
+fp = None
+listjson = []
+propFile="/opt/etc/Agent.properties"
+
+def GetJsonFileLocation():
+ AgntProps = {}
+ if True == os.path.isfile(propFile):
+ with open("/opt/etc/Agent.properties") as propfile:
+ for line in propfile:
+ name, var = line.partition("=")[::2]
+ AgntProps[name.strip()] = var
+ return AgntProps["Python_Output_Json"].strip()
+ else:
+ print(propFile+" Not Found")
+ return None
+
+
+def GetArgs():
+ """
+ Supports the command-line arguments listed below.
+ """
+ parser = argparse.ArgumentParser(
+ description='Process args for retrieving all the Virtual Machines')
+ parser.add_argument('-s', '--host', required=True, action='store',
+ help='Remote host to connect to')
+ parser.add_argument('-o', '--port', type=int, default=443, action='store',
+ help='Port to connect on')
+ parser.add_argument('-u', '--user', required=True, action='store',
+ help='User name to use when connecting to host')
+ parser.add_argument('-p', '--password', required=True, action='store',
+ help='Password to use when connecting to host')
+ args = parser.parse_args()
+ return args
+
+
+def PrintVmInfo(vm, depth=1):
+
+ """
+ Print information for a particular virtual machine or recurse into a folder
+ or vApp with depth protection
+ """
+ maxdepth = 10
+
+
+ # if this is a group it will have children. if it does, recurse into them
+ # and then return
+ if hasattr(vm, 'childEntity'):
+ if depth > maxdepth:
+ return
+ vmList = vm.childEntity
+ for c in vmList:
+ PrintVmInfo(c, depth+1)
+ return
+
+
+ # if this is a vApp, it likely contains child VMs
+ # (vApps can nest vApps, but it is hardly a common usecase, so ignore that)
+ if isinstance(vm, vim.VirtualApp):
+ vmList = vm.vm
+ for c in vmList:
+ PrintVmInfo(c, depth + 1)
+ return
+
+
+ summary = vm.summary
+ #print("Name : ", summary.config.name)
+ #print("Path : ", summary.config.vmPathName)
+ #print("Guest : ", summary.config.guestFullName)
+ #print("Instance UUID: ", summary.config.instanceUuid)
+ #print("Heartbeatstatus: ", vm.guestHeartbeatStatus)
+ if summary.config.name and vm.guestHeartbeatStatus:
+ singleinfo={}
+ singleinfo.update({"Name":summary.config.name})
+ singleinfo.update({"Instance UUID":summary.config.instanceUuid})
+ singleinfo.update({"Heartbeatstatus":vm.guestHeartbeatStatus})
+ #print ("Final SINGLEINFO")
+ listjson.append(singleinfo)
+ else:
+ print ("NAME, UUID OR HEARTBEAT NOT PRESENT")
+
+
+def GetContent(args, context):
+ if hasattr(ssl, '_create_unverified_context'):
+ context = ssl._create_unverified_context()
+ si = SmartConnect(host=args.host,
+ user=args.user,
+ pwd=args.password,
+ port=int(args.port),
+ sslContext=context)
+ if not si:
+ print("Could not connect to the specified host using specified "
+ "username and password")
+ return -1
+
+ atexit.register(Disconnect, si)
+ return si.RetrieveContent()
+
+
+def CreateJsonList(content):
+ for child in content.rootFolder.childEntity:
+ if hasattr(child, 'vmFolder'):
+ datacenter = child
+ vmFolder = datacenter.vmFolder
+ vmList = vmFolder.childEntity
+ for vm in vmList:
+ PrintVmInfo(vm)
+ print (listjson)
+ return listjson
+
+
+def CreateJsonFile(JsonFile, jsonrecord):
+ if(len(jsonrecord) == 0):
+ return False
+ else:
+ #Return False if File Location is None
+ print("Json File Location is:",JsonFile)
+ fp = open(JsonFile, 'w')
+ if not fp:
+ return False
+ else:
+ json.dump(jsonrecord, fp,sort_keys=True, indent=2)
+ fp.close()
+ return True
+
+
+def main():
+ """
+ Simple command-line program for listing the virtual machines on a system.
+ """
+ args = GetArgs()
+
+ context = None
+ content = GetContent(args, context)
+
+ jsonrecord = CreateJsonList(content)
+
+ JsonFile = GetJsonFileLocation()
+ if (None == JsonFile):
+ return -1
+
+ if(True == CreateJsonFile(JsonFile, jsonrecord)):
+ return 0
+ else:
+ return -1
+
+# Start program
+if __name__ == "__main__":
+ main()