Skip to content

Commit b2de631

Browse files
committedJan 26, 2015
vPoller tasks are now created using the @vpoller.decorators.task decorator
1 parent 2fbe665 commit b2de631

File tree

1 file changed

+43
-218
lines changed

1 file changed

+43
-218
lines changed
 

‎src/vpoller/agent.py

+43-218
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@
3939
import logging
4040

4141
import pyVmomi
42+
4243
from vconnector.core import VConnector
44+
from vpoller.decorators import task
4345

4446

4547
class VSphereAgent(VConnector):
@@ -62,221 +64,6 @@ def __init__(self, user, pwd, host):
6264
"""
6365
super(VSphereAgent, self).__init__(user, pwd, host)
6466

65-
# Message attribute types we expect to receive
66-
# before we start processing a task request
67-
self.msg_attr_types = {
68-
'hostname': (types.StringType, types.UnicodeType),
69-
'name': (types.StringType, types.UnicodeType, types.NoneType),
70-
'key': (types.StringType, types.UnicodeType, types.NoneType),
71-
'username': (types.StringType, types.UnicodeType, types.NoneType),
72-
'password': (types.StringType, types.UnicodeType, types.NoneType),
73-
'properties': (types.TupleType, types.ListType, types.NoneType),
74-
}
75-
76-
# Supported vSphere Agent methods where the
77-
# 'method' key is a reference to the actual method
78-
# which will be called and 'required' is a list of
79-
# required message attributes that a client task
80-
# must provide during the call
81-
self.agent_methods = {
82-
'about': {
83-
'method': self.about,
84-
'required': ['hostname'],
85-
},
86-
'event.latest': {
87-
'method': self.event_latest,
88-
'required': ['hostname'],
89-
},
90-
'session.get': {
91-
'method': self.session_get,
92-
'required': ['hostname'],
93-
},
94-
'net.discover': {
95-
'method': self.net_discover,
96-
'required': ['hostname'],
97-
},
98-
'net.get': {
99-
'method': self.net_get,
100-
'required': ['hostname', 'name'],
101-
},
102-
'net.host.get': {
103-
'method': self.net_host_get,
104-
'required': ['hostname', 'name'],
105-
},
106-
'net.vm.get': {
107-
'method': self.net_vm_get,
108-
'required': ['hostname', 'name'],
109-
},
110-
'datacenter.discover': {
111-
'method': self.datacenter_discover,
112-
'required': ['hostname'],
113-
},
114-
'datacenter.get': {
115-
'method': self.datacenter_get,
116-
'required': ['hostname', 'name', 'properties'],
117-
},
118-
'datacenter.perf.metric.get': {
119-
'method': self.datacenter_perf_metric_get,
120-
'required': ['hostname', 'name', 'properties'],
121-
},
122-
'datacenter.perf.metric.info': {
123-
'method': self.datacenter_perf_metric_info,
124-
'required': ['hostname', 'name'],
125-
},
126-
'datacenter.alarm.get': {
127-
'method': self.datacenter_alarm_get,
128-
'required': ['hostname', 'name'],
129-
},
130-
'cluster.perf.metric.get': {
131-
'method': self.cluster_perf_metric_get,
132-
'required': ['hostname', 'name', 'properties'],
133-
},
134-
'cluster.perf.metric.info': {
135-
'method': self.cluster_perf_metric_info,
136-
'required': ['hostname', 'name'],
137-
},
138-
'cluster.discover': {
139-
'method': self.cluster_discover,
140-
'required': ['hostname'],
141-
},
142-
'cluster.get': {
143-
'method': self.cluster_get,
144-
'required': ['hostname', 'name', 'properties'],
145-
},
146-
'cluster.alarm.get': {
147-
'method': self.cluster_alarm_get,
148-
'required': ['hostname', 'name'],
149-
},
150-
'resource.pool.discover': {
151-
'method': self.resource_pool_discover,
152-
'required': ['hostname'],
153-
},
154-
'resource.pool.get': {
155-
'method': self.resource_pool_get,
156-
'required': ['hostname', 'name', 'properties'],
157-
},
158-
'host.perf.metric.get': {
159-
'method': self.host_perf_metric_get,
160-
'required': ['hostname', 'name', 'properties'],
161-
},
162-
'host.perf.metric.info': {
163-
'method': self.host_perf_metric_info,
164-
'required': ['hostname', 'name'],
165-
},
166-
'host.discover': {
167-
'method': self.host_discover,
168-
'required': ['hostname'],
169-
},
170-
'host.alarm.get': {
171-
'method': self.host_alarm_get,
172-
'required': ['hostname', 'name']
173-
},
174-
'host.get': {
175-
'method': self.host_get,
176-
'required': ['hostname', 'name', 'properties'],
177-
},
178-
'host.cluster.get': {
179-
'method': self.host_cluster_get,
180-
'required': ['hostname', 'name'],
181-
},
182-
'host.vm.get': {
183-
'method': self.host_vm_get,
184-
'required': ['hostname', 'name'],
185-
},
186-
'host.datastore.get': {
187-
'method': self.host_datastore_get,
188-
'required': ['hostname'],
189-
},
190-
'host.net.get': {
191-
'method': self.host_net_get,
192-
'required': ['hostname', 'name'],
193-
},
194-
'vm.alarm.get': {
195-
'method': self.vm_alarm_get,
196-
'required': ['hostname', 'name'],
197-
},
198-
'vm.discover': {
199-
'method': self.vm_discover,
200-
'required': ['hostname'],
201-
},
202-
'vm.disk.discover': {
203-
'method': self.vm_disk_discover,
204-
'required': ['hostname', 'name'],
205-
},
206-
'vm.get': {
207-
'method': self.vm_get,
208-
'required': ['hostname', 'name', 'properties'],
209-
},
210-
'vm.datastore.get': {
211-
'method': self.vm_datastore_get,
212-
'required': ['hostname', 'name'],
213-
},
214-
'vm.disk.get': {
215-
'method': self.vm_disk_get,
216-
'required': ['hostname', 'name', 'key'],
217-
},
218-
'vm.host.get': {
219-
'method': self.vm_host_get,
220-
'required': ['hostname', 'name'],
221-
},
222-
'vm.guest.net.get': {
223-
'method': self.vm_guest_net_get,
224-
'required': ['hostname', 'name'],
225-
},
226-
'vm.net.get': {
227-
'method': self.vm_net_get,
228-
'required': ['hostname', 'name'],
229-
},
230-
'vm.perf.metric.get': {
231-
'method': self.vm_perf_metric_get,
232-
'required': ['hostname', 'name', 'properties'],
233-
},
234-
'vm.perf.metric.info': {
235-
'method': self.vm_perf_metric_info,
236-
'required': ['hostname', 'name'],
237-
},
238-
'vm.process.get': {
239-
'method': self.vm_process_get,
240-
'required': ['hostname', 'name', 'username', 'password'],
241-
},
242-
'vm.cpu.usage.percent': {
243-
'method': self.vm_cpu_usage_percent,
244-
'required': ['hostname', 'name'],
245-
},
246-
'datastore.discover': {
247-
'method': self.datastore_discover,
248-
'required': ['hostname'],
249-
},
250-
'datastore.get': {
251-
'method': self.datastore_get,
252-
'required': ['hostname', 'name', 'properties'],
253-
},
254-
'datastore.alarm.get': {
255-
'method': self.datastore_alarm_get,
256-
'required': ['hostname', 'name'],
257-
},
258-
'datastore.host.get': {
259-
'method': self.datastore_host_get,
260-
'required': ['hostname', 'name'],
261-
},
262-
'datastore.vm.get': {
263-
'method': self.datastore_vm_get,
264-
'required': ['hostname', 'name'],
265-
},
266-
'datastore.perf.metric.info': {
267-
'method': self.datastore_perf_metric_info,
268-
'required': ['hostname', 'name'],
269-
},
270-
'perf.metric.info': {
271-
'method': self.perf_metric_info,
272-
'required': ['hostname'],
273-
},
274-
'perf.interval.info': {
275-
'method': self.perf_interval_info,
276-
'required': ['hostname'],
277-
},
278-
}
279-
28067
def _validate_client_msg(self, msg, required):
28168
"""
28269
Helper method for validating a client message
@@ -1340,6 +1127,7 @@ def cluster_discover(self, msg):
13401127

