diff --git a/lib/ansible/module_utils/vmware.py b/lib/ansible/module_utils/vmware.py index 5a90355cf97..dc00e5f47cf 100644 --- a/lib/ansible/module_utils/vmware.py +++ b/lib/ansible/module_utils/vmware.py @@ -1252,6 +1252,20 @@ class PyVmomi(object): """ return find_datacenter_by_name(self.content, datacenter_name=datacenter_name) + def is_datastore_valid(self, datastore_obj=None): + """ + Check if datastore selected is valid or not + Args: + datastore_obj: datastore managed object + + Returns: True if datastore is valid, False if not + """ + if not datastore_obj \ + or datastore_obj.summary.maintenanceMode != 'normal' \ + or not datastore_obj.summary.accessible: + return False + return True + def find_datastore_by_name(self, datastore_name): """ Get datastore managed object by name diff --git a/lib/ansible/modules/cloud/vmware/vmware_guest.py b/lib/ansible/modules/cloud/vmware/vmware_guest.py index 22a39a944be..ea71b9329ae 100644 --- a/lib/ansible/modules/cloud/vmware/vmware_guest.py +++ b/lib/ansible/modules/cloud/vmware/vmware_guest.py @@ -1893,6 +1893,9 @@ class PyVmomiHelper(PyVmomi): datastore_freespace = 0 for ds in datastores: + if not self.is_datastore_valid(datastore_obj=ds): + continue + if ds.summary.freeSpace > datastore_freespace: datastore = ds datastore_freespace = ds.summary.freeSpace @@ -1932,6 +1935,9 @@ class PyVmomiHelper(PyVmomi): for ds in datastore_cluster_obj.childEntity: if isinstance(ds, vim.Datastore) and ds.summary.freeSpace > datastore_freespace: # If datastore field is provided, filter destination datastores + if not self.is_datastore_valid(datastore_obj=ds): + continue + datastore = ds datastore_freespace = ds.summary.freeSpace if datastore: @@ -1952,6 +1958,9 @@ class PyVmomiHelper(PyVmomi): datastore_freespace = 0 for ds in datastores: + if not self.is_datastore_valid(datastore_obj=ds): + continue + if (ds.summary.freeSpace > datastore_freespace) or (ds.summary.freeSpace == datastore_freespace and not datastore): # If datastore field is provided, filter destination datastores if 'datastore' in self.params['disk'][0] and \ diff --git a/test/lib/ansible_test/_internal/cloud/vcenter.py b/test/lib/ansible_test/_internal/cloud/vcenter.py index 40947b9a058..27aac2e0888 100644 --- a/test/lib/ansible_test/_internal/cloud/vcenter.py +++ b/test/lib/ansible_test/_internal/cloud/vcenter.py @@ -51,7 +51,7 @@ class VcenterProvider(CloudProvider): if os.environ.get('ANSIBLE_VCSIM_CONTAINER'): self.image = os.environ.get('ANSIBLE_VCSIM_CONTAINER') else: - self.image = 'quay.io/ansible/vcenter-test-container:1.5.0' + self.image = 'quay.io/ansible/vcenter-test-container:1.7.0' self.container_name = '' # VMware tests can be run on govcsim or baremetal, either BYO with a static config