vmware_guest_disk storage DRS bugfix for get_recommended_datas… (#67221)
* Fix sDRS recommendations Fixes storage DRS recommendation call for add disk scenario * Undo changes to whitespacing * Undo changes to whitespacing (pt. 2) * Add datastore_cluster prop to disk defaults * Create 67221-vmware-guest-disk-storage-drs-fix.yml
This commit is contained in:
parent
faa9533734
commit
5928918352
2 changed files with 26 additions and 10 deletions
|
@ -0,0 +1,2 @@
|
|||
bugfixes:
|
||||
- return correct datastore cluster placement recommendations during when adding disk using the vmware_guest_disk module
|
|
@ -482,6 +482,10 @@ class PyVmomiHelper(PyVmomi):
|
|||
disk_spec.device.backing.thinProvisioned = True
|
||||
elif disk['disk_type'] == 'eagerzeroedthick':
|
||||
disk_spec.device.backing.eagerlyScrub = True
|
||||
# get Storage DRS recommended datastore from the datastore cluster
|
||||
if disk['datastore_cluster'] is not None:
|
||||
datastore_name = self.get_recommended_datastore(datastore_cluster_obj=disk['datastore_cluster'], disk_spec_obj=disk_spec)
|
||||
disk['datastore'] = find_obj(self.content, [vim.Datastore], datastore_name)
|
||||
if disk['filename'] is None:
|
||||
disk_spec.device.backing.fileName = "[%s] %s/%s_%s_%s.vmdk" % (
|
||||
disk['datastore'].name,
|
||||
|
@ -558,6 +562,7 @@ class PyVmomiHelper(PyVmomi):
|
|||
state='present',
|
||||
destroy=True,
|
||||
filename=None,
|
||||
datastore_cluster=None,
|
||||
datastore=None,
|
||||
autoselect_datastore=True,
|
||||
disk_unit_number=0,
|
||||
|
@ -584,15 +589,16 @@ class PyVmomiHelper(PyVmomi):
|
|||
# Check if given value is datastore or datastore cluster
|
||||
datastore_name = disk['datastore']
|
||||
datastore_cluster = find_obj(self.content, [vim.StoragePod], datastore_name)
|
||||
if datastore_cluster:
|
||||
# If user specified datastore cluster so get recommended datastore
|
||||
datastore_name = self.get_recommended_datastore(datastore_cluster_obj=datastore_cluster)
|
||||
# Check if get_recommended_datastore or user specified datastore exists or not
|
||||
datastore = find_obj(self.content, [vim.Datastore], datastore_name)
|
||||
if datastore is None:
|
||||
self.module.fail_json(msg="Failed to find datastore named '%s' "
|
||||
|
||||
if datastore is None and datastore_cluster is None:
|
||||
self.module.fail_json(msg="Failed to find datastore or datastore cluster named '%s' "
|
||||
"in given configuration." % disk['datastore'])
|
||||
current_disk['datastore'] = datastore
|
||||
if datastore_cluster:
|
||||
# If user specified datastore cluster, keep track of that for determining datastore later
|
||||
current_disk['datastore_cluster'] = datastore_cluster
|
||||
elif datastore:
|
||||
current_disk['datastore'] = datastore
|
||||
current_disk['autoselect_datastore'] = False
|
||||
elif 'autoselect_datastore' in disk:
|
||||
# Find datastore which fits requirement
|
||||
|
@ -741,7 +747,7 @@ class PyVmomiHelper(PyVmomi):
|
|||
disks_data.append(current_disk)
|
||||
return disks_data
|
||||
|
||||
def get_recommended_datastore(self, datastore_cluster_obj):
|
||||
def get_recommended_datastore(self, datastore_cluster_obj, disk_spec_obj):
|
||||
"""
|
||||
Return Storage DRS recommended datastore from datastore cluster
|
||||
Args:
|
||||
|
@ -755,11 +761,19 @@ class PyVmomiHelper(PyVmomi):
|
|||
sdrs_status = datastore_cluster_obj.podStorageDrsEntry.storageDrsConfig.podConfig.enabled
|
||||
if sdrs_status:
|
||||
# We can get storage recommendation only if SDRS is enabled on given datastorage cluster
|
||||
disk_loc = vim.storageDrs.PodSelectionSpec.DiskLocator()
|
||||
pod_config = vim.storageDrs.PodSelectionSpec.VmPodConfig()
|
||||
pod_config.storagePod = datastore_cluster_obj
|
||||
pod_config.disk = [disk_loc]
|
||||
pod_sel_spec = vim.storageDrs.PodSelectionSpec()
|
||||
pod_sel_spec.storagePod = datastore_cluster_obj
|
||||
pod_sel_spec.initialVmConfig = [pod_config]
|
||||
storage_spec = vim.storageDrs.StoragePlacementSpec()
|
||||
storage_spec.configSpec = vim.vm.ConfigSpec()
|
||||
storage_spec.configSpec.deviceChange.append(disk_spec_obj)
|
||||
storage_spec.resourcePool = self.vm.resourcePool
|
||||
storage_spec.podSelectionSpec = pod_sel_spec
|
||||
storage_spec.type = 'create'
|
||||
storage_spec.vm = self.vm
|
||||
storage_spec.type = 'reconfigure'
|
||||
|
||||
try:
|
||||
rec = self.content.storageResourceManager.RecommendDatastores(storageSpec=storage_spec)
|
||||
|
|
Loading…
Add table
Reference in a new issue