13411128
return r
13421129

1130+
@task(name='cluster.perf.metric.get', required=['name', 'counter-id'])
13431131
def cluster_perf_metric_get(self, msg):
13441132
"""
13451133
Get performance metrics for a vim.ClusterComputeResource managed object
@@ -1353,7 +1141,7 @@ def cluster_perf_metric_get(self, msg):
13531141
"method": "cluster.perf.metric.get",
13541142
"hostname": "vc01.example.org",
13551143
"name": "MyCluster",
1356-
"properties": [
1144+
"counter-id": [
13571145
276, # Effective memory resources
13581146
277 # Total amount of CPU resources of all hosts in the cluster
13591147
],
@@ -1383,6 +1171,7 @@ def cluster_perf_metric_get(self, msg):
13831171
interval_key=key
13841172
)
13851173

1174+
@task(name='cluster.perf.metric.info')
13861175
def cluster_perf_metric_info(self, msg):
13871176
"""
13881177
Get performance counters available for a vim.ClusterComputeResource object
@@ -1413,6 +1202,7 @@ def cluster_perf_metric_info(self, msg):
14131202

14141203
return self._entity_perf_metric_info(entity=obj, counter_id=counter_id)
14151204

1205+
@task(name='cluster.get', required=['name', 'properties'])
14161206
def cluster_get(self, msg):
14171207
"""
14181208
Get properties of a vim.ClusterComputeResource managed object
@@ -1445,6 +1235,7 @@ def cluster_get(self, msg):
14451235
obj_property_value=msg['name']
14461236
)
14471237

1238+
@task(name='cluster.alarm.get', required=['name'])
14481239
def cluster_alarm_get(self, msg):
14491240
"""
14501241
Get all alarms for a vim.ClusterComputeResource managed object
@@ -1469,6 +1260,7 @@ def cluster_alarm_get(self, msg):
14691260

