39
39
import logging
40
40
41
41
import pyVmomi
42
+
42
43
from vconnector .core import VConnector
44
+ from vpoller .decorators import task
43
45
44
46
45
47
class VSphereAgent (VConnector ):
@@ -62,221 +64,6 @@ def __init__(self, user, pwd, host):
62
64
"""
63
65
super (VSphereAgent , self ).__init__ (user , pwd , host )
64
66
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
-
280
67
def _validate_client_msg (self , msg , required ):
281
68
"""
282
69
Helper method for validating a client message
@@ -1340,6 +1127,7 @@ def cluster_discover(self, msg):
1340
1127
1341
1128
return r
1342
1129
1130
+ @task (name = 'cluster.perf.metric.get' , required = ['name' , 'counter-id' ])
1343
1131
def cluster_perf_metric_get (self , msg ):
1344
1132
"""
1345
1133
Get performance metrics for a vim.ClusterComputeResource managed object
@@ -1353,7 +1141,7 @@ def cluster_perf_metric_get(self, msg):
1353
1141
"method": "cluster.perf.metric.get",
1354
1142
"hostname": "vc01.example.org",
1355
1143
"name": "MyCluster",
1356
- "properties ": [
1144
+ "counter-id ": [
1357
1145
276, # Effective memory resources
1358
1146
277 # Total amount of CPU resources of all hosts in the cluster
1359
1147
],
@@ -1383,6 +1171,7 @@ def cluster_perf_metric_get(self, msg):
1383
1171
interval_key = key
1384
1172
)
1385
1173
1174
+ @task (name = 'cluster.perf.metric.info' )
1386
1175
def cluster_perf_metric_info (self , msg ):
1387
1176
"""
1388
1177
Get performance counters available for a vim.ClusterComputeResource object
@@ -1413,6 +1202,7 @@ def cluster_perf_metric_info(self, msg):
1413
1202
1414
1203
return self ._entity_perf_metric_info (entity = obj , counter_id = counter_id )
1415
1204
1205
+ @task (name = 'cluster.get' , required = ['name' , 'properties' ])
1416
1206
def cluster_get (self , msg ):
1417
1207
"""
1418
1208
Get properties of a vim.ClusterComputeResource managed object
@@ -1445,6 +1235,7 @@ def cluster_get(self, msg):
1445
1235
obj_property_value = msg ['name' ]
1446
1236
)
1447
1237
1238
+ @task (name = 'cluster.alarm.get' , required = ['name' ])
1448
1239
def cluster_alarm_get (self , msg ):
1449
1240
"""
1450
1241
Get all alarms for a vim.ClusterComputeResource managed object
@@ -1469,6 +1260,7 @@ def cluster_alarm_get(self, msg):
1469
1260
1470
1261
return result
1471
1262
1263
+ @task (name = 'resource.pool.discover' )
1472
1264
def resource_pool_discover (self , msg ):
1473
1265
"""
1474
1266
Discover all vim.ResourcePool managed objects
@@ -1507,6 +1299,7 @@ def resource_pool_discover(self, msg):
1507
1299
1508
1300
return r
1509
1301
1302
+ @task (name = 'resource.pool.get' , required = ['name' , 'properties' ])
1510
1303
def resource_pool_get (self , msg ):
1511
1304
"""
1512
1305
Get properties of a single vim.ResourcePool managed object
@@ -1541,6 +1334,7 @@ def resource_pool_get(self, msg):
1541
1334
obj_property_value = msg ['name' ]
1542
1335
)
1543
1336
1337
+ @task (name = 'host.discover' )
1544
1338
def host_discover (self , msg ):
1545
1339
"""
1546
1340
Discover all vim.HostSystem managed objects
@@ -1579,6 +1373,7 @@ def host_discover(self, msg):
1579
1373
1580
1374
return r
1581
1375
1376
+ @task (name = 'host.get' , required = ['name' , 'properties' ])
1582
1377
def host_get (self , msg ):
1583
1378
"""
1584
1379
Get properties of a single vim.HostSystem managed object
@@ -1611,6 +1406,7 @@ def host_get(self, msg):
1611
1406
obj_property_value = msg ['name' ]
1612
1407
)
1613
1408
1409
+ @task (name = 'host.alarm.get' , required = ['name' ])
1614
1410
def host_alarm_get (self , msg ):
1615
1411
"""
1616
1412
Get all alarms for a vim.HostSystem managed object
@@ -1635,6 +1431,7 @@ def host_alarm_get(self, msg):
1635
1431
1636
1432
return result
1637
1433
1434
+ @task (name = 'host.perf.metric.get' , required = ['name' , 'counter-id' ])
1638
1435
def host_perf_metric_get (self , msg ):
1639
1436
"""
1640
1437
Get performance metrics for a vim.HostSystem managed object
@@ -1678,6 +1475,7 @@ def host_perf_metric_get(self, msg):
1678
1475
interval_key = key
1679
1476
)
1680
1477
1478
+ @task (name = 'host.perf.metric.info' , required = ['name' ])
1681
1479
def host_perf_metric_info (self , msg ):
1682
1480
"""
1683
1481
Get performance counters available for a vim.HostSystem object
@@ -1708,6 +1506,7 @@ def host_perf_metric_info(self, msg):
1708
1506
1709
1507
return self ._entity_perf_metric_info (entity = obj , counter_id = counter_id )
1710
1508
1509
+ @task (name = 'host.cluster.get' , required = ['name' ])
1711
1510
def host_cluster_get (self , msg ):
1712
1511
"""
1713
1512
Get the cluster name for a HostSystem
@@ -1758,6 +1557,7 @@ def host_cluster_get(self, msg):
1758
1557
1759
1558
return r
1760
1559
1560
+ @task (name = 'host.vm.get' , required = ['name' ])
1761
1561
def host_vm_get (self , msg ):
1762
1562
"""
1763
1563
Get all vim.VirtualMachine objects of a HostSystem
@@ -1818,6 +1618,7 @@ def host_vm_get(self, msg):
1818
1618
1819
1619
return r
1820
1620
1621
+ @task (name = 'host.net.get' , required = ['name' ])
1821
1622
def host_net_get (self , msg ):
1822
1623
"""
1823
1624
Get all Networks used by a vim.HostSystem managed object
@@ -1881,6 +1682,7 @@ def host_net_get(self, msg):
1881
1682
1882
1683
return r
1883
1684
1685
+ @task (name = 'host.datastore.get' , required = ['name' ])
1884
1686
def host_datastore_get (self , msg ):
1885
1687
"""
1886
1688
Get all Datastores used by a vim.HostSystem managed object
@@ -1902,6 +1704,7 @@ def host_datastore_get(self, msg):
1902
1704
name = msg ['name' ]
1903
1705
)
1904
1706
1707
+ @task (name = 'vm.alarm.get' , required = ['name' ])
1905
1708
def vm_alarm_get (self , msg ):
1906
1709
"""
1907
1710
Get all alarms for a vim.VirtualMachine managed object
@@ -1926,6 +1729,7 @@ def vm_alarm_get(self, msg):
1926
1729
1927
1730
return result
1928
1731
1732
+ @task (name = 'vm.perf.metric.get' , required = ['name' , 'counter-id' ])
1929
1733
def vm_perf_metric_get (self , msg ):
1930
1734
"""
1931
1735
Get performance metrics for a vim.VirtualMachine managed object
@@ -1939,7 +1743,7 @@ def vm_perf_metric_get(self, msg):
1939
1743
"method": "vm.perf.metric.get",
1940
1744
"hostname": "vc01.example.org",
1941
1745
"name": "vm01.example.org",
1942
- "properties": [
1746
+ "counter-id"
1943
1747
12, # CPU Ready time of the Virtual Machine
1944
1748
],
1945
1749
"max_sample": 1,
@@ -1983,6 +1787,7 @@ def vm_perf_metric_get(self, msg):
1983
1787
instance = instance
1984
1788
)
1985
1789
1790
+ @task (name = 'vm.perf.metric.info' )
1986
1791
def vm_perf_metric_info (self , msg ):
1987
1792
"""
1988
1793
Get performance counters available for a vim.VirtualMachine object
@@ -2013,6 +1818,7 @@ def vm_perf_metric_info(self, msg):
2013
1818
2014
1819
return self ._entity_perf_metric_info (entity = obj , counter_id = counter_id )
2015
1820
1821
+ @task (name = 'vm.discover' )
2016
1822
def vm_discover (self , msg ):
2017
1823
"""
2018
1824
Discover all pyVmomi.vim.VirtualMachine managed objects
@@ -2052,6 +1858,7 @@ def vm_discover(self, msg):
2052
1858
2053
1859
return r
2054
1860
1861
+ @task (name = 'vm.disk.discover' , required = ['name' ])
2055
1862
def vm_disk_discover (self , msg ):
2056
1863
"""
2057
1864
Discover all disks used by a vim.VirtualMachine managed object
@@ -2131,6 +1938,7 @@ def vm_disk_discover(self, msg):
2131
1938
2132
1939
return r
2133
1940
1941
+ @task (name = 'vm.guest.net.get' , required = ['name' ])
2134
1942
def vm_guest_net_get (self , msg ):
2135
1943
"""
2136
1944
Discover network adapters for a vim.VirtualMachine object
@@ -2212,6 +2020,7 @@ def vm_guest_net_get(self, msg):
2212
2020
2213
2021
return r
2214
2022
2023
+ @task (name = 'vm.net.get' , required = ['name' ])
2215
2024
def vm_net_get (self , msg ):
2216
2025
"""
2217
2026
Get all Networks used by a vim.VirtualMachine managed object
@@ -2275,6 +2084,7 @@ def vm_net_get(self, msg):
2275
2084
2276
2085
return r
2277
2086
2087
+ @task (name = 'vm.get' , required = ['name' , 'properties' ])
2278
2088
def vm_get (self , msg ):
2279
2089
"""
2280
2090
Get properties for a vim.VirtualMachine managed object
@@ -2307,6 +2117,7 @@ def vm_get(self, msg):
2307
2117
obj_property_value = msg ['name' ]
2308
2118
)
2309
2119
2120
+ @task (name = 'vm.host.get' , required = ['name' ])
2310
2121
def vm_host_get (self , msg ):
2311
2122
"""
2312
2123
Get the vSphere host where a Virtual Machine is running on
@@ -2361,6 +2172,7 @@ def vm_host_get(self, msg):
2361
2172
2362
2173
return r
2363
2174
2175
+ @task (name = 'vm.datastore.get' , required = ['name' ])
2364
2176
def vm_datastore_get (self , msg ):
2365
2177
"""
2366
2178
Get all Datastores used by a vim.VirtualMachine managed object
@@ -2382,6 +2194,7 @@ def vm_datastore_get(self, msg):
2382
2194
name = msg ['name' ]
2383
2195
)
2384
2196
2197
+ @task (name = 'vm.disk.get' , required = ['name' ])
2385
2198
def vm_disk_get (self , msg ):
2386
2199
"""
2387
2200
Get properties for a disk of a vim.VirtualMachine object
@@ -2468,6 +2281,7 @@ def vm_disk_get(self, msg):
2468
2281
2469
2282
return r
2470
2283
2284
+ @task (name = 'vm.process.get' , required = ['name' , 'username' , 'password' ])
2471
2285
def vm_process_get (self , msg ):
2472
2286
"""
2473
2287
Get processes running on a vim.VirtualMachine managed object
@@ -2579,10 +2393,13 @@ def vm_process_get(self, msg):
2579
2393
2580
2394
return r
2581
2395
2396
+ @task (name = 'vm.cpu.usage.percent' , required = ['name' ])
2582
2397
def vm_cpu_usage_percent (self , msg ):
2583
2398
"""
2584
2399
Get the CPU usage in percentage for a VirtualMachine
2585
2400
2401
+ NOTE: This task will be gone after the transition to performance counters
2402
+
2586
2403
Example client message would be:
2587
2404
2588
2405
{
@@ -2671,6 +2488,7 @@ def vm_cpu_usage_percent(self, msg):
2671
2488
2672
2489
return r
2673
2490
2491
+ @task (name = 'datastore.discover' )
2674
2492
def datastore_discover (self , msg ):
2675
2493
"""
2676
2494
Discover all pyVmomi.vim.Datastore managed objects
@@ -2710,6 +2528,7 @@ def datastore_discover(self, msg):
2710
2528
2711
2529
return r
2712
2530
2531
+ @task (name = 'datastore.get' , required = ['name' , 'properties' ])
2713
2532
def datastore_get (self , msg ):
2714
2533
"""
2715
2534
Get properties for a vim.Datastore managed object
@@ -2743,6 +2562,7 @@ def datastore_get(self, msg):
2743
2562
obj_property_value = msg ['name' ]
2744
2563
)
2745
2564
2565
+ @task (name = 'datastore.alarm.get' , required = ['name' ])
2746
2566
def datastore_alarm_get (self , msg ):
2747
2567
"""
2748
2568
Get all alarms for a vim.Datastore managed object
@@ -2767,6 +2587,7 @@ def datastore_alarm_get(self, msg):
2767
2587
2768
2588
return result
2769
2589
2590
+ @task (name = 'datastore.host.get' , required = ['name' ])
2770
2591
def datastore_host_get (self , msg ):
2771
2592
"""
2772
2593
Get all HostSystem objects attached to a specific Datastore
@@ -2831,6 +2652,7 @@ def datastore_host_get(self, msg):
2831
2652
2832
2653
return r
2833
2654
2655
+ @task (name = 'datastore.vm.get' , required = ['name' ])
2834
2656
def datastore_vm_get (self , msg ):
2835
2657
"""
2836
2658
Get all VirtualMachine objects using a specific Datastore
@@ -2891,6 +2713,7 @@ def datastore_vm_get(self, msg):
2891
2713
2892
2714
return r
2893
2715
2716
+ @task (name = 'datastore.perf.metric.info' , required = ['name' ])
2894
2717
def datastore_perf_metric_info (self , msg ):
2895
2718
"""
2896
2719
Get performance counters available for a vim.Datastore object
@@ -2921,6 +2744,7 @@ def datastore_perf_metric_info(self, msg):
2921
2744
2922
2745
return self ._entity_perf_metric_info (entity = obj , counter_id = counter_id )
2923
2746
2747
+ @task (name = 'datastore.perf.metric.get' , required = ['name' , 'counter-id' ])
2924
2748
def datastore_perf_metric_get (self , msg ):
2925
2749
"""
2926
2750
Get performance metrics for a vim.Datastore managed object
@@ -2934,7 +2758,7 @@ def datastore_perf_metric_get(self, msg):
2934
2758
"method": "datastore.perf.metric.get",
2935
2759
"hostname": "vc01.example.org",
2936
2760
"name": "ds:///vmfs/volumes/643f118a-a970df28/",
2937
- "properties ": [
2761
+ "counter-id ": [
2938
2762
X,
2939
2763
Y
2940
2764
],
@@ -2976,3 +2800,4 @@ def datastore_perf_metric_get(self, msg):
2976
2800
instance = msg .get ('instance' , '' ),
2977
2801
interval_key = msg .get ('key' ),
2978
2802
)
2803
+
0 commit comments