VMware: vcenter_folder nested folder absent fix (#65283)
- no longer try to create folder which exists. - correctly remove nested folders with absent.
This commit is contained in:
parent
7000c51c06
commit
1d370bd189
2 changed files with 61 additions and 12 deletions
|
@ -24,6 +24,7 @@ version_added: '2.5'
|
||||||
author:
|
author:
|
||||||
- Abhijeet Kasurde (@Akasurde)
|
- Abhijeet Kasurde (@Akasurde)
|
||||||
- Christian Kotte (@ckotte) <christian.kotte@gmx.de>
|
- Christian Kotte (@ckotte) <christian.kotte@gmx.de>
|
||||||
|
- Jan Meerkamp (@meerkampdvv)
|
||||||
notes:
|
notes:
|
||||||
- Tested on vSphere 6.5
|
- Tested on vSphere 6.5
|
||||||
requirements:
|
requirements:
|
||||||
|
@ -47,7 +48,6 @@ options:
|
||||||
description:
|
description:
|
||||||
- Name of the parent folder under which new folder needs to be created.
|
- Name of the parent folder under which new folder needs to be created.
|
||||||
- This is case sensitive parameter.
|
- This is case sensitive parameter.
|
||||||
- Please specify unique folder name as there is no way to detect duplicate names.
|
|
||||||
- "If user wants to create a folder under '/DC0/vm/vm_folder', this value will be 'vm_folder'."
|
- "If user wants to create a folder under '/DC0/vm/vm_folder', this value will be 'vm_folder'."
|
||||||
- "If user wants to create a folder under '/DC0/vm/folder1/folder2', this value will be 'folder1/folder2'."
|
- "If user wants to create a folder under '/DC0/vm/folder1/folder2', this value will be 'folder1/folder2'."
|
||||||
required: False
|
required: False
|
||||||
|
@ -191,7 +191,14 @@ class VmwareFolderManager(PyVmomi):
|
||||||
if not part_folder_obj:
|
if not part_folder_obj:
|
||||||
self.module.fail_json(msg="Could not find folder %s" % part)
|
self.module.fail_json(msg="Could not find folder %s" % part)
|
||||||
p_folder_obj = part_folder_obj
|
p_folder_obj = part_folder_obj
|
||||||
|
child_folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
||||||
|
folder_name=folder_name,
|
||||||
|
folder_type=folder_type,
|
||||||
|
parent_folder=p_folder_obj)
|
||||||
|
if child_folder_obj:
|
||||||
|
results['result'] = "Folder %s already exists under" \
|
||||||
|
" parent folder %s" % (folder_name, parent_folder)
|
||||||
|
self.module.exit_json(**results)
|
||||||
else:
|
else:
|
||||||
p_folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
p_folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
||||||
folder_name=parent_folder,
|
folder_name=parent_folder,
|
||||||
|
@ -259,18 +266,34 @@ class VmwareFolderManager(PyVmomi):
|
||||||
# Check if the folder already exists
|
# Check if the folder already exists
|
||||||
p_folder_obj = None
|
p_folder_obj = None
|
||||||
if parent_folder:
|
if parent_folder:
|
||||||
p_folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
if "/" in parent_folder:
|
||||||
folder_name=parent_folder,
|
parent_folder_parts = parent_folder.strip('/').split('/')
|
||||||
folder_type=folder_type)
|
p_folder_obj = None
|
||||||
|
for part in parent_folder_parts:
|
||||||
|
part_folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
||||||
|
folder_name=part,
|
||||||
|
folder_type=folder_type,
|
||||||
|
parent_folder=p_folder_obj)
|
||||||
|
if not part_folder_obj:
|
||||||
|
self.module.fail_json(msg="Could not find folder %s" % part)
|
||||||
|
p_folder_obj = part_folder_obj
|
||||||
|
folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
||||||
|
folder_name=folder_name,
|
||||||
|
folder_type=folder_type,
|
||||||
|
parent_folder=p_folder_obj)
|
||||||
|
else:
|
||||||
|
p_folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
||||||
|
folder_name=parent_folder,
|
||||||
|
folder_type=folder_type)
|
||||||
|
|
||||||
if not p_folder_obj:
|
if not p_folder_obj:
|
||||||
self.module.fail_json(msg="Parent folder %s does not exist" % parent_folder)
|
self.module.fail_json(msg="Parent folder %s does not exist" % parent_folder)
|
||||||
|
|
||||||
# Check if folder exists under parent folder
|
# Check if folder exists under parent folder
|
||||||
folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
||||||
folder_name=folder_name,
|
folder_name=folder_name,
|
||||||
folder_type=folder_type,
|
folder_type=folder_type,
|
||||||
parent_folder=p_folder_obj)
|
parent_folder=p_folder_obj)
|
||||||
else:
|
else:
|
||||||
folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
folder_obj = self.get_folder(datacenter_name=datacenter_name,
|
||||||
folder_name=folder_name,
|
folder_name=folder_name,
|
||||||
|
|
|
@ -126,6 +126,18 @@
|
||||||
register: yet_another_level
|
register: yet_another_level
|
||||||
- debug: var=yet_another_level
|
- debug: var=yet_another_level
|
||||||
|
|
||||||
|
- name: Recreate a 3rd level of directory
|
||||||
|
vcenter_folder:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
validate_certs: no
|
||||||
|
datacenter: "{{ dc1 }}"
|
||||||
|
folder_name: yet_another_level
|
||||||
|
parent_folder: vm_folder/sub_vm_folder
|
||||||
|
state: present
|
||||||
|
register: recreate_yet_another_level
|
||||||
|
- debug: var=recreate_yet_another_level
|
||||||
|
|
||||||
- debug:
|
- debug:
|
||||||
msg: "{{ all_folder_results }}"
|
msg: "{{ all_folder_results }}"
|
||||||
|
@ -135,12 +147,26 @@
|
||||||
that:
|
that:
|
||||||
- all_folder_results.changed
|
- all_folder_results.changed
|
||||||
- not recreate_folders.changed
|
- not recreate_folders.changed
|
||||||
|
- not recreate_yet_another_level.changed
|
||||||
|
|
||||||
## Testcase: Delete all types of folder
|
## Testcase: Delete all types of folder
|
||||||
#
|
#
|
||||||
# Doesn't work with vcsim. Looks like UnregisterAndDestroy isn't supported.
|
# Doesn't work with vcsim. Looks like UnregisterAndDestroy isn't supported.
|
||||||
- when: vcsim is not defined
|
- when: vcsim is not defined
|
||||||
block:
|
block:
|
||||||
|
- name: Remove a 3rd level of directory
|
||||||
|
vcenter_folder:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
validate_certs: no
|
||||||
|
datacenter: "{{ dc1 }}"
|
||||||
|
folder_name: yet_another_level
|
||||||
|
parent_folder: vm_folder/sub_vm_folder
|
||||||
|
state: absent
|
||||||
|
register: remove_yet_another_level
|
||||||
|
- debug: var=remove_yet_another_level
|
||||||
|
|
||||||
- name: Delete all types of folder
|
- name: Delete all types of folder
|
||||||
vcenter_folder:
|
vcenter_folder:
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
|
Loading…
Reference in a new issue