14701261
return result
14711262

1263+
@task(name='resource.pool.discover')
14721264
def resource_pool_discover(self, msg):
14731265
"""
14741266
Discover all vim.ResourcePool managed objects
@@ -1507,6 +1299,7 @@ def resource_pool_discover(self, msg):
15071299

15081300
return r
15091301

1302+
@task(name='resource.pool.get', required=['name', 'properties'])
15101303
def resource_pool_get(self, msg):
15111304
"""
15121305
Get properties of a single vim.ResourcePool managed object
@@ -1541,6 +1334,7 @@ def resource_pool_get(self, msg):
15411334
obj_property_value=msg['name']
15421335
)
15431336

1337+
@task(name='host.discover')
15441338
def host_discover(self, msg):
15451339
"""
15461340
Discover all vim.HostSystem managed objects
@@ -1579,6 +1373,7 @@ def host_discover(self, msg):
15791373

15801374
return r
15811375

1376+
@task(name='host.get', required=['name', 'properties'])
15821377
def host_get(self, msg):
15831378
"""
15841379
Get properties of a single vim.HostSystem managed object
@@ -1611,6 +1406,7 @@ def host_get(self, msg):
16111406
obj_property_value=msg['name']
16121407
)
16131408

1409+
@task(name='host.alarm.get', required=['name'])
16141410
def host_alarm_get(self, msg):
16151411
"""
16161412
Get all alarms for a vim.HostSystem managed object
@@ -1635,6 +1431,7 @@ def host_alarm_get(self, msg):
16351431

16361432
return result
16371433

1434+
@task(name='host.perf.metric.get', required=['name', 'counter-id'])
16381435
def host_perf_metric_get(self, msg):
16391436
"""
16401437
Get performance metrics for a vim.HostSystem managed object
@@ -1678,6 +1475,7 @@ def host_perf_metric_get(self, msg):
16781475
interval_key=key
16791476
)
16801477

1478+
@task(name='host.perf.metric.info', required=['name'])
16811479
def host_perf_metric_info(self, msg):
16821480
"""
16831481
Get performance counters available for a vim.HostSystem object
@@ -1708,6 +1506,7 @@ def host_perf_metric_info(self, msg):
17081506

17091507
return self._entity_perf_metric_info(entity=obj, counter_id=counter_id)
17101508

1509+
@task(name='host.cluster.get', required=['name'])
17111510
def host_cluster_get(self, msg):
17121511
"""
17131512
Get the cluster name for a HostSystem
@@ -1758,6 +1557,7 @@ def host_cluster_get(self, msg):
17581557

17591558
return r
17601559

