mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-22 12:50:22 -07:00
VMware: make name and folder required parameter (#33135)
This fix makes name and folder as required together parameters in vmware_guest_snapshot. Update integration tests for vmware_guest_snapshot. Fixes: #22644 Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
e4254da1b1
commit
addb882138
2 changed files with 119 additions and 97 deletions
|
@ -16,7 +16,7 @@ ANSIBLE_METADATA = {'metadata_version': '1.1',
|
|||
DOCUMENTATION = '''
|
||||
---
|
||||
module: vmware_guest_snapshot
|
||||
short_description: Manages virtual machines snapshots in vcenter
|
||||
short_description: Manages virtual machines snapshots in vCenter
|
||||
description:
|
||||
- Create virtual machines snapshots
|
||||
version_added: 2.3
|
||||
|
@ -64,7 +64,6 @@ options:
|
|||
- ' folder: /folder1/datacenter1/vm/folder2'
|
||||
- ' folder: vm/folder2'
|
||||
- ' folder: folder2'
|
||||
default: /vm
|
||||
datacenter:
|
||||
description:
|
||||
- Destination datacenter for the deploy operation
|
||||
|
@ -206,7 +205,6 @@ instance:
|
|||
"""
|
||||
|
||||
import time
|
||||
|
||||
try:
|
||||
import pyVmomi
|
||||
from pyVmomi import vim
|
||||
|
@ -215,28 +213,12 @@ except ImportError:
|
|||
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
from ansible.module_utils._text import to_native
|
||||
from ansible.module_utils.vmware import connect_to_api, find_vm_by_id, HAS_PYVMOMI, list_snapshots, vmware_argument_spec
|
||||
from ansible.module_utils.vmware import PyVmomi, list_snapshots, vmware_argument_spec
|
||||
|
||||
|
||||
class PyVmomiHelper(object):
|
||||
class PyVmomiHelper(PyVmomi):
|
||||
def __init__(self, module):
|
||||
if not HAS_PYVMOMI:
|
||||
module.fail_json(msg='pyvmomi module required')
|
||||
|
||||
self.module = module
|
||||
self.params = module.params
|
||||
self.content = connect_to_api(self.module)
|
||||
|
||||
def getvm(self, name=None, uuid=None, folder=None):
|
||||
vm = None
|
||||
match_first = False
|
||||
if uuid:
|
||||
vm = find_vm_by_id(self.content, uuid, vm_id_type="uuid")
|
||||
elif folder and name:
|
||||
if self.params['name_match'] == 'first':
|
||||
match_first = True
|
||||
vm = find_vm_by_id(self.content, vm_id=name, vm_id_type="inventory_path", folder=folder, match_first=match_first)
|
||||
return vm
|
||||
super(PyVmomiHelper, self).__init__(module)
|
||||
|
||||
@staticmethod
|
||||
def wait_for_task(task):
|
||||
|
@ -358,10 +340,10 @@ def main():
|
|||
argument_spec = vmware_argument_spec()
|
||||
argument_spec.update(
|
||||
state=dict(default='present', choices=['present', 'absent', 'revert', 'remove_all']),
|
||||
name=dict(required=True, type='str'),
|
||||
name=dict(type='str'),
|
||||
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
||||
uuid=dict(type='str'),
|
||||
folder=dict(type='str', default='/vm'),
|
||||
folder=dict(type='str'),
|
||||
datacenter=dict(required=True, type='str'),
|
||||
snapshot_name=dict(type='str'),
|
||||
description=dict(type='str', default=''),
|
||||
|
@ -371,17 +353,19 @@ def main():
|
|||
new_snapshot_name=dict(type='str'),
|
||||
new_description=dict(type='str'),
|
||||
)
|
||||
module = AnsibleModule(argument_spec=argument_spec, required_one_of=[['name', 'uuid']])
|
||||
module = AnsibleModule(argument_spec=argument_spec,
|
||||
required_together=[['name', 'folder']],
|
||||
required_one_of=[['name', 'uuid']],
|
||||
)
|
||||
|
||||
# FindByInventoryPath() does not require an absolute path
|
||||
# so we should leave the input folder path unmodified
|
||||
module.params['folder'] = module.params['folder'].rstrip('/')
|
||||
if module.params['folder']:
|
||||
# FindByInventoryPath() does not require an absolute path
|
||||
# so we should leave the input folder path unmodified
|
||||
module.params['folder'] = module.params['folder'].rstrip('/')
|
||||
|
||||
pyv = PyVmomiHelper(module)
|
||||
# Check if the VM exists before continuing
|
||||
vm = pyv.getvm(name=module.params['name'],
|
||||
folder=module.params['folder'],
|
||||
uuid=module.params['uuid'])
|
||||
vm = pyv.get_vm()
|
||||
|
||||
if not vm:
|
||||
# If UUID is set, getvm select UUID, show error message accordingly.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue