VMware: Autoselect datastore only from the given cluster/ESXi (#43435)

* Autoselect DS only from the given cluster/esxi
* Run tests only on real vCenter
pull/65434/head
Jiri Tyr 5 years ago committed by Abhijeet Kasurde
parent 5942e7f2a2
commit a8ef5d5034

@ -139,7 +139,7 @@ def find_object_by_name(content, name, obj_type, folder=None, recurse=True):
def find_cluster_by_name(content, cluster_name, datacenter=None): def find_cluster_by_name(content, cluster_name, datacenter=None):
if datacenter: if datacenter and hasattr(datacenter, 'hostFolder'):
folder = datacenter.hostFolder folder = datacenter.hostFolder
else: else:
folder = content.rootFolder folder = content.rootFolder

@ -2158,10 +2158,24 @@ class PyVmomiHelper(PyVmomi):
if len(self.params['disk']) != 0: if len(self.params['disk']) != 0:
# TODO: really use the datastore for newly created disks # TODO: really use the datastore for newly created disks
if 'autoselect_datastore' in self.params['disk'][0] and self.params['disk'][0]['autoselect_datastore']: if 'autoselect_datastore' in self.params['disk'][0] and self.params['disk'][0]['autoselect_datastore']:
datastores = self.cache.get_all_objs(self.content, [vim.Datastore]) datastores = []
datastores = [x for x in datastores if self.cache.get_parent_datacenter(x).name == self.params['datacenter']]
if datastores is None or len(datastores) == 0: if self.params['cluster']:
self.module.fail_json(msg="Unable to find a datastore list when autoselecting") cluster = self.find_cluster_by_name(self.params['cluster'], self.content)
for host in cluster.host:
for mi in host.configManager.storageSystem.fileSystemVolumeInfo.mountInfo:
if mi.volume.type == "VMFS":
datastores.append(self.cache.find_obj(self.content, [vim.Datastore], mi.volume.name))
elif self.params['esxi_hostname']:
host = self.find_hostsystem_by_name(self.params['esxi_hostname'])
for mi in host.configManager.storageSystem.fileSystemVolumeInfo.mountInfo:
if mi.volume.type == "VMFS":
datastores.append(self.cache.find_obj(self.content, [vim.Datastore], mi.volume.name))
else:
datastores = self.cache.get_all_objs(self.content, [vim.Datastore])
datastores = [x for x in datastores if self.cache.get_parent_datacenter(x).name == self.params['datacenter']]
datastore_freespace = 0 datastore_freespace = 0
for ds in datastores: for ds in datastores:

@ -2,74 +2,76 @@
# Copyright: (c) 2019, Noe Gonzalez <noe.a.gonzalez@gmail.com> # Copyright: (c) 2019, Noe Gonzalez <noe.a.gonzalez@gmail.com>
# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) # GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt)
- name: create new VM - when: vcsim is not defined
vmware_guest: block:
validate_certs: False - name: create new VM
hostname: "{{ vcenter_hostname }}" vmware_guest:
username: "{{ vcenter_username }}" validate_certs: False
password: "{{ vcenter_password }}" hostname: "{{ vcenter_hostname }}"
name: clone_resize_disks_original username: "{{ vcenter_username }}"
datacenter: "{{ dc1 }}" password: "{{ vcenter_password }}"
cluster: "{{ ccr1 }}" name: clone_resize_disks_original
folder: "{{ f0 }}" datacenter: "{{ dc1 }}"
hardware: cluster: "{{ ccr1 }}"
num_cpus: 1 folder: "{{ f0 }}"
memory_mb: 128 hardware:
guest_id: centos7_64Guest num_cpus: 1
disk: memory_mb: 128
- size_gb: 1 guest_id: centos7_64Guest
type: thin disk:
datastore: "{{ rw_datastore }}" - size_gb: 1
state: poweredoff type: thin
datastore: "{{ rw_datastore }}"
state: poweredoff
- name: convert to VM template - name: convert to VM template
vmware_guest: vmware_guest:
validate_certs: False validate_certs: False
hostname: "{{ vcenter_hostname }}" hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}" username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}" password: "{{ vcenter_password }}"
name: clone_resize_disks_original name: clone_resize_disks_original
datacenter: "{{ dc1 }}" datacenter: "{{ dc1 }}"
cluster: "{{ ccr1 }}" cluster: "{{ ccr1 }}"
folder: "{{ f0 }}" folder: "{{ f0 }}"
is_template: True is_template: True
- name: clone template and modify disks - name: clone template and modify disks
vmware_guest: vmware_guest:
validate_certs: False validate_certs: False
hostname: "{{ vcenter_hostname }}" hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}" username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}" password: "{{ vcenter_password }}"
name: clone_resize_disks_clone name: clone_resize_disks_clone
datacenter: "{{ dc1 }}" datacenter: "{{ dc1 }}"
cluster: "{{ ccr1 }}" cluster: "{{ ccr1 }}"
folder: "{{ f0 }}" folder: "{{ f0 }}"
disk: disk:
- size_gb: 2 - size_gb: 2
type: thin type: thin
datastore: "{{ rw_datastore }}" datastore: "{{ rw_datastore }}"
- size_gb: 3 - size_gb: 3
type: thin type: thin
datastore: "{{ rw_datastore }}" datastore: "{{ rw_datastore }}"
template: clone_resize_disks_original template: clone_resize_disks_original
state: poweredoff state: poweredoff
register: l_clone_template_modify_disks register: l_clone_template_modify_disks
- assert: - assert:
that: that:
- l_clone_template_modify_disks.changed | bool - l_clone_template_modify_disks.changed | bool
- name: delete VM clone & original template - name: delete VM clone & original template
vmware_guest: vmware_guest:
validate_certs: False validate_certs: False
hostname: "{{ vcenter_hostname }}" hostname: "{{ vcenter_hostname }}"
username: "{{ vcenter_username }}" username: "{{ vcenter_username }}"
password: "{{ vcenter_password }}" password: "{{ vcenter_password }}"
name: "{{ item }}" name: "{{ item }}"
datacenter: "{{ dc1 }}" datacenter: "{{ dc1 }}"
cluster: "{{ ccr1 }}" cluster: "{{ ccr1 }}"
folder: "{{ f0 }}" folder: "{{ f0 }}"
state: absent state: absent
with_items: with_items:
- clone_resize_disks_original - clone_resize_disks_original
- clone_resize_disks_clone - clone_resize_disks_clone

Loading…
Cancel
Save