1560+
@task(name='host.vm.get', required=['name'])
17611561
def host_vm_get(self, msg):
17621562
"""
17631563
Get all vim.VirtualMachine objects of a HostSystem
@@ -1818,6 +1618,7 @@ def host_vm_get(self, msg):
18181618

18191619
return r
18201620

1621+
@task(name='host.net.get', required=['name'])
18211622
def host_net_get(self, msg):
18221623
"""
18231624
Get all Networks used by a vim.HostSystem managed object
@@ -1881,6 +1682,7 @@ def host_net_get(self, msg):
18811682

18821683
return r
18831684

1685+
@task(name='host.datastore.get', required=['name'])
18841686
def host_datastore_get(self, msg):
18851687
"""
18861688
Get all Datastores used by a vim.HostSystem managed object
@@ -1902,6 +1704,7 @@ def host_datastore_get(self, msg):
19021704
name=msg['name']
19031705
)
19041706

1707+
@task(name='vm.alarm.get', required=['name'])
19051708
def vm_alarm_get(self, msg):
19061709
"""
19071710
Get all alarms for a vim.VirtualMachine managed object
@@ -1926,6 +1729,7 @@ def vm_alarm_get(self, msg):
19261729

19271730
return result
19281731

1732+
@task(name='vm.perf.metric.get', required=['name', 'counter-id'])
19291733
def vm_perf_metric_get(self, msg):
19301734
"""
19311735
Get performance metrics for a vim.VirtualMachine managed object
@@ -1939,7 +1743,7 @@ def vm_perf_metric_get(self, msg):
19391743
"method": "vm.perf.metric.get",
19401744
"hostname": "vc01.example.org",
19411745
"name": "vm01.example.org",
1942-
"properties": [
1746+
"counter-id"
19431747
12, # CPU Ready time of the Virtual Machine
19441748
],
19451749
"max_sample": 1,
@@ -1983,6 +1787,7 @@ def vm_perf_metric_get(self, msg):
19831787
instance=instance
19841788
)
19851789

1790+
@task(name='vm.perf.metric.info')
19861791
def vm_perf_metric_info(self, msg):
19871792
"""
19881793
Get performance counters available for a vim.VirtualMachine object
@@ -2013,6 +1818,7 @@ def vm_perf_metric_info(self, msg):
20131818

20141819
return self._entity_perf_metric_info(entity=obj, counter_id=counter_id)
20151820

1821+
@task(name='vm.discover')
20161822
def vm_discover(self, msg):
20171823
"""
20181824
Discover all pyVmomi.vim.VirtualMachine managed objects
@@ -2052,6 +1858,7 @@ def vm_discover(self, msg):
20521858

20531859
return r
20541860

1861+
@task(name='vm.disk.discover', required=['name'])
20551862
def vm_disk_discover(self, msg):
20561863
"""
20571864
Discover all disks used by a vim.VirtualMachine managed object
@@ -2131,6 +1938,7 @@ def vm_disk_discover(self, msg):
21311938

21321939
return r
21331940

1941+
@task(name='vm.guest.net.get', required=['name'])
21341942
def vm_guest_net_get(self, msg):
21351943
"""
21361944
Discover network adapters for a vim.VirtualMachine object
@@ -2212,6 +2020,7 @@ def vm_guest_net_get(self, msg):
22122020

22132021
return r
22142022

2023+
@task(name='vm.net.get', required=['name'])
22152024
def vm_net_get(self, msg):
22162025
"""
22172026
Get all Networks used by a vim.VirtualMachine managed object
@@ -2275,6 +2084,7 @@ def vm_net_get(self, msg):
22752084

22762085
return r
22772086

2087+
@task(name='vm.get', required=['name', 'properties'])
22782088
def vm_get(self, msg):
22792089
"""
22802090
Get properties for a vim.VirtualMachine managed object
@@ -2307,6 +2117,7 @@ def vm_get(self, msg):
23072117
obj_property_value=msg['name']
23082118
)
23092119

2120+
@task(name='vm.host.get', required=['name'])
23102121
def vm_host_get(self, msg):
23112122
"""
23122123
Get the vSphere host where a Virtual Machine is running on
@@ -2361,6 +2172,7 @@ def vm_host_get(self, msg):
23612172

23622173
return r
23632174

