diff options
author | Radoslav Gerganov <rgerganov@vmware.com> | 2018-07-10 13:28:45 +0300 |
---|---|---|
committer | Radoslav Gerganov <rgerganov@vmware.com> | 2018-07-17 11:30:19 +0300 |
commit | 02192f7c304f43f76d22ae91b8daceba1791d7cd (patch) | |
tree | 3d63440de51c58a99a1994d23c522dd21b473d79 | |
parent | 80112baaf6fe01fd126a571d6d75524406ad83bb (diff) | |
download | oslo-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.py | 28 | ||||
-rw-r--r-- | oslo_vmware/vim_util.py | 28 |
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 |