From fd0ace6e8eac35a4c7b1e41070a360c7c6c618ea Mon Sep 17 00:00:00 2001 From: Marin Atanasov Nikolov Date: Mon, 31 Mar 2014 18:05:15 +0300 Subject: [PATCH] Add method for getting all VMs running on a specified HostSystem --- src/vpoller/agent.py | 48 +++++++++++++++++++++++++++++++++++++++++++ src/vpoller/worker.py | 4 ++++ 2 files changed, 52 insertions(+) diff --git a/src/vpoller/agent.py b/src/vpoller/agent.py index 2110913..ee2542a 100644 --- a/src/vpoller/agent.py +++ b/src/vpoller/agent.py @@ -526,6 +526,54 @@ def host_get(self, msg): obj_property_value=msg['name'] ) + def host_vm_get(self, msg): + """ + Get all Virtual Machines running on this HostSystem + + Example client message would be: + + { + "method": "host.vm.get", + "hostname": "vc01.example.org", + "name": "esxi01.example.org", + } + + Returns: + The managed object properties in JSON format + + """ + # Find the HostSystem managed object and get the 'vm' property + data = self._get_object_properties( + properties=['name', 'vm'], + obj_type=pyVmomi.vim.HostSystem, + obj_property_name='name', + obj_property_value=msg['name'] + ) + + if data['success'] != 0: + return data + + props = data['result'][0] + host_name, host_vms = props['name'], props['vm'] + + # Create a list view for the VirtualMachine managed objects + view_ref = self.get_list_view(obj=host_vms) + result = {} + result['name'] = host_name + result['vm'] = self.collect_properties( + view_ref=view_ref, + obj_type=pyVmomi.vim.VirtualMachine, + path_set=['name'] + ) + + r = { + 'success': 0, + 'msg': 'Successfully discovered objects', + 'result': result, + } + + return r + def host_datastore_get(self, msg): """ Get all Datastores available for a pyVmomi.vim.HostSystem managed object diff --git a/src/vpoller/worker.py b/src/vpoller/worker.py index 98eec83..52db4c1 100644 --- a/src/vpoller/worker.py +++ b/src/vpoller/worker.py @@ -330,6 +330,10 @@ def process_client_msg(self, msg): 'method': self.agents[vsphere_host].host_get, 'msg_attr': ('method', 'hostname', 'name', 'properties'), }, + 'host.vm.get': { + 'method': self.agents[vsphere_host].host_vm_get, + 'msg_attr': ('method', 'hostname', 'name'), + }, 'host.datastore.get': { 'method': self.agents[vsphere_host].host_datastore_get, 'msg_attr': ('method', 'hostname'),