mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-07-25 22:30:22 -07:00
Refactor getvm method (#27188)
Fix refactors getvm method and modules which are using it. Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
eff757eeb8
commit
9649195c26
6 changed files with 117 additions and 126 deletions
|
@ -50,6 +50,24 @@ options:
|
|||
- Will help speed up search
|
||||
required: False
|
||||
default: None
|
||||
folder:
|
||||
description:
|
||||
- Destination folder, absolute or relative path to find an existing guest or create the new guest.
|
||||
- The folder should include the datacenter. ESX's datacenter is ha-datacenter
|
||||
- 'Examples:'
|
||||
- ' folder: /ha-datacenter/vm'
|
||||
- ' folder: ha-datacenter/vm'
|
||||
- ' folder: /datacenter1/vm'
|
||||
- ' folder: datacenter1/vm'
|
||||
- ' folder: /datacenter1/vm/folder1'
|
||||
- ' folder: datacenter1/vm/folder1'
|
||||
- ' folder: /folder1/datacenter1/vm'
|
||||
- ' folder: folder1/datacenter1/vm'
|
||||
- ' folder: /folder1/datacenter1/vm/folder2'
|
||||
- ' folder: vm/folder2'
|
||||
- ' folder: folder2'
|
||||
default: /vm
|
||||
version_added: "2.4"
|
||||
vm_id:
|
||||
description:
|
||||
- The identification for the VM
|
||||
|
@ -97,22 +115,23 @@ extends_documentation_fragment: vmware.documentation
|
|||
'''
|
||||
|
||||
EXAMPLES = '''
|
||||
- name: shell execution
|
||||
local_action:
|
||||
module: vmware_vm_shell
|
||||
hostname: myVSphere
|
||||
username: myUsername
|
||||
password: mySecret
|
||||
datacenter: myDatacenter
|
||||
vm_id: NameOfVM
|
||||
vm_username: root
|
||||
vm_password: superSecret
|
||||
vm_shell: /bin/echo
|
||||
vm_shell_args: " $var >> myFile "
|
||||
vm_shell_env:
|
||||
- "PATH=/bin"
|
||||
- "VAR=test"
|
||||
vm_shell_cwd: "/tmp"
|
||||
- name: shell execution
|
||||
local_action:
|
||||
module: vmware_vm_shell
|
||||
hostname: myVSphere
|
||||
username: myUsername
|
||||
password: mySecret
|
||||
datacenter: myDatacenter
|
||||
folder: /vm
|
||||
vm_id: NameOfVM
|
||||
vm_username: root
|
||||
vm_password: superSecret
|
||||
vm_shell: /bin/echo
|
||||
vm_shell_args: " $var >> myFile "
|
||||
vm_shell_env:
|
||||
- "PATH=/bin"
|
||||
- "VAR=test"
|
||||
vm_shell_cwd: "/tmp"
|
||||
|
||||
'''
|
||||
|
||||
|
@ -121,6 +140,9 @@ try:
|
|||
HAS_PYVMOMI = True
|
||||
except ImportError:
|
||||
HAS_PYVMOMI = False
|
||||
from ansible.module_utils.vmware import connect_to_api, find_cluster_by_name, find_datacenter_by_name, find_vm_by_id, vmware_argument_spec
|
||||
from ansible.module_utils.basic import AnsibleModule
|
||||
|
||||
|
||||
# https://github.com/vmware/pyvmomi-community-samples/blob/master/samples/execute_program_in_vm.py
|
||||
def execute_command(content, vm, vm_username, vm_password, program_path, args="", env=None, cwd=None):
|
||||
|
@ -131,11 +153,12 @@ def execute_command(content, vm, vm_username, vm_password, program_path, args=""
|
|||
|
||||
return cmdpid
|
||||
|
||||
def main():
|
||||
|
||||
def main():
|
||||
argument_spec = vmware_argument_spec()
|
||||
argument_spec.update(dict(datacenter=dict(default=None, type='str'),
|
||||
cluster=dict(default=None, type='str'),
|
||||
folder=dict(type='str', default='/vm'),
|
||||
vm_id=dict(required=True, type='str'),
|
||||
vm_id_type=dict(default='vm_name', type='str', choices=['inventory_path', 'uuid', 'dns_name', 'vm_name']),
|
||||
vm_username=dict(required=False, type='str'),
|
||||
|
@ -145,16 +168,19 @@ def main():
|
|||
vm_shell_env=dict(default=None, type='list'),
|
||||
vm_shell_cwd=dict(default=None, type='str')))
|
||||
|
||||
module = AnsibleModule(argument_spec=argument_spec, supports_check_mode=False)
|
||||
module = AnsibleModule(argument_spec=argument_spec,
|
||||
supports_check_mode=False,
|
||||
required_if=[['vm_id_type', 'inventory_path', ['folder']]],
|
||||
)
|
||||
|
||||
if not HAS_PYVMOMI:
|
||||
module.fail_json(changed=False, msg='pyvmomi is required for this module')
|
||||
|
||||
|
||||
try:
|
||||
p = module.params
|
||||
datacenter_name = p['datacenter']
|
||||
cluster_name = p['cluster']
|
||||
folder = p['folder']
|
||||
content = connect_to_api(module)
|
||||
|
||||
datacenter = None
|
||||
|
@ -169,7 +195,11 @@ def main():
|
|||
if not cluster:
|
||||
module.fail_json(changed=False, msg="cluster not found")
|
||||
|
||||
vm = find_vm_by_id(content, p['vm_id'], p['vm_id_type'], datacenter, cluster)
|
||||
if p['vm_id_type'] == 'inventory_path':
|
||||
vm = find_vm_by_id(content, vm_id=p['vm_id'], vm_id_type="inventory_path", folder=folder)
|
||||
else:
|
||||
vm = find_vm_by_id(content, vm_id=p['vm_id'], vm_id_type=p['vm_id_type'], datacenter=datacenter, cluster=cluster)
|
||||
|
||||
if not vm:
|
||||
module.fail_json(msg='VM not found')
|
||||
|
||||
|
@ -184,8 +214,5 @@ def main():
|
|||
except Exception as e:
|
||||
module.fail_json(changed=False, msg=str(e))
|
||||
|
||||
from ansible.module_utils.vmware import *
|
||||
from ansible.module_utils.basic import *
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue