From dc59880c31ee894f6545bdef25acbc792b9c1a9c Mon Sep 17 00:00:00 2001 From: DaveD Date: Thu, 21 Nov 2019 21:22:45 -0700 Subject: [PATCH] vmware_deploy_ovf: Use correct datastore in multi-datacenter environment Fixes: #63920 Need to pass the datacenter to assure we get the correct datastore managed object Id. --- lib/ansible/module_utils/vmware.py | 10 ++++++---- lib/ansible/modules/cloud/vmware/vmware_deploy_ovf.py | 2 +- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/ansible/module_utils/vmware.py b/lib/ansible/module_utils/vmware.py index 34e9377e324..e28a1136844 100644 --- a/lib/ansible/module_utils/vmware.py +++ b/lib/ansible/module_utils/vmware.py @@ -166,8 +166,8 @@ def get_parent_datacenter(obj): return datacenter -def find_datastore_by_name(content, datastore_name): - return find_object_by_name(content, datastore_name, [vim.Datastore]) +def find_datastore_by_name(content, datastore_name, datacenter_name=None): + return find_object_by_name(content, datastore_name, [vim.Datastore], datacenter_name) def find_dvs_by_name(content, switch_name, folder=None): @@ -1311,16 +1311,18 @@ class PyVmomi(object): return False return True - def find_datastore_by_name(self, datastore_name): + def find_datastore_by_name(self, datastore_name, datacenter_name=None): """ Get datastore managed object by name Args: datastore_name: Name of datastore + datacenter_name: Name of datacenter where the datastore resides. This is needed because Datastores can be + shared across Datacenters, so we need to specify the datacenter to assure we get the correct Managed Object Reference Returns: datastore managed object if found else None """ - return find_datastore_by_name(self.content, datastore_name=datastore_name) + return find_datastore_by_name(self.content, datastore_name=datastore_name, datacenter_name=datacenter_name) # Datastore cluster def find_datastore_cluster_by_name(self, datastore_cluster_name): diff --git a/lib/ansible/modules/cloud/vmware/vmware_deploy_ovf.py b/lib/ansible/modules/cloud/vmware/vmware_deploy_ovf.py index 5e58f8657f7..c8f44dc71a2 100644 --- a/lib/ansible/modules/cloud/vmware/vmware_deploy_ovf.py +++ b/lib/ansible/modules/cloud/vmware/vmware_deploy_ovf.py @@ -338,7 +338,7 @@ class VMwareDeployOvf(PyVmomi): if datastore: self.datastore = datastore else: - self.datastore = self.find_datastore_by_name(self.params['datastore']) + self.datastore = self.find_datastore_by_name(self.params['datastore'], self.datacenter) if not self.datastore: self.module.fail_json(msg='%(datastore)s could not be located' % self.params)