fb-vmware 1.7.1__py3-none-any.whl → 1.8.1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- fb_vmware/__init__.py +1 -1
- fb_vmware/app/__init__.py +285 -6
- fb_vmware/app/get_host_list.py +115 -100
- fb_vmware/app/get_network_list.py +176 -218
- fb_vmware/app/get_rpool_list.py +386 -0
- fb_vmware/app/get_storage_cluster_info.py +303 -0
- fb_vmware/app/get_storage_cluster_list.py +100 -107
- fb_vmware/app/get_storage_list.py +145 -112
- fb_vmware/app/get_vm_info.py +79 -17
- fb_vmware/app/get_vm_list.py +169 -95
- fb_vmware/app/search_storage.py +470 -0
- fb_vmware/argparse_actions.py +78 -0
- fb_vmware/base.py +28 -1
- fb_vmware/cluster.py +99 -7
- fb_vmware/connect.py +450 -20
- fb_vmware/datastore.py +195 -6
- fb_vmware/dc.py +19 -1
- fb_vmware/ds_cluster.py +215 -2
- fb_vmware/dvs.py +37 -1
- fb_vmware/errors.py +31 -10
- fb_vmware/host.py +40 -2
- fb_vmware/host_port_group.py +1 -2
- fb_vmware/network.py +17 -1
- fb_vmware/obj.py +30 -1
- fb_vmware/vm.py +19 -1
- fb_vmware/xlate.py +8 -13
- fb_vmware-1.8.1.data/data/share/locale/de/LC_MESSAGES/fb_vmware.mo +0 -0
- fb_vmware-1.8.1.data/data/share/locale/en/LC_MESSAGES/fb_vmware.mo +0 -0
- {fb_vmware-1.7.1.dist-info → fb_vmware-1.8.1.dist-info}/METADATA +2 -1
- fb_vmware-1.8.1.dist-info/RECORD +40 -0
- {fb_vmware-1.7.1.dist-info → fb_vmware-1.8.1.dist-info}/entry_points.txt +3 -0
- fb_vmware-1.7.1.data/data/share/locale/de_DE/LC_MESSAGES/fb_vmware.mo +0 -0
- fb_vmware-1.7.1.data/data/share/locale/en_US/LC_MESSAGES/fb_vmware.mo +0 -0
- fb_vmware-1.7.1.dist-info/RECORD +0 -36
- {fb_vmware-1.7.1.dist-info → fb_vmware-1.8.1.dist-info}/WHEEL +0 -0
- {fb_vmware-1.7.1.dist-info → fb_vmware-1.8.1.dist-info}/licenses/LICENSE +0 -0
fb_vmware/cluster.py
CHANGED
|
@@ -19,12 +19,13 @@ from fb_tools.xlate import format_list
|
|
|
19
19
|
from pyVmomi import vim
|
|
20
20
|
|
|
21
21
|
# Own modules
|
|
22
|
+
from .errors import VSphereHandlerError
|
|
22
23
|
from .errors import VSphereNameError
|
|
23
24
|
from .obj import DEFAULT_OBJ_STATUS
|
|
24
25
|
from .obj import VsphereObject
|
|
25
26
|
from .xlate import XLATOR
|
|
26
27
|
|
|
27
|
-
__version__ = "1.
|
|
28
|
+
__version__ = "1.9.2"
|
|
28
29
|
LOG = logging.getLogger(__name__)
|
|
29
30
|
|
|
30
31
|
|
|
@@ -35,6 +36,8 @@ _ = XLATOR.gettext
|
|
|
35
36
|
class VsphereCluster(VsphereObject):
|
|
36
37
|
"""An object for encapsulating a vSphere calculation cluster object."""
|
|
37
38
|
|
|
39
|
+
default_resource_pool_name = "Resources"
|
|
40
|
+
|
|
38
41
|
# -------------------------------------------------------------------------
|
|
39
42
|
def __init__(
|
|
40
43
|
self,
|
|
@@ -43,9 +46,11 @@ class VsphereCluster(VsphereObject):
|
|
|
43
46
|
version=__version__,
|
|
44
47
|
base_dir=None,
|
|
45
48
|
initialized=None,
|
|
49
|
+
vsphere=None,
|
|
46
50
|
dc_name=None,
|
|
47
51
|
name=None,
|
|
48
52
|
status=DEFAULT_OBJ_STATUS,
|
|
53
|
+
resource_pool_name=None,
|
|
49
54
|
cpu_cores=0,
|
|
50
55
|
cpu_threads=0,
|
|
51
56
|
config_status=DEFAULT_OBJ_STATUS,
|
|
@@ -80,7 +85,9 @@ class VsphereCluster(VsphereObject):
|
|
|
80
85
|
self._mem_mb_effective = None
|
|
81
86
|
self._mem_total = None
|
|
82
87
|
self._standalone = False
|
|
88
|
+
self._vsphere = None
|
|
83
89
|
self._dc_name = None
|
|
90
|
+
self._resource_pool_name = self.default_resource_pool_name
|
|
84
91
|
self.networks = []
|
|
85
92
|
self.datastores = []
|
|
86
93
|
self.resource_pool = None
|
|
@@ -98,6 +105,8 @@ class VsphereCluster(VsphereObject):
|
|
|
98
105
|
)
|
|
99
106
|
|
|
100
107
|
self.dc_name = dc_name
|
|
108
|
+
if vsphere is not None:
|
|
109
|
+
self.vsphere = vsphere
|
|
101
110
|
self.cpu_cores = cpu_cores
|
|
102
111
|
self.cpu_threads = cpu_threads
|
|
103
112
|
self.hosts_effective = hosts_effective
|
|
@@ -106,9 +115,31 @@ class VsphereCluster(VsphereObject):
|
|
|
106
115
|
self.mem_total = mem_total
|
|
107
116
|
self.standalone = standalone
|
|
108
117
|
|
|
118
|
+
if resource_pool_name is not None and str(resource_pool_name).strip() != "":
|
|
119
|
+
self._resource_pool_name = str(resource_pool_name).strip()
|
|
120
|
+
|
|
109
121
|
if initialized is not None:
|
|
110
122
|
self.initialized = initialized
|
|
111
123
|
|
|
124
|
+
# -----------------------------------------------------------
|
|
125
|
+
@property
|
|
126
|
+
def vsphere(self):
|
|
127
|
+
"""Return the name of the vSphere from configuration of the cluster."""
|
|
128
|
+
return self._vsphere
|
|
129
|
+
|
|
130
|
+
@vsphere.setter
|
|
131
|
+
def vsphere(self, value):
|
|
132
|
+
if value is None:
|
|
133
|
+
self._vsphere = None
|
|
134
|
+
return
|
|
135
|
+
|
|
136
|
+
val = str(value).strip()
|
|
137
|
+
if val == "":
|
|
138
|
+
msg = _("The name of the vSphere may not be empty.")
|
|
139
|
+
raise VSphereHandlerError(msg)
|
|
140
|
+
|
|
141
|
+
self._vsphere = val
|
|
142
|
+
|
|
112
143
|
# -----------------------------------------------------------
|
|
113
144
|
@property
|
|
114
145
|
def dc_name(self):
|
|
@@ -128,11 +159,17 @@ class VsphereCluster(VsphereObject):
|
|
|
128
159
|
|
|
129
160
|
self._dc_name = val
|
|
130
161
|
|
|
162
|
+
# -----------------------------------------------------------
|
|
163
|
+
@property
|
|
164
|
+
def base_resource_pool_name(self):
|
|
165
|
+
"""Return the base name of the default resource pool of this cluster."""
|
|
166
|
+
return self._resource_pool_name
|
|
167
|
+
|
|
131
168
|
# -----------------------------------------------------------
|
|
132
169
|
@property
|
|
133
170
|
def resource_pool_name(self):
|
|
134
171
|
"""Return the name of the default resource pool of this cluster."""
|
|
135
|
-
return self.name
|
|
172
|
+
return f"{self.name}/{self.base_resource_pool_name}"
|
|
136
173
|
|
|
137
174
|
# -----------------------------------------------------------
|
|
138
175
|
@property
|
|
@@ -264,6 +301,35 @@ class VsphereCluster(VsphereObject):
|
|
|
264
301
|
def standalone(self, value):
|
|
265
302
|
self._standalone = to_bool(value)
|
|
266
303
|
|
|
304
|
+
# -----------------------------------------------------------
|
|
305
|
+
def get_pyvmomi_obj(self, service_instance):
|
|
306
|
+
"""Return the appropriate PyVMomi object for the current object."""
|
|
307
|
+
obj = None
|
|
308
|
+
if not self.name:
|
|
309
|
+
return None
|
|
310
|
+
|
|
311
|
+
content = service_instance.RetrieveContent()
|
|
312
|
+
container = content.viewManager.CreateContainerView(
|
|
313
|
+
content.rootFolder, vim.ClusterComputeResource, True
|
|
314
|
+
)
|
|
315
|
+
for c in container.view:
|
|
316
|
+
if c.name == self.name:
|
|
317
|
+
obj = c
|
|
318
|
+
break
|
|
319
|
+
|
|
320
|
+
if obj is not None:
|
|
321
|
+
return obj
|
|
322
|
+
|
|
323
|
+
content = service_instance.RetrieveContent()
|
|
324
|
+
container = content.viewManager.CreateContainerView(
|
|
325
|
+
content.rootFolder, vim.ComputeResource, True
|
|
326
|
+
)
|
|
327
|
+
for c in container.view:
|
|
328
|
+
if c.name == self.name:
|
|
329
|
+
obj = c
|
|
330
|
+
break
|
|
331
|
+
return obj
|
|
332
|
+
|
|
267
333
|
# -------------------------------------------------------------------------
|
|
268
334
|
def as_dict(self, short=True):
|
|
269
335
|
"""
|
|
@@ -277,7 +343,9 @@ class VsphereCluster(VsphereObject):
|
|
|
277
343
|
"""
|
|
278
344
|
res = super(VsphereCluster, self).as_dict(short=short)
|
|
279
345
|
|
|
346
|
+
res["vsphere"] = self.vsphere
|
|
280
347
|
res["dc_name"] = self.dc_name
|
|
348
|
+
res["base_resource_pool_name"] = self.base_resource_pool_name
|
|
281
349
|
res["resource_pool_name"] = self.resource_pool_name
|
|
282
350
|
res["resource_pool_var"] = self.resource_pool_var
|
|
283
351
|
res["cpu_cores"] = self.cpu_cores
|
|
@@ -310,7 +378,9 @@ class VsphereCluster(VsphereObject):
|
|
|
310
378
|
base_dir=self.base_dir,
|
|
311
379
|
initialized=self.initialized,
|
|
312
380
|
name=self.name,
|
|
381
|
+
vsphere=self.vsphere,
|
|
313
382
|
dc_name=self.dc_name,
|
|
383
|
+
resource_pool_name=self.base_resource_pool_name,
|
|
314
384
|
standalone=self.standalone,
|
|
315
385
|
status=self.status,
|
|
316
386
|
cpu_cores=self.cpu_cores,
|
|
@@ -330,9 +400,10 @@ class VsphereCluster(VsphereObject):
|
|
|
330
400
|
if not isinstance(other, VsphereCluster):
|
|
331
401
|
return False
|
|
332
402
|
|
|
403
|
+
if self.vsphere != other.vsphere:
|
|
404
|
+
return False
|
|
333
405
|
if self.dc_name != other.dc_name:
|
|
334
406
|
return False
|
|
335
|
-
|
|
336
407
|
if self.name != other.name:
|
|
337
408
|
return False
|
|
338
409
|
|
|
@@ -341,7 +412,14 @@ class VsphereCluster(VsphereObject):
|
|
|
341
412
|
# -------------------------------------------------------------------------
|
|
342
413
|
@classmethod
|
|
343
414
|
def from_summary(
|
|
344
|
-
cls,
|
|
415
|
+
cls,
|
|
416
|
+
data,
|
|
417
|
+
vsphere=None,
|
|
418
|
+
dc_name=None,
|
|
419
|
+
appname=None,
|
|
420
|
+
verbose=0,
|
|
421
|
+
base_dir=None,
|
|
422
|
+
test_mode=False,
|
|
345
423
|
):
|
|
346
424
|
"""Create a new VsphereCluster object based on the appropriate data from pyvomi."""
|
|
347
425
|
if test_mode:
|
|
@@ -358,7 +436,9 @@ class VsphereCluster(VsphereObject):
|
|
|
358
436
|
"verbose": verbose,
|
|
359
437
|
"base_dir": base_dir,
|
|
360
438
|
"initialized": True,
|
|
439
|
+
"vsphere": vsphere,
|
|
361
440
|
"dc_name": dc_name,
|
|
441
|
+
"resource_pool_name": cls.default_resource_pool_name,
|
|
362
442
|
"name": data.name,
|
|
363
443
|
"status": data.overallStatus,
|
|
364
444
|
"config_status": data.configStatus,
|
|
@@ -368,10 +448,22 @@ class VsphereCluster(VsphereObject):
|
|
|
368
448
|
"hosts_total": data.summary.numHosts,
|
|
369
449
|
"mem_mb_effective": data.summary.effectiveMemory,
|
|
370
450
|
"mem_total": data.summary.totalMemory,
|
|
371
|
-
"standalone":
|
|
451
|
+
"standalone": True,
|
|
372
452
|
}
|
|
373
|
-
if isinstance(data, vim.
|
|
374
|
-
params["standalone"] =
|
|
453
|
+
if isinstance(data, vim.ClusterComputeResource):
|
|
454
|
+
params["standalone"] = False
|
|
455
|
+
|
|
456
|
+
if hasattr(data, "resourcePool"):
|
|
457
|
+
rname = data.resourcePool.summary.name
|
|
458
|
+
if verbose > 0:
|
|
459
|
+
LOG.debug(f"Name of resource pool of {data.name!r}: {rname!r}")
|
|
460
|
+
params["resource_pool_name"] = rname
|
|
461
|
+
else:
|
|
462
|
+
msg = _(
|
|
463
|
+
"Could not access to resource pool of compute resource {cc!r} in vSphere {vs!r}, "
|
|
464
|
+
"datacenter {dc!r}."
|
|
465
|
+
).format(cc=data.name, vs=vsphere, dc=dc_name)
|
|
466
|
+
LOG.warn(msg)
|
|
375
467
|
|
|
376
468
|
if verbose > 2:
|
|
377
469
|
LOG.debug(_("Creating {} object from:").format(cls.__name__) + "\n" + pp(params))
|