2175+
@task(name='vm.datastore.get', required=['name'])
23642176
def vm_datastore_get(self, msg):
23652177
"""
23662178
Get all Datastores used by a vim.VirtualMachine managed object
@@ -2382,6 +2194,7 @@ def vm_datastore_get(self, msg):
23822194
name=msg['name']
23832195
)
23842196

2197+
@task(name='vm.disk.get', required=['name'])
23852198
def vm_disk_get(self, msg):
23862199
"""
23872200
Get properties for a disk of a vim.VirtualMachine object
@@ -2468,6 +2281,7 @@ def vm_disk_get(self, msg):
24682281

24692282
return r
24702283

2284+
@task(name='vm.process.get', required=['name', 'username', 'password'])
24712285
def vm_process_get(self, msg):
24722286
"""
24732287
Get processes running on a vim.VirtualMachine managed object
@@ -2579,10 +2393,13 @@ def vm_process_get(self, msg):
25792393

25802394
return r
25812395

2396+
@task(name='vm.cpu.usage.percent', required=['name'])
25822397
def vm_cpu_usage_percent(self, msg):
25832398
"""
25842399
Get the CPU usage in percentage for a VirtualMachine
25852400
2401+
NOTE: This task will be gone after the transition to performance counters
2402+
25862403
Example client message would be:
25872404
25882405
{
@@ -2671,6 +2488,7 @@ def vm_cpu_usage_percent(self, msg):
26712488

26722489
return r
26732490

2491+
@task(name='datastore.discover')
26742492
def datastore_discover(self, msg):
26752493
"""
26762494
Discover all pyVmomi.vim.Datastore managed objects
@@ -2710,6 +2528,7 @@ def datastore_discover(self, msg):
27102528

27112529
return r
27122530

2531+
@task(name='datastore.get', required=['name', 'properties'])
27132532
def datastore_get(self, msg):
27142533
"""
27152534
Get properties for a vim.Datastore managed object
@@ -2743,6 +2562,7 @@ def datastore_get(self, msg):
27432562
obj_property_value=msg['name']
27442563
)
27452564

2565+
@task(name='datastore.alarm.get', required=['name'])
27462566
def datastore_alarm_get(self, msg):
27472567
"""
27482568
Get all alarms for a vim.Datastore managed object
@@ -2767,6 +2587,7 @@ def datastore_alarm_get(self, msg):
27672587

27682588
return result
27692589

2590+
@task(name='datastore.host.get', required=['name'])
27702591
def datastore_host_get(self, msg):
27712592
"""
27722593
Get all HostSystem objects attached to a specific Datastore
@@ -2831,6 +2652,7 @@ def datastore_host_get(self, msg):
28312652

28322653
return r
28332654

2655+
@task(name='datastore.vm.get', required=['name'])
28342656
def datastore_vm_get(self, msg):
28352657
"""
28362658
Get all VirtualMachine objects using a specific Datastore
@@ -2891,6 +2713,7 @@ def datastore_vm_get(self, msg):
28912713

28922714
return r
28932715

2716+
@task(name='datastore.perf.metric.info', required=['name'])
28942717
def datastore_perf_metric_info(self, msg):
28952718
"""
28962719
Get performance counters available for a vim.Datastore object
@@ -2921,6 +2744,7 @@ def datastore_perf_metric_info(self, msg):
29212744

29222745
return self._entity_perf_metric_info(entity=obj, counter_id=counter_id)
29232746

2747+
@task(name='datastore.perf.metric.get', required=['name', 'counter-id'])
29242748
def datastore_perf_metric_get(self, msg):
29252749
"""
29262750
Get performance metrics for a vim.Datastore managed object
@@ -2934,7 +2758,7 @@ def datastore_perf_metric_get(self, msg):
29342758
"method": "datastore.perf.metric.get",
29352759
"hostname": "vc01.example.org",
29362760
"name": "ds:///vmfs/volumes/643f118a-a970df28/",
2937-
"properties": [
2761+
"counter-id": [
29382762
X,
29392763
Y
29402764
],
@@ -2976,3 +2800,4 @@ def datastore_perf_metric_get(self, msg):
29762800
instance=msg.get('instance', ''),
29772801
interval_key=msg.get('key'),
29782802
)
2803+

0 commit comments

Comments
 (0)
Please sign in to comment.