summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRadoslav Gerganov <rgerganov@vmware.com>2018-07-10 13:28:45 +0300
committerRadoslav Gerganov <rgerganov@vmware.com>2018-07-17 11:30:19 +0300
commit02192f7c304f43f76d22ae91b8daceba1791d7cd (patch)
tree3d63440de51c58a99a1994d23c522dd21b473d79
parent80112baaf6fe01fd126a571d6d75524406ad83bb (diff)
downloadoslo-vmware-02192f7c304f43f76d22ae91b8daceba1791d7cd.tar.gz
Add function for getting recommended datastore
Add utility function which returns the most recommended datastore from a datastore cluster where a VM can be cloned to. Change-Id: Ic532bb9c52270ba34f70d2b7977de49f8753d1d1
-rw-r--r--oslo_vmware/objects/datastore.py28
-rw-r--r--oslo_vmware/vim_util.py28
2 files changed, 56 insertions, 0 deletions
diff --git a/oslo_vmware/objects/datastore.py b/oslo_vmware/objects/datastore.py
index dbfa2e2..01bcd22 100644
--- a/oslo_vmware/objects/datastore.py
+++ b/oslo_vmware/objects/datastore.py
@@ -55,6 +55,34 @@ def get_datastore_by_ref(session, ds_ref):
type=props.get("summary.type"))
+def get_recommended_datastore_clone(session,
+ dsc_ref,
+ clone_spec,
+ vm_ref,
+ folder,
+ name,
+ resource_pool=None,
+ host_ref=None):
+ """Returns a key which identifies the most recommended datastore from the
+ specified datastore cluster where the specified VM can be cloned to.
+ """
+ sp_spec = vim_util.storage_placement_spec(session.vim.client.factory,
+ dsc_ref,
+ 'clone',
+ clone_spec=clone_spec,
+ vm_ref=vm_ref,
+ folder=folder,
+ clone_name=name,
+ res_pool_ref=resource_pool,
+ host_ref=host_ref)
+ spr = session.invoke_api(
+ session.vim,
+ "RecommendDatastores",
+ session.vim.service_content.storageResourceManager,
+ storageSpec=sp_spec)
+ return spr.recommendations[0].key
+
+
def get_dsc_ref_and_name(session, dsc_val):
"""Return reference and name of the specified datastore cluster.
diff --git a/oslo_vmware/vim_util.py b/oslo_vmware/vim_util.py
index 4105cda..85a7fd8 100644
--- a/oslo_vmware/vim_util.py
+++ b/oslo_vmware/vim_util.py
@@ -628,3 +628,31 @@ def propset_dict(propset):
return {}
return {prop.name: prop.val for prop in propset}
+
+
+def storage_placement_spec(client_factory,
+ dsc_ref,
+ type,
+ clone_spec=None,
+ config_spec=None,
+ relocate_spec=None,
+ vm_ref=None,
+ folder=None,
+ clone_name=None,
+ res_pool_ref=None,
+ host_ref=None):
+ pod_sel_spec = client_factory.create('ns0:StorageDrsPodSelectionSpec')
+ pod_sel_spec.storagePod = dsc_ref
+
+ spec = client_factory.create('ns0:StoragePlacementSpec')
+ spec.podSelectionSpec = pod_sel_spec
+ spec.type = type
+ spec.vm = vm_ref
+ spec.folder = folder
+ spec.cloneSpec = clone_spec
+ spec.configSpec = config_spec
+ spec.relocateSpec = relocate_spec
+ spec.cloneName = clone_name
+ spec.resourcePool = res_pool_ref
+ spec.host = host_ref
+ return spec