VMware: Use managed object id to find VM (#59143)
* Based upon partial work of wilmardo * Now, user can specify managed object id of virtual machine to find an existing virtual machine Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
This commit is contained in:
parent
28259ee247
commit
8a13b41823
21 changed files with 604 additions and 153 deletions
|
@ -880,7 +880,7 @@ class PyVmomi(object):
|
||||||
# Virtual Machine related functions
|
# Virtual Machine related functions
|
||||||
def get_vm(self):
|
def get_vm(self):
|
||||||
"""
|
"""
|
||||||
Find unique virtual machine either by UUID or Name.
|
Find unique virtual machine either by UUID, MoID or Name.
|
||||||
Returns: virtual machine object if found, else None.
|
Returns: virtual machine object if found, else None.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
@ -959,6 +959,8 @@ class PyVmomi(object):
|
||||||
elif vms:
|
elif vms:
|
||||||
# Unique virtual machine found.
|
# Unique virtual machine found.
|
||||||
vm_obj = vms[0]
|
vm_obj = vms[0]
|
||||||
|
elif self.params['moid']:
|
||||||
|
vm_obj = VmomiSupport.templateOf('VirtualMachine')(self.params['moid'], self.si._stub)
|
||||||
|
|
||||||
if vm_obj:
|
if vm_obj:
|
||||||
self.current_vm_obj = vm_obj
|
self.current_vm_obj = vm_obj
|
||||||
|
|
|
@ -28,11 +28,17 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine to export.
|
- Name of the virtual machine to export.
|
||||||
- This is a required parameter, if parameter C(uuid) is not supplied.
|
- This is a required parameter, if parameter C(uuid) or C(moid) is not supplied.
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- Uuid of the virtual machine to export.
|
- Uuid of the virtual machine to export.
|
||||||
- This is a required parameter, if parameter C(name) is not supplied.
|
- This is a required parameter, if parameter C(name) or C(moid) is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
datacenter:
|
datacenter:
|
||||||
default: ha-datacenter
|
default: ha-datacenter
|
||||||
description:
|
description:
|
||||||
|
@ -304,6 +310,7 @@ def main():
|
||||||
argument_spec.update(
|
argument_spec.update(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(type='str', default='ha-datacenter'),
|
datacenter=dict(type='str', default='ha-datacenter'),
|
||||||
export_dir=dict(type='str'),
|
export_dir=dict(type='str'),
|
||||||
|
@ -313,7 +320,7 @@ def main():
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
module = AnsibleModule(argument_spec=argument_spec,
|
||||||
supports_check_mode=True,
|
supports_check_mode=True,
|
||||||
required_one_of=[
|
required_one_of=[
|
||||||
['name', 'uuid'],
|
['name', 'uuid', 'moid'],
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
pyv = VMwareExportVmOvf(module)
|
pyv = VMwareExportVmOvf(module)
|
||||||
|
|
|
@ -20,10 +20,10 @@ DOCUMENTATION = '''
|
||||||
module: vmware_guest_boot_facts
|
module: vmware_guest_boot_facts
|
||||||
short_description: Gather facts about boot options for the given virtual machine
|
short_description: Gather facts about boot options for the given virtual machine
|
||||||
description:
|
description:
|
||||||
- This module can be used to gather facts aboyt boot options for the given virtual machine.
|
- Gather facts about boot options for the given virtual machine.
|
||||||
version_added: 2.7
|
version_added: 2.7
|
||||||
author:
|
author:
|
||||||
- Abhijeet Kasurde (@Akasurde) <akasurde@redhat.com>
|
- Abhijeet Kasurde (@Akasurde)
|
||||||
notes:
|
notes:
|
||||||
- Tested on vSphere 6.5
|
- Tested on vSphere 6.5
|
||||||
requirements:
|
requirements:
|
||||||
|
@ -33,11 +33,17 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the VM to work with.
|
- Name of the VM to work with.
|
||||||
- This is required if C(uuid) parameter is not supplied.
|
- This is required if C(uuid) or C(moid) parameter is not supplied.
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to manage if known, this is VMware's BIOS UUID by default.
|
- UUID of the instance to manage if known, this is VMware's BIOS UUID by default.
|
||||||
- This is required if C(name) parameter is not supplied.
|
- This is required if C(name) or C(moid) parameter is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
|
@ -61,6 +67,15 @@ EXAMPLES = r'''
|
||||||
validate_certs: no
|
validate_certs: no
|
||||||
name: "{{ vm_name }}"
|
name: "{{ vm_name }}"
|
||||||
register: vm_boot_order_facts
|
register: vm_boot_order_facts
|
||||||
|
|
||||||
|
- name: Gather facts about virtual machine's boot order using MoID
|
||||||
|
vmware_guest_boot_facts:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
validate_certs: no
|
||||||
|
moid: "vm-42"
|
||||||
|
register: vm_moid_boot_order_facts
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = r"""
|
RETURN = r"""
|
||||||
|
@ -89,7 +104,7 @@ from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.vmware import PyVmomi, vmware_argument_spec, find_vm_by_id
|
from ansible.module_utils.vmware import PyVmomi, vmware_argument_spec, find_vm_by_id
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from pyVmomi import vim
|
from pyVmomi import vim, VmomiSupport
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -99,6 +114,7 @@ class VmBootFactsManager(PyVmomi):
|
||||||
super(VmBootFactsManager, self).__init__(module)
|
super(VmBootFactsManager, self).__init__(module)
|
||||||
self.name = self.params['name']
|
self.name = self.params['name']
|
||||||
self.uuid = self.params['uuid']
|
self.uuid = self.params['uuid']
|
||||||
|
self.moid = self.params['moid']
|
||||||
self.use_instance_uuid = self.params['use_instance_uuid']
|
self.use_instance_uuid = self.params['use_instance_uuid']
|
||||||
self.vm = None
|
self.vm = None
|
||||||
|
|
||||||
|
@ -120,13 +136,18 @@ class VmBootFactsManager(PyVmomi):
|
||||||
if temp_vm_object.obj.name == self.name:
|
if temp_vm_object.obj.name == self.name:
|
||||||
vms.append(temp_vm_object.obj)
|
vms.append(temp_vm_object.obj)
|
||||||
|
|
||||||
|
elif self.moid:
|
||||||
|
vm_obj = VmomiSupport.templateOf('VirtualMachine')(self.module.params['moid'], self.si._stub)
|
||||||
|
if vm_obj:
|
||||||
|
vms.append(vm_obj)
|
||||||
|
|
||||||
if vms:
|
if vms:
|
||||||
if self.params.get('name_match') == 'first':
|
if self.params.get('name_match') == 'first':
|
||||||
self.vm = vms[0]
|
self.vm = vms[0]
|
||||||
elif self.params.get('name_match') == 'last':
|
elif self.params.get('name_match') == 'last':
|
||||||
self.vm = vms[-1]
|
self.vm = vms[-1]
|
||||||
else:
|
else:
|
||||||
self.module.fail_json(msg="Failed to find virtual machine using %s" % (self.name or self.uuid))
|
self.module.fail_json(msg="Failed to find virtual machine using %s" % (self.name or self.uuid or self.moid))
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def humanize_boot_order(boot_order):
|
def humanize_boot_order(boot_order):
|
||||||
|
@ -165,6 +186,7 @@ def main():
|
||||||
argument_spec.update(
|
argument_spec.update(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
name_match=dict(
|
name_match=dict(
|
||||||
choices=['first', 'last'],
|
choices=['first', 'last'],
|
||||||
|
@ -175,10 +197,10 @@ def main():
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
argument_spec=argument_spec,
|
argument_spec=argument_spec,
|
||||||
required_one_of=[
|
required_one_of=[
|
||||||
['name', 'uuid']
|
['name', 'uuid', 'moid']
|
||||||
],
|
],
|
||||||
mutually_exclusive=[
|
mutually_exclusive=[
|
||||||
['name', 'uuid']
|
['name', 'uuid', 'moid']
|
||||||
],
|
],
|
||||||
supports_check_mode=True,
|
supports_check_mode=True,
|
||||||
)
|
)
|
||||||
|
|
|
@ -33,11 +33,17 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the VM to work with.
|
- Name of the VM to work with.
|
||||||
- This is required if C(uuid) parameter is not supplied.
|
- This is required if C(uuid) or C(moid) parameter is not supplied.
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to manage if known, this is VMware's BIOS UUID by default.
|
- UUID of the instance to manage if known, this is VMware's BIOS UUID by default.
|
||||||
- This is required if C(name) parameter is not supplied.
|
- This is required if C(name) or C(moid) parameter is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
|
@ -107,6 +113,26 @@ EXAMPLES = r'''
|
||||||
- disk
|
- disk
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: vm_boot_order
|
register: vm_boot_order
|
||||||
|
|
||||||
|
- name: Change virtual machine's boot order using Virtual Machine MoID
|
||||||
|
vmware_guest_boot_manager:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
moid: vm-42
|
||||||
|
boot_delay: 2000
|
||||||
|
enter_bios_setup: True
|
||||||
|
boot_retry_enabled: True
|
||||||
|
boot_retry_delay: 22300
|
||||||
|
boot_firmware: bios
|
||||||
|
secure_boot_enabled: False
|
||||||
|
boot_order:
|
||||||
|
- floppy
|
||||||
|
- cdrom
|
||||||
|
- ethernet
|
||||||
|
- disk
|
||||||
|
delegate_to: localhost
|
||||||
|
register: vm_boot_order
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = r"""
|
RETURN = r"""
|
||||||
|
@ -148,7 +174,7 @@ from ansible.module_utils._text import to_native
|
||||||
from ansible.module_utils.vmware import PyVmomi, vmware_argument_spec, find_vm_by_id, wait_for_task, TaskError
|
from ansible.module_utils.vmware import PyVmomi, vmware_argument_spec, find_vm_by_id, wait_for_task, TaskError
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from pyVmomi import vim
|
from pyVmomi import vim, VmomiSupport
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -158,6 +184,7 @@ class VmBootManager(PyVmomi):
|
||||||
super(VmBootManager, self).__init__(module)
|
super(VmBootManager, self).__init__(module)
|
||||||
self.name = self.params['name']
|
self.name = self.params['name']
|
||||||
self.uuid = self.params['uuid']
|
self.uuid = self.params['uuid']
|
||||||
|
self.moid = self.params['moid']
|
||||||
self.use_instance_uuid = self.params['use_instance_uuid']
|
self.use_instance_uuid = self.params['use_instance_uuid']
|
||||||
self.vm = None
|
self.vm = None
|
||||||
|
|
||||||
|
@ -179,6 +206,11 @@ class VmBootManager(PyVmomi):
|
||||||
if temp_vm_object.obj.name == self.name:
|
if temp_vm_object.obj.name == self.name:
|
||||||
vms.append(temp_vm_object.obj)
|
vms.append(temp_vm_object.obj)
|
||||||
|
|
||||||
|
elif self.moid:
|
||||||
|
vm_obj = VmomiSupport.templateOf('VirtualMachine')(self.module.params['moid'], self.si._stub)
|
||||||
|
if vm_obj:
|
||||||
|
vms.append(vm_obj)
|
||||||
|
|
||||||
if vms:
|
if vms:
|
||||||
if self.params.get('name_match') == 'first':
|
if self.params.get('name_match') == 'first':
|
||||||
self.vm = vms[0]
|
self.vm = vms[0]
|
||||||
|
@ -324,6 +356,7 @@ def main():
|
||||||
argument_spec.update(
|
argument_spec.update(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
boot_order=dict(
|
boot_order=dict(
|
||||||
type='list',
|
type='list',
|
||||||
|
@ -362,10 +395,10 @@ def main():
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
argument_spec=argument_spec,
|
argument_spec=argument_spec,
|
||||||
required_one_of=[
|
required_one_of=[
|
||||||
['name', 'uuid']
|
['name', 'uuid', 'moid']
|
||||||
],
|
],
|
||||||
mutually_exclusive=[
|
mutually_exclusive=[
|
||||||
['name', 'uuid']
|
['name', 'uuid', 'moid']
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,7 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine to work with.
|
- Name of the virtual machine to work with.
|
||||||
|
- This is required parameter, if C(uuid) or C(moid) is not supplied.
|
||||||
required: True
|
required: True
|
||||||
state:
|
state:
|
||||||
description:
|
description:
|
||||||
|
@ -47,7 +48,13 @@ options:
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the virtual machine to manage if known. This is VMware's unique identifier.
|
- UUID of the virtual machine to manage if known. This is VMware's unique identifier.
|
||||||
- This is required parameter, if C(name) is not supplied.
|
- This is required parameter, if C(name) or C(moid) is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
|
@ -111,6 +118,17 @@ EXAMPLES = '''
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: attributes
|
register: attributes
|
||||||
|
|
||||||
|
- name: Remove virtual machine Attribute using Virtual Machine MoID
|
||||||
|
vmware_guest_custom_attributes:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
moid: vm-42
|
||||||
|
state: absent
|
||||||
|
attributes:
|
||||||
|
- name: MyAttribute
|
||||||
|
delegate_to: localhost
|
||||||
|
register: attributes
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = """
|
RETURN = """
|
||||||
|
@ -185,6 +203,7 @@ def main():
|
||||||
name=dict(required=True, type='str'),
|
name=dict(required=True, type='str'),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
state=dict(type='str', default='present',
|
state=dict(type='str', default='present',
|
||||||
choices=['absent', 'present']),
|
choices=['absent', 'present']),
|
||||||
|
@ -201,7 +220,9 @@ def main():
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
argument_spec=argument_spec,
|
argument_spec=argument_spec,
|
||||||
supports_check_mode=True,
|
supports_check_mode=True,
|
||||||
required_one_of=[['name', 'uuid']],
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
if module.params.get('folder'):
|
if module.params.get('folder'):
|
||||||
|
@ -224,8 +245,9 @@ def main():
|
||||||
module.exit_json(**results)
|
module.exit_json(**results)
|
||||||
else:
|
else:
|
||||||
# virtual machine does not exists
|
# virtual machine does not exists
|
||||||
|
vm_id = (module.params.get('name') or module.params.get('uuid') or module.params.get('moid'))
|
||||||
module.fail_json(msg="Unable to manage custom attributes for non-existing"
|
module.fail_json(msg="Unable to manage custom attributes for non-existing"
|
||||||
" virtual machine %s" % (module.params.get('name') or module.params.get('uuid')))
|
" virtual machine %s" % vm_id)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -36,11 +36,17 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine.
|
- Name of the virtual machine.
|
||||||
- This is a required parameter, if parameter C(uuid) is not supplied.
|
- This is a required parameter, if parameter C(uuid) or C(moid) is not supplied.
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
||||||
- This is a required parameter, if parameter C(name) is not supplied.
|
- This is a required parameter, if parameter C(name) or C(moid) is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
folder:
|
folder:
|
||||||
description:
|
description:
|
||||||
- Destination folder, absolute or relative path to find an existing guest.
|
- Destination folder, absolute or relative path to find an existing guest.
|
||||||
|
@ -74,7 +80,7 @@ options:
|
||||||
- 'Valid attributes are:'
|
- 'Valid attributes are:'
|
||||||
- ' - C(size[_tb,_gb,_mb,_kb]) (integer): Disk storage size in specified unit.'
|
- ' - C(size[_tb,_gb,_mb,_kb]) (integer): Disk storage size in specified unit.'
|
||||||
- ' If C(size) specified then unit must be specified. There is no space allowed in between size number and unit.'
|
- ' If C(size) specified then unit must be specified. There is no space allowed in between size number and unit.'
|
||||||
- ' Only first occurance in disk element will be considered, even if there are multiple size* parameters available.'
|
- ' Only first occurrence in disk element will be considered, even if there are multiple size* parameters available.'
|
||||||
- ' - C(type) (string): Valid values are:'
|
- ' - C(type) (string): Valid values are:'
|
||||||
- ' - C(thin) thin disk'
|
- ' - C(thin) thin disk'
|
||||||
- ' - C(eagerzeroedthick) eagerzeroedthick disk'
|
- ' - C(eagerzeroedthick) eagerzeroedthick disk'
|
||||||
|
@ -147,6 +153,21 @@ EXAMPLES = '''
|
||||||
unit_number: 1
|
unit_number: 1
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: disk_facts
|
register: disk_facts
|
||||||
|
|
||||||
|
- name: Remove disks from virtual machine using moid
|
||||||
|
vmware_guest_disk:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: "{{ datacenter_name }}"
|
||||||
|
validate_certs: no
|
||||||
|
moid: vm-42
|
||||||
|
disk:
|
||||||
|
- state: absent
|
||||||
|
scsi_controller: 1
|
||||||
|
unit_number: 1
|
||||||
|
delegate_to: localhost
|
||||||
|
register: disk_facts
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = """
|
RETURN = """
|
||||||
|
@ -578,7 +599,7 @@ class PyVmomiHelper(PyVmomi):
|
||||||
rec = self.content.storageResourceManager.RecommendDatastores(storageSpec=storage_spec)
|
rec = self.content.storageResourceManager.RecommendDatastores(storageSpec=storage_spec)
|
||||||
rec_action = rec.recommendations[0].action[0]
|
rec_action = rec.recommendations[0].action[0]
|
||||||
return rec_action.destination.name
|
return rec_action.destination.name
|
||||||
except Exception as e:
|
except Exception:
|
||||||
# There is some error so we fall back to general workflow
|
# There is some error so we fall back to general workflow
|
||||||
pass
|
pass
|
||||||
datastore = None
|
datastore = None
|
||||||
|
@ -633,13 +654,18 @@ def main():
|
||||||
argument_spec.update(
|
argument_spec.update(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(type='str', required=True),
|
datacenter=dict(type='str', required=True),
|
||||||
disk=dict(type='list', default=[]),
|
disk=dict(type='list', default=[]),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
)
|
)
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
module = AnsibleModule(
|
||||||
required_one_of=[['name', 'uuid']])
|
argument_spec=argument_spec,
|
||||||
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
if module.params['folder']:
|
if module.params['folder']:
|
||||||
# FindByInventoryPath() does not require an absolute path
|
# FindByInventoryPath() does not require an absolute path
|
||||||
|
@ -653,8 +679,9 @@ def main():
|
||||||
if not vm:
|
if not vm:
|
||||||
# We unable to find the virtual machine user specified
|
# We unable to find the virtual machine user specified
|
||||||
# Bail out
|
# Bail out
|
||||||
|
vm_id = (module.params.get('name') or module.params.get('uuid') or module.params.get('moid'))
|
||||||
module.fail_json(msg="Unable to manage disks for non-existing"
|
module.fail_json(msg="Unable to manage disks for non-existing"
|
||||||
" virtual machine '%s'." % (module.params.get('uuid') or module.params.get('name')))
|
" virtual machine '%s'." % vm_id)
|
||||||
|
|
||||||
# VM exists
|
# VM exists
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -36,11 +36,17 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine.
|
- Name of the virtual machine.
|
||||||
- This is required parameter, if parameter C(uuid) is not supplied.
|
- This is required parameter, if parameter C(uuid) or C(moid) is not supplied.
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
||||||
- This is required parameter, if parameter C(name) is not supplied.
|
- This is required parameter, if parameter C(name) or C(moid) is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
|
@ -62,8 +68,6 @@ options:
|
||||||
- ' folder: /folder1/datacenter1/vm'
|
- ' folder: /folder1/datacenter1/vm'
|
||||||
- ' folder: folder1/datacenter1/vm'
|
- ' folder: folder1/datacenter1/vm'
|
||||||
- ' folder: /folder1/datacenter1/vm/folder2'
|
- ' folder: /folder1/datacenter1/vm/folder2'
|
||||||
- ' folder: vm/folder2'
|
|
||||||
- ' folder: folder2'
|
|
||||||
datacenter:
|
datacenter:
|
||||||
description:
|
description:
|
||||||
- The datacenter name to which virtual machine belongs to.
|
- The datacenter name to which virtual machine belongs to.
|
||||||
|
@ -93,6 +97,17 @@ EXAMPLES = '''
|
||||||
name: VM_225
|
name: VM_225
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: disk_facts
|
register: disk_facts
|
||||||
|
|
||||||
|
- name: Gather disk facts from virtual machine using moid
|
||||||
|
vmware_guest_disk_facts:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: ha-datacenter
|
||||||
|
validate_certs: no
|
||||||
|
moid: vm-42
|
||||||
|
delegate_to: localhost
|
||||||
|
register: disk_facts
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = """
|
RETURN = """
|
||||||
|
@ -270,13 +285,16 @@ def main():
|
||||||
argument_spec.update(
|
argument_spec.update(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(type='str', required=True),
|
datacenter=dict(type='str', required=True),
|
||||||
)
|
)
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
argument_spec=argument_spec,
|
argument_spec=argument_spec,
|
||||||
required_one_of=[['name', 'uuid']],
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
],
|
||||||
supports_check_mode=True,
|
supports_check_mode=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -298,7 +316,8 @@ def main():
|
||||||
else:
|
else:
|
||||||
# We unable to find the virtual machine user specified
|
# We unable to find the virtual machine user specified
|
||||||
# Bail out
|
# Bail out
|
||||||
module.fail_json(msg="Unable to gather disk facts for non-existing VM %s" % (module.params.get('uuid') or module.params.get('name')))
|
vm_id = (module.params.get('uuid') or module.params.get('moid') or module.params.get('name'))
|
||||||
|
module.fail_json(msg="Unable to gather disk facts for non-existing VM %s" % vm_id)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -34,7 +34,7 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the VM to work with
|
- Name of the VM to work with
|
||||||
- This is required if UUID is not supplied.
|
- This is required if C(uuid) or C(moid) is not supplied.
|
||||||
name_match:
|
name_match:
|
||||||
description:
|
description:
|
||||||
- If multiple VMs matching the name, use the first or last found
|
- If multiple VMs matching the name, use the first or last found
|
||||||
|
@ -43,13 +43,19 @@ options:
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to manage if known, this is VMware's unique identifier.
|
- UUID of the instance to manage if known, this is VMware's unique identifier.
|
||||||
- This is required if name is not supplied.
|
- This is required if C(name) or C(moid) is not supplied.
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
default: no
|
default: no
|
||||||
type: bool
|
type: bool
|
||||||
version_added: '2.8'
|
version_added: '2.8'
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
folder:
|
folder:
|
||||||
description:
|
description:
|
||||||
- Destination folder, absolute or relative path to find an existing guest.
|
- Destination folder, absolute or relative path to find an existing guest.
|
||||||
|
@ -65,8 +71,6 @@ options:
|
||||||
- ' folder: /folder1/datacenter1/vm'
|
- ' folder: /folder1/datacenter1/vm'
|
||||||
- ' folder: folder1/datacenter1/vm'
|
- ' folder: folder1/datacenter1/vm'
|
||||||
- ' folder: /folder1/datacenter1/vm/folder2'
|
- ' folder: /folder1/datacenter1/vm/folder2'
|
||||||
- ' folder: vm/folder2'
|
|
||||||
- ' folder: folder2'
|
|
||||||
datacenter:
|
datacenter:
|
||||||
description:
|
description:
|
||||||
- Destination datacenter for the deploy operation
|
- Destination datacenter for the deploy operation
|
||||||
|
@ -134,6 +138,19 @@ EXAMPLES = '''
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: facts
|
register: facts
|
||||||
|
|
||||||
|
- name: Gather some facts from a guest using MoID
|
||||||
|
vmware_guest_facts:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
validate_certs: no
|
||||||
|
datacenter: "{{ datacenter_name }}"
|
||||||
|
moid: vm-42
|
||||||
|
schema: "vsphere"
|
||||||
|
properties: ["config.hardware.memoryMB", "guest.disk", "overallStatus"]
|
||||||
|
delegate_to: localhost
|
||||||
|
register: vm_moid_facts
|
||||||
|
|
||||||
- name: Gather Managed object ID (moid) from a guest using the vSphere API output schema for REST Calls
|
- name: Gather Managed object ID (moid) from a guest using the vSphere API output schema for REST Calls
|
||||||
vmware_guest_facts:
|
vmware_guest_facts:
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
@ -237,6 +254,7 @@ def main():
|
||||||
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
|
moid=dict(type='str'),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(type='str', required=True),
|
datacenter=dict(type='str', required=True),
|
||||||
tags=dict(type='bool', default=False),
|
tags=dict(type='bool', default=False),
|
||||||
|
@ -244,7 +262,7 @@ def main():
|
||||||
properties=dict(type='list')
|
properties=dict(type='list')
|
||||||
)
|
)
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
module = AnsibleModule(argument_spec=argument_spec,
|
||||||
required_one_of=[['name', 'uuid']],
|
required_one_of=[['name', 'uuid', 'moid']],
|
||||||
supports_check_mode=True)
|
supports_check_mode=True)
|
||||||
|
|
||||||
if module.params.get('folder'):
|
if module.params.get('folder'):
|
||||||
|
@ -282,8 +300,8 @@ def main():
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
module.fail_json(msg="Fact gather failed with exception %s" % to_text(exc))
|
module.fail_json(msg="Fact gather failed with exception %s" % to_text(exc))
|
||||||
else:
|
else:
|
||||||
module.fail_json(msg="Unable to gather facts for non-existing VM %s" % (module.params.get('uuid') or
|
vm_id = (module.params.get('uuid') or module.params.get('name') or module.params.get('moid'))
|
||||||
module.params.get('name')))
|
module.fail_json(msg="Unable to gather facts for non-existing VM %s" % vm_id)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -32,11 +32,17 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the existing virtual machine to move.
|
- Name of the existing virtual machine to move.
|
||||||
- This is required if C(UUID) is not supplied.
|
- This is required if C(uuid) or C(moid) is not supplied.
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the virtual machine to manage if known, this is VMware's unique identifier.
|
- UUID of the virtual machine to manage if known, this is VMware's unique identifier.
|
||||||
- This is required if C(name) is not supplied.
|
- This is required if C(name) or C(moid) is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
|
@ -83,6 +89,17 @@ EXAMPLES = r'''
|
||||||
dest_folder: "/{{ datacenter }}/vm"
|
dest_folder: "/{{ datacenter }}/vm"
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
|
|
||||||
|
- name: Move Virtual Machine using MoID
|
||||||
|
vmware_guest_move:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: datacenter
|
||||||
|
validate_certs: no
|
||||||
|
moid: vm-42
|
||||||
|
dest_folder: "/{{ datacenter }}/vm"
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
- name: Get VM UUID
|
- name: Get VM UUID
|
||||||
vmware_guest_facts:
|
vmware_guest_facts:
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
@ -175,6 +192,7 @@ def main():
|
||||||
name_match=dict(
|
name_match=dict(
|
||||||
type='str', choices=['first', 'last'], default='first'),
|
type='str', choices=['first', 'last'], default='first'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
dest_folder=dict(type='str', required=True),
|
dest_folder=dict(type='str', required=True),
|
||||||
datacenter=dict(type='str', required=True),
|
datacenter=dict(type='str', required=True),
|
||||||
|
@ -182,10 +200,10 @@ def main():
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
argument_spec=argument_spec,
|
argument_spec=argument_spec,
|
||||||
required_one_of=[
|
required_one_of=[
|
||||||
['name', 'uuid']
|
['name', 'uuid', 'moid']
|
||||||
],
|
],
|
||||||
mutually_exclusive=[
|
mutually_exclusive=[
|
||||||
['name', 'uuid']
|
['name', 'uuid', 'moid']
|
||||||
],
|
],
|
||||||
supports_check_mode=True
|
supports_check_mode=True
|
||||||
)
|
)
|
||||||
|
@ -229,9 +247,8 @@ def main():
|
||||||
else:
|
else:
|
||||||
if module.check_mode:
|
if module.check_mode:
|
||||||
module.exit_json(changed=False)
|
module.exit_json(changed=False)
|
||||||
module.fail_json(msg="Unable to find VM %s to move to %s" % (
|
vm_id = (module.params.get('uuid') or module.params.get('name') or module.params.get('moid'))
|
||||||
(module.params.get('uuid') or module.params.get('name')),
|
module.fail_json(msg="Unable to find VM %s to move to %s" % (vm_id, module.params.get('dest_folder')))
|
||||||
module.params.get('dest_folder')))
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -32,12 +32,17 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine.
|
- Name of the virtual machine.
|
||||||
- This is a required parameter, if parameter C(uuid) is not supplied.
|
- This is a required parameter, if parameter C(uuid) or C(moid) is not supplied.
|
||||||
type: str
|
type: str
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
||||||
- This is a required parameter, if parameter C(name) is not supplied.
|
- This is a required parameter, if parameter C(name) or C(moid) is not supplied.
|
||||||
|
type: str
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
type: str
|
type: str
|
||||||
folder:
|
folder:
|
||||||
description:
|
description:
|
||||||
|
@ -134,6 +139,20 @@ EXAMPLES = '''
|
||||||
mac: "00:50:56:44:55:77"
|
mac: "00:50:56:44:55:77"
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: network_facts
|
register: network_facts
|
||||||
|
|
||||||
|
- name: Change network adapter settings of virtual machine using MoID
|
||||||
|
vmware_guest_network:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: "{{ datacenter_name }}"
|
||||||
|
validate_certs: no
|
||||||
|
moid: vm-42
|
||||||
|
gather_network_facts: false
|
||||||
|
networks:
|
||||||
|
- state: absent
|
||||||
|
mac: "00:50:56:44:55:77"
|
||||||
|
delegate_to: localhost
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = """
|
RETURN = """
|
||||||
|
@ -156,8 +175,6 @@ network_data:
|
||||||
}
|
}
|
||||||
"""
|
"""
|
||||||
|
|
||||||
import re
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from pyVmomi import vim
|
from pyVmomi import vim
|
||||||
except ImportError:
|
except ImportError:
|
||||||
|
@ -166,7 +183,7 @@ except ImportError:
|
||||||
from ansible.module_utils.basic import AnsibleModule
|
from ansible.module_utils.basic import AnsibleModule
|
||||||
from ansible.module_utils.common.network import is_mac
|
from ansible.module_utils.common.network import is_mac
|
||||||
from ansible.module_utils._text import to_native, to_text
|
from ansible.module_utils._text import to_native, to_text
|
||||||
from ansible.module_utils.vmware import PyVmomi, vmware_argument_spec, wait_for_task, find_obj, get_all_objs, get_parent_datacenter
|
from ansible.module_utils.vmware import PyVmomi, vmware_argument_spec, wait_for_task, get_all_objs, get_parent_datacenter
|
||||||
|
|
||||||
|
|
||||||
class PyVmomiHelper(PyVmomi):
|
class PyVmomiHelper(PyVmomi):
|
||||||
|
@ -435,6 +452,7 @@ def main():
|
||||||
argument_spec.update(
|
argument_spec.update(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(type='str', default='ha-datacenter'),
|
datacenter=dict(type='str', default='ha-datacenter'),
|
||||||
esxi_hostname=dict(type='str'),
|
esxi_hostname=dict(type='str'),
|
||||||
|
@ -443,12 +461,18 @@ def main():
|
||||||
networks=dict(type='list', default=[])
|
networks=dict(type='list', default=[])
|
||||||
)
|
)
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec, required_one_of=[['name', 'uuid']])
|
module = AnsibleModule(
|
||||||
|
argument_spec=argument_spec,
|
||||||
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
pyv = PyVmomiHelper(module)
|
pyv = PyVmomiHelper(module)
|
||||||
vm = pyv.get_vm()
|
vm = pyv.get_vm()
|
||||||
if not vm:
|
if not vm:
|
||||||
module.fail_json(msg='Unable to find the specified virtual machine uuid: %s, name: %s '
|
vm_id = (module.params.get('uuid') or module.params.get('name') or module.params.get('moid'))
|
||||||
% ((module.params.get('uuid')), (module.params.get('name'))))
|
module.fail_json(msg='Unable to find the specified virtual machine using %s' % vm_id)
|
||||||
|
|
||||||
result = pyv.reconfigure_vm_network(vm)
|
result = pyv.reconfigure_vm_network(vm)
|
||||||
if result['failed']:
|
if result['failed']:
|
||||||
|
|
|
@ -41,7 +41,13 @@ options:
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to manage if known, this is VMware's unique identifier.
|
- UUID of the instance to manage if known, this is VMware's unique identifier.
|
||||||
- This is required if name is not supplied.
|
- This is required if C(name) or C(moid) is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
|
@ -118,6 +124,18 @@ EXAMPLES = r'''
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: deploy
|
register: deploy
|
||||||
|
|
||||||
|
- name: Set the state of a virtual machine to poweron using MoID
|
||||||
|
vmware_guest_powerstate:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
validate_certs: no
|
||||||
|
folder: "/{{ datacenter_name }}/vm/my_folder"
|
||||||
|
moid: vm-42
|
||||||
|
state: powered-on
|
||||||
|
delegate_to: localhost
|
||||||
|
register: deploy
|
||||||
|
|
||||||
- name: Set the state of a virtual machine to poweroff at given scheduled time
|
- name: Set the state of a virtual machine to poweroff at given scheduled time
|
||||||
vmware_guest_powerstate:
|
vmware_guest_powerstate:
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
@ -167,6 +185,7 @@ def main():
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
force=dict(type='bool', default=False),
|
force=dict(type='bool', default=False),
|
||||||
|
@ -177,10 +196,11 @@ def main():
|
||||||
state_change_timeout=dict(type='int', default=0),
|
state_change_timeout=dict(type='int', default=0),
|
||||||
)
|
)
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
module = AnsibleModule(
|
||||||
|
argument_spec=argument_spec,
|
||||||
supports_check_mode=False,
|
supports_check_mode=False,
|
||||||
mutually_exclusive=[
|
mutually_exclusive=[
|
||||||
['name', 'uuid'],
|
['name', 'uuid', 'moid'],
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -244,7 +264,8 @@ def main():
|
||||||
else:
|
else:
|
||||||
result = set_vm_power_state(pyv.content, vm, module.params['state'], module.params['force'], module.params['state_change_timeout'])
|
result = set_vm_power_state(pyv.content, vm, module.params['state'], module.params['force'], module.params['state_change_timeout'])
|
||||||
else:
|
else:
|
||||||
module.fail_json(msg="Unable to set power state for non-existing virtual machine : '%s'" % (module.params.get('uuid') or module.params.get('name')))
|
id = module.params.get('uuid') or module.params.get('moid') or module.params.get('name')
|
||||||
|
module.fail_json(msg="Unable to set power state for non-existing virtual machine : '%s'" % id)
|
||||||
|
|
||||||
if result.get('failed') is True:
|
if result.get('failed') is True:
|
||||||
module.fail_json(**result)
|
module.fail_json(**result)
|
||||||
|
|
|
@ -32,12 +32,18 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine.
|
- Name of the virtual machine.
|
||||||
- This is a required parameter, if parameter C(uuid) is not supplied.
|
- This is a required parameter, if parameter C(uuid) or C(moid) is not supplied.
|
||||||
type: str
|
type: str
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
||||||
- This is a required parameter, if parameter C(name) is not supplied.
|
- This is a required parameter, if parameter C(name) or C(moid) is not supplied.
|
||||||
|
type: str
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
type: str
|
type: str
|
||||||
folder:
|
folder:
|
||||||
description:
|
description:
|
||||||
|
@ -95,6 +101,19 @@ EXAMPLES = '''
|
||||||
local_path: "/tmp/"
|
local_path: "/tmp/"
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: take_screenshot
|
register: take_screenshot
|
||||||
|
|
||||||
|
- name: Take a screenshot of the virtual machine console using MoID
|
||||||
|
vmware_guest_screenshot:
|
||||||
|
validate_certs: no
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: "{{ datacenter_name }}"
|
||||||
|
folder: "{{ folder_name }}"
|
||||||
|
moid: vm-42
|
||||||
|
local_path: "/tmp/"
|
||||||
|
delegate_to: localhost
|
||||||
|
register: take_screenshot
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = """
|
RETURN = """
|
||||||
|
@ -244,18 +263,24 @@ def main():
|
||||||
argument_spec.update(
|
argument_spec.update(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(type='str'),
|
datacenter=dict(type='str'),
|
||||||
esxi_hostname=dict(type='str'),
|
esxi_hostname=dict(type='str'),
|
||||||
cluster=dict(type='str'),
|
cluster=dict(type='str'),
|
||||||
local_path=dict(type='str'),
|
local_path=dict(type='str'),
|
||||||
)
|
)
|
||||||
module = AnsibleModule(argument_spec=argument_spec, required_one_of=[['name', 'uuid']])
|
module = AnsibleModule(
|
||||||
|
argument_spec=argument_spec,
|
||||||
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
]
|
||||||
|
)
|
||||||
pyv = PyVmomiHelper(module)
|
pyv = PyVmomiHelper(module)
|
||||||
vm = pyv.get_vm()
|
vm = pyv.get_vm()
|
||||||
if not vm:
|
if not vm:
|
||||||
module.fail_json(msg='Unable to find the specified virtual machine uuid: %s, name: %s '
|
vm_id = (module.params.get('uuid') or module.params.get('name') or module.params.get('moid'))
|
||||||
% ((module.params.get('uuid')), (module.params.get('name'))))
|
module.fail_json(msg='Unable to find the specified virtual machine : %s' % vm_id)
|
||||||
|
|
||||||
result = pyv.take_vm_screenshot()
|
result = pyv.take_vm_screenshot()
|
||||||
if result['failed']:
|
if result['failed']:
|
||||||
|
|
|
@ -32,12 +32,17 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine.
|
- Name of the virtual machine.
|
||||||
- This is a required parameter, if parameter C(uuid) is not supplied.
|
- This is a required parameter, if parameter C(uuid) or C(moid) is not supplied.
|
||||||
type: str
|
type: str
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
||||||
- This is a required parameter, if parameter C(name) is not supplied.
|
- This is a required parameter, if parameter C(name) or C(moid) is not supplied.
|
||||||
|
type: str
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
type: str
|
type: str
|
||||||
folder:
|
folder:
|
||||||
description:
|
description:
|
||||||
|
@ -87,7 +92,7 @@ extends_documentation_fragment: vmware.documentation
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
EXAMPLES = '''
|
||||||
- name: send list of keys to virtual machine
|
- name: Send list of keys to virtual machine
|
||||||
vmware_guest_sendkey:
|
vmware_guest_sendkey:
|
||||||
validate_certs: no
|
validate_certs: no
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
@ -103,7 +108,21 @@ EXAMPLES = '''
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: keys_num_sent
|
register: keys_num_sent
|
||||||
|
|
||||||
- name: send a string to virtual machine
|
- name: Send list of keys to virtual machine using MoID
|
||||||
|
vmware_guest_sendkey:
|
||||||
|
validate_certs: no
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: "{{ datacenter_name }}"
|
||||||
|
folder: "{{ folder_name }}"
|
||||||
|
moid: vm-42
|
||||||
|
keys_send:
|
||||||
|
- CTRL_ALT_DEL
|
||||||
|
delegate_to: localhost
|
||||||
|
register: ctrl_alt_del_sent
|
||||||
|
|
||||||
|
- name: Send a string to virtual machine
|
||||||
vmware_guest_sendkey:
|
vmware_guest_sendkey:
|
||||||
validate_certs: no
|
validate_certs: no
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
@ -336,6 +355,7 @@ def main():
|
||||||
argument_spec.update(
|
argument_spec.update(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(type='str'),
|
datacenter=dict(type='str'),
|
||||||
esxi_hostname=dict(type='str'),
|
esxi_hostname=dict(type='str'),
|
||||||
|
@ -344,12 +364,18 @@ def main():
|
||||||
string_send=dict(type='str')
|
string_send=dict(type='str')
|
||||||
)
|
)
|
||||||
|
|
||||||
module = AnsibleModule(argument_spec=argument_spec, required_one_of=[['name', 'uuid']])
|
module = AnsibleModule(
|
||||||
|
argument_spec=argument_spec,
|
||||||
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
pyv = PyVmomiHelper(module)
|
pyv = PyVmomiHelper(module)
|
||||||
vm = pyv.get_vm()
|
vm = pyv.get_vm()
|
||||||
if not vm:
|
if not vm:
|
||||||
module.fail_json(msg='Unable to find the specified virtual machine uuid: %s, name: %s '
|
vm_id = (module.params.get('uuid') or module.params.get('name') or module.params.get('moid'))
|
||||||
% ((module.params.get('uuid')), (module.params.get('name'))))
|
module.fail_json(msg='Unable to find the specified virtual machine : %s ' % vm_id)
|
||||||
|
|
||||||
result = pyv.send_key_to_vm(vm)
|
result = pyv.send_key_to_vm(vm)
|
||||||
if result['failed']:
|
if result['failed']:
|
||||||
|
|
|
@ -44,7 +44,7 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine to work with.
|
- Name of the virtual machine to work with.
|
||||||
- This is required parameter, if C(uuid) is not supplied.
|
- This is required parameter, if C(uuid) or C(moid) is not supplied.
|
||||||
name_match:
|
name_match:
|
||||||
description:
|
description:
|
||||||
- If multiple VMs matching the name, use the first or last found.
|
- If multiple VMs matching the name, use the first or last found.
|
||||||
|
@ -53,7 +53,13 @@ options:
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to manage if known, this is VMware's BIOS UUID by default.
|
- UUID of the instance to manage if known, this is VMware's BIOS UUID by default.
|
||||||
- This is required if C(name) parameter is not supplied.
|
- This is required if C(name) or C(moid) parameter is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
|
@ -75,8 +81,6 @@ options:
|
||||||
- ' folder: /folder1/datacenter1/vm'
|
- ' folder: /folder1/datacenter1/vm'
|
||||||
- ' folder: folder1/datacenter1/vm'
|
- ' folder: folder1/datacenter1/vm'
|
||||||
- ' folder: /folder1/datacenter1/vm/folder2'
|
- ' folder: /folder1/datacenter1/vm/folder2'
|
||||||
- ' folder: vm/folder2'
|
|
||||||
- ' folder: folder2'
|
|
||||||
datacenter:
|
datacenter:
|
||||||
description:
|
description:
|
||||||
- Destination datacenter for the deploy operation.
|
- Destination datacenter for the deploy operation.
|
||||||
|
@ -175,6 +179,17 @@ EXAMPLES = '''
|
||||||
state: remove_all
|
state: remove_all
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
|
|
||||||
|
- name: Remove all snapshots of a VM using MoID
|
||||||
|
vmware_guest_snapshot:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: "{{ datacenter_name }}"
|
||||||
|
folder: "/{{ datacenter_name }}/vm/"
|
||||||
|
moid: vm-42
|
||||||
|
state: remove_all
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
- name: Take snapshot of a VM using quiesce and memory flag on
|
- name: Take snapshot of a VM using quiesce and memory flag on
|
||||||
vmware_guest_snapshot:
|
vmware_guest_snapshot:
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
@ -314,8 +329,8 @@ class PyVmomiHelper(PyVmomi):
|
||||||
|
|
||||||
def rename_snapshot(self, vm):
|
def rename_snapshot(self, vm):
|
||||||
if vm.snapshot is None:
|
if vm.snapshot is None:
|
||||||
self.module.fail_json(msg="virtual machine - %s doesn't have any"
|
vm_id = self.module.params.get('uuid') or self.module.params.get('name') or self.params.get('moid')
|
||||||
" snapshots" % (self.module.params.get('uuid') or self.module.params.get('name')))
|
self.module.fail_json(msg="virtual machine - %s doesn't have any snapshots" % vm_id)
|
||||||
|
|
||||||
snap_obj = self.get_snapshots_by_name_recursively(vm.snapshot.rootSnapshotList,
|
snap_obj = self.get_snapshots_by_name_recursively(vm.snapshot.rootSnapshotList,
|
||||||
self.module.params["snapshot_name"])
|
self.module.params["snapshot_name"])
|
||||||
|
@ -330,10 +345,10 @@ class PyVmomiHelper(PyVmomi):
|
||||||
else:
|
else:
|
||||||
task = snap_obj.RenameSnapshot(description=self.module.params["new_description"])
|
task = snap_obj.RenameSnapshot(description=self.module.params["new_description"])
|
||||||
else:
|
else:
|
||||||
|
vm_id = self.module.params.get('uuid') or self.module.params.get('name') or self.params.get('moid')
|
||||||
self.module.exit_json(
|
self.module.exit_json(
|
||||||
msg="Couldn't find any snapshots with specified name: %s on VM: %s" %
|
msg="Couldn't find any snapshots with specified name: %s on VM: %s" %
|
||||||
(self.module.params["snapshot_name"],
|
(self.module.params["snapshot_name"], vm_id))
|
||||||
self.module.params.get('uuid') or self.module.params.get('name')))
|
|
||||||
return task
|
return task
|
||||||
|
|
||||||
def remove_or_revert_snapshot(self, vm):
|
def remove_or_revert_snapshot(self, vm):
|
||||||
|
@ -357,9 +372,9 @@ class PyVmomiHelper(PyVmomi):
|
||||||
elif self.module.params["state"] == "revert":
|
elif self.module.params["state"] == "revert":
|
||||||
task = snap_obj.RevertToSnapshot_Task()
|
task = snap_obj.RevertToSnapshot_Task()
|
||||||
else:
|
else:
|
||||||
|
vm_id = self.module.params.get('uuid') or self.module.params.get('name') or self.params.get('moid')
|
||||||
self.module.exit_json(msg="Couldn't find any snapshots with"
|
self.module.exit_json(msg="Couldn't find any snapshots with"
|
||||||
" specified name: %s on VM: %s" % (self.module.params["snapshot_name"],
|
" specified name: %s on VM: %s" % (self.module.params["snapshot_name"], vm_id))
|
||||||
self.module.params.get('uuid') or self.module.params.get('name')))
|
|
||||||
|
|
||||||
return task
|
return task
|
||||||
|
|
||||||
|
@ -397,6 +412,7 @@ def main():
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(required=True, type='str'),
|
datacenter=dict(required=True, type='str'),
|
||||||
|
@ -408,9 +424,14 @@ def main():
|
||||||
new_snapshot_name=dict(type='str'),
|
new_snapshot_name=dict(type='str'),
|
||||||
new_description=dict(type='str'),
|
new_description=dict(type='str'),
|
||||||
)
|
)
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
module = AnsibleModule(
|
||||||
required_together=[['name', 'folder']],
|
argument_spec=argument_spec,
|
||||||
required_one_of=[['name', 'uuid']],
|
required_together=[
|
||||||
|
['name', 'folder']
|
||||||
|
],
|
||||||
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
if module.params['folder']:
|
if module.params['folder']:
|
||||||
|
@ -423,9 +444,8 @@ def main():
|
||||||
vm = pyv.get_vm()
|
vm = pyv.get_vm()
|
||||||
|
|
||||||
if not vm:
|
if not vm:
|
||||||
# If UUID is set, getvm select UUID, show error message accordingly.
|
vm_id = (module.params.get('uuid') or module.params.get('name') or module.params.get('moid'))
|
||||||
module.fail_json(msg="Unable to manage snapshots for non-existing VM %s" % (module.params.get('uuid') or
|
module.fail_json(msg="Unable to manage snapshots for non-existing VM %s" % vm_id)
|
||||||
module.params.get('name')))
|
|
||||||
|
|
||||||
if not module.params['snapshot_name'] and module.params['state'] != 'remove_all':
|
if not module.params['snapshot_name'] and module.params['state'] != 'remove_all':
|
||||||
module.fail_json(msg="snapshot_name param is required when state is '%(state)s'" % module.params)
|
module.fail_json(msg="snapshot_name param is required when state is '%(state)s'" % module.params)
|
||||||
|
|
|
@ -22,7 +22,7 @@ description:
|
||||||
- This module can be used to gather facts about virtual machine's snapshots.
|
- This module can be used to gather facts about virtual machine's snapshots.
|
||||||
version_added: 2.6
|
version_added: 2.6
|
||||||
author:
|
author:
|
||||||
- Abhijeet Kasurde (@Akasurde) <akasurde@redhat.com>
|
- Abhijeet Kasurde (@Akasurde)
|
||||||
notes:
|
notes:
|
||||||
- Tested on vSphere 6.0 and 6.5
|
- Tested on vSphere 6.0 and 6.5
|
||||||
requirements:
|
requirements:
|
||||||
|
@ -32,12 +32,18 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the VM to work with.
|
- Name of the VM to work with.
|
||||||
- This is required if C(uuid) is not supplied.
|
- This is required if C(uuid) or C(moid) is not supplied.
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to manage if known, this is VMware's BIOS UUID by default.
|
- UUID of the instance to manage if known, this is VMware's BIOS UUID by default.
|
||||||
- This is required if C(name) parameter is not supplied.
|
- This is required if C(name) or C(moid) parameter is not supplied.
|
||||||
- The C(folder) is ignored, if C(uuid) is provided.
|
- The C(folder) is ignored, if C(uuid) is provided.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
|
@ -67,7 +73,7 @@ extends_documentation_fragment: vmware.documentation
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
EXAMPLES = '''
|
||||||
- name: Gather snapshot facts about the virtual machine in the given vCenter
|
- name: Gather snapshot facts about the virtual machine in the given vCenter
|
||||||
vmware_guest_snapshot_facts:
|
vmware_guest_snapshot_facts:
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
username: "{{ vcenter_username }}"
|
username: "{{ vcenter_username }}"
|
||||||
|
@ -76,6 +82,16 @@ EXAMPLES = '''
|
||||||
name: "{{ guest_name }}"
|
name: "{{ guest_name }}"
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: snapshot_facts
|
register: snapshot_facts
|
||||||
|
|
||||||
|
- name: Gather snapshot facts about the virtual machine using MoID
|
||||||
|
vmware_guest_snapshot_facts:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: "{{ datacenter_name }}"
|
||||||
|
moid: vm-42
|
||||||
|
delegate_to: localhost
|
||||||
|
register: snapshot_facts
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = """
|
RETURN = """
|
||||||
|
@ -114,7 +130,7 @@ class PyVmomiHelper(PyVmomi):
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def gather_guest_snapshot_facts(vm_obj=None):
|
def gather_guest_snapshot_facts(vm_obj=None):
|
||||||
"""
|
"""
|
||||||
Function to return snpashot related facts about given virtual machine
|
Return snapshot related facts about given virtual machine
|
||||||
Args:
|
Args:
|
||||||
vm_obj: Virtual Machine Managed object
|
vm_obj: Virtual Machine Managed object
|
||||||
|
|
||||||
|
@ -131,13 +147,19 @@ def main():
|
||||||
argument_spec.update(
|
argument_spec.update(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(required=True, type='str'),
|
datacenter=dict(required=True, type='str'),
|
||||||
)
|
)
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
module = AnsibleModule(
|
||||||
required_together=[['name', 'folder']],
|
argument_spec=argument_spec,
|
||||||
required_one_of=[['name', 'uuid']],
|
required_together=[
|
||||||
|
['name', 'folder']
|
||||||
|
],
|
||||||
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
],
|
||||||
supports_check_mode=True,
|
supports_check_mode=True,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -151,10 +173,10 @@ def main():
|
||||||
vm = pyv.get_vm()
|
vm = pyv.get_vm()
|
||||||
|
|
||||||
if not vm:
|
if not vm:
|
||||||
# If UUID is set, getvm select UUID, show error message accordingly.
|
# If UUID is set, get_vm select UUID, show error message accordingly.
|
||||||
|
vm_id = (module.params.get('uuid') or module.params.get('name') or module.params.get('moid'))
|
||||||
module.fail_json(msg="Unable to gather facts about snapshots for"
|
module.fail_json(msg="Unable to gather facts about snapshots for"
|
||||||
" non-existing VM ['%s']" % (module.params.get('uuid') or
|
" non-existing VM ['%s']" % vm_id)
|
||||||
module.params.get('name')))
|
|
||||||
|
|
||||||
results = dict(changed=False, guest_snapshots=pyv.gather_guest_snapshot_facts(vm_obj=vm))
|
results = dict(changed=False, guest_snapshots=pyv.gather_guest_snapshot_facts(vm_obj=vm))
|
||||||
module.exit_json(**results)
|
module.exit_json(**results)
|
||||||
|
|
|
@ -30,7 +30,7 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine to work with.
|
- Name of the virtual machine to work with.
|
||||||
- This is required if C(UUID) is not supplied.
|
- This is required if C(uuid) or C(moid) is not supplied.
|
||||||
name_match:
|
name_match:
|
||||||
description:
|
description:
|
||||||
- If multiple virtual machines matching the name, use the first or last found.
|
- If multiple virtual machines matching the name, use the first or last found.
|
||||||
|
@ -39,7 +39,13 @@ options:
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to manage if known, this is VMware's unique identifier.
|
- UUID of the instance to manage if known, this is VMware's unique identifier.
|
||||||
- This is required if C(name) is not supplied.
|
- This is required if C(name) or C(moid) is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
folder:
|
folder:
|
||||||
description:
|
description:
|
||||||
- Destination folder, absolute or relative path to find an existing guest.
|
- Destination folder, absolute or relative path to find an existing guest.
|
||||||
|
@ -55,7 +61,6 @@ options:
|
||||||
- ' folder: /folder1/datacenter1/vm'
|
- ' folder: /folder1/datacenter1/vm'
|
||||||
- ' folder: folder1/datacenter1/vm'
|
- ' folder: folder1/datacenter1/vm'
|
||||||
- ' folder: /folder1/datacenter1/vm/folder2'
|
- ' folder: /folder1/datacenter1/vm/folder2'
|
||||||
- ' folder: vm/folder2'
|
|
||||||
datacenter:
|
datacenter:
|
||||||
description:
|
description:
|
||||||
- Destination datacenter where the virtual machine exists.
|
- Destination datacenter where the virtual machine exists.
|
||||||
|
@ -66,7 +71,7 @@ author:
|
||||||
'''
|
'''
|
||||||
|
|
||||||
EXAMPLES = '''
|
EXAMPLES = '''
|
||||||
- name: Upgrade VMware Tools
|
- name: Upgrade VMware Tools using uuid
|
||||||
vmware_guest_tools_upgrade:
|
vmware_guest_tools_upgrade:
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
username: "{{ vcenter_username }}"
|
username: "{{ vcenter_username }}"
|
||||||
|
@ -74,6 +79,15 @@ EXAMPLES = '''
|
||||||
datacenter: "{{ datacenter_name }}"
|
datacenter: "{{ datacenter_name }}"
|
||||||
uuid: 421e4592-c069-924d-ce20-7e7533fab926
|
uuid: 421e4592-c069-924d-ce20-7e7533fab926
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
|
|
||||||
|
- name: Upgrade VMware Tools using MoID
|
||||||
|
vmware_guest_tools_upgrade:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: "{{ datacenter_name }}"
|
||||||
|
moid: vm-42
|
||||||
|
delegate_to: localhost
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = ''' # '''
|
RETURN = ''' # '''
|
||||||
|
@ -145,11 +159,16 @@ def main():
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(type='str', required=True),
|
datacenter=dict(type='str', required=True),
|
||||||
)
|
)
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
module = AnsibleModule(
|
||||||
required_one_of=[['name', 'uuid']])
|
argument_spec=argument_spec,
|
||||||
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
if module.params['folder']:
|
if module.params['folder']:
|
||||||
# FindByInventoryPath() does not require an absolute path
|
# FindByInventoryPath() does not require an absolute path
|
||||||
|
@ -173,7 +192,8 @@ def main():
|
||||||
except Exception as exc:
|
except Exception as exc:
|
||||||
module.fail_json(msg='Unknown error: %s' % to_native(exc))
|
module.fail_json(msg='Unknown error: %s' % to_native(exc))
|
||||||
else:
|
else:
|
||||||
module.fail_json(msg='Unable to find VM %s' % (module.params.get('uuid') or module.params.get('name')))
|
vm_id = module.params.get('uuid') or module.params.get('name') or module.params.get('moid')
|
||||||
|
module.fail_json(msg='Unable to find VM %s' % vm_id)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|
|
@ -31,7 +31,7 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the VM for which to wait until the tools become available.
|
- Name of the VM for which to wait until the tools become available.
|
||||||
- This is required if uuid is not supplied.
|
- This is required if C(uuid) or C(moid) is not supplied.
|
||||||
name_match:
|
name_match:
|
||||||
description:
|
description:
|
||||||
- If multiple VMs match the name, use the first or last found.
|
- If multiple VMs match the name, use the first or last found.
|
||||||
|
@ -55,7 +55,13 @@ options:
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the VM for which to wait until the tools become available, if known. This is VMware's unique identifier.
|
- UUID of the VM for which to wait until the tools become available, if known. This is VMware's unique identifier.
|
||||||
- This is required, if C(name) is not supplied.
|
- This is required, if C(name) or C(moid) is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
|
@ -89,6 +95,16 @@ EXAMPLES = '''
|
||||||
register: facts
|
register: facts
|
||||||
|
|
||||||
|
|
||||||
|
- name: Wait for VMware tools to become available by MoID
|
||||||
|
vmware_guest_tools_wait:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
validate_certs: no
|
||||||
|
moid: vm-42
|
||||||
|
delegate_to: localhost
|
||||||
|
register: facts
|
||||||
|
|
||||||
- name: Wait for VMware tools to become available by name
|
- name: Wait for VMware tools to become available by name
|
||||||
vmware_guest_tools_wait:
|
vmware_guest_tools_wait:
|
||||||
hostname: "{{ vcenter_hostname }}"
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
@ -152,11 +168,15 @@ def main():
|
||||||
name_match=dict(type='str', default='first', choices=['first', 'last']),
|
name_match=dict(type='str', default='first', choices=['first', 'last']),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
)
|
)
|
||||||
module = AnsibleModule(
|
module = AnsibleModule(
|
||||||
argument_spec=argument_spec,
|
argument_spec=argument_spec,
|
||||||
required_one_of=[['name', 'uuid']])
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
if module.params['folder']:
|
if module.params['folder']:
|
||||||
# FindByInventoryPath() does not require an absolute path
|
# FindByInventoryPath() does not require an absolute path
|
||||||
|
@ -168,9 +188,8 @@ def main():
|
||||||
vm = pyv.get_vm()
|
vm = pyv.get_vm()
|
||||||
|
|
||||||
if not vm:
|
if not vm:
|
||||||
module.fail_json(msg="Unable to wait for VMware tools for "
|
vm_id = module.params.get('name') or module.params.get('uuid') or module.params.get('moid')
|
||||||
"non-existing VM '%s'." % (module.params.get('name') or
|
module.fail_json(msg="Unable to wait for VMware tools for non-existing VM '%s'." % vm_id)
|
||||||
module.params.get('uuid')))
|
|
||||||
|
|
||||||
result = dict(changed=False)
|
result = dict(changed=False)
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -32,11 +32,17 @@ options:
|
||||||
name:
|
name:
|
||||||
description:
|
description:
|
||||||
- Name of the virtual machine.
|
- Name of the virtual machine.
|
||||||
- This is a required parameter, if parameter C(uuid) is not supplied.
|
- This is a required parameter, if parameter C(uuid) or C(moid) is not supplied.
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
- UUID of the instance to gather facts if known, this is VMware's unique identifier.
|
||||||
- This is a required parameter, if parameter C(name) is not supplied.
|
- This is a required parameter, if parameter C(name) or C(moid) is not supplied.
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
folder:
|
folder:
|
||||||
description:
|
description:
|
||||||
- Destination folder, absolute or relative path to find an existing guest.
|
- Destination folder, absolute or relative path to find an existing guest.
|
||||||
|
@ -110,6 +116,24 @@ EXAMPLES = '''
|
||||||
memory_3D_mb: 512
|
memory_3D_mb: 512
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: video_facts
|
register: video_facts
|
||||||
|
|
||||||
|
- name: Change video card settings of virtual machine using MoID
|
||||||
|
vmware_guest_video:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: "{{ datacenter_name }}"
|
||||||
|
validate_certs: no
|
||||||
|
moid: vm-42
|
||||||
|
gather_video_facts: false
|
||||||
|
use_auto_detect: false
|
||||||
|
display_number: 2
|
||||||
|
video_memory_mb: 8.0
|
||||||
|
enable_3D: true
|
||||||
|
renderer_3D: automatic
|
||||||
|
memory_3D_mb: 512
|
||||||
|
delegate_to: localhost
|
||||||
|
register: video_facts
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = """
|
RETURN = """
|
||||||
|
@ -294,6 +318,7 @@ def main():
|
||||||
argument_spec.update(
|
argument_spec.update(
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
datacenter=dict(type='str', default='ha-datacenter'),
|
datacenter=dict(type='str', default='ha-datacenter'),
|
||||||
gather_video_facts=dict(type='bool', default=False),
|
gather_video_facts=dict(type='bool', default=False),
|
||||||
|
@ -304,12 +329,19 @@ def main():
|
||||||
renderer_3D=dict(type='str', choices=['automatic', 'software', 'hardware']),
|
renderer_3D=dict(type='str', choices=['automatic', 'software', 'hardware']),
|
||||||
memory_3D_mb=dict(type='int'),
|
memory_3D_mb=dict(type='int'),
|
||||||
)
|
)
|
||||||
module = AnsibleModule(argument_spec=argument_spec,
|
|
||||||
required_one_of=[['name', 'uuid']])
|
module = AnsibleModule(
|
||||||
|
argument_spec=argument_spec,
|
||||||
|
required_one_of=[
|
||||||
|
['name', 'uuid', 'moid']
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
pyv = PyVmomiHelper(module)
|
pyv = PyVmomiHelper(module)
|
||||||
vm = pyv.get_vm()
|
vm = pyv.get_vm()
|
||||||
if not vm:
|
if not vm:
|
||||||
module.fail_json(msg='Unable to find the specified virtual machine : %s' % (module.params.get('uuid') or module.params.get('name')))
|
vm_id = module.params.get('uuid') or module.params.get('name') or module.params.get('moid')
|
||||||
|
module.fail_json(msg='Unable to find the specified virtual machine : %s' % vm_id)
|
||||||
|
|
||||||
vm_facts = pyv.gather_facts(vm)
|
vm_facts = pyv.gather_facts(vm)
|
||||||
vm_power_state = vm_facts['hw_power_status'].lower()
|
vm_power_state = vm_facts['hw_power_status'].lower()
|
||||||
|
|
|
@ -51,8 +51,14 @@ options:
|
||||||
uuid:
|
uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the instance to manage if known, this is VMware's unique identifier.
|
- UUID of the instance to manage if known, this is VMware's unique identifier.
|
||||||
- This is required, if C(name) is not supplied.
|
- This is required, if C(name) or C(moid) is not supplied.
|
||||||
required: false
|
required: false
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(name) or C(uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
folder:
|
folder:
|
||||||
description:
|
description:
|
||||||
- Destination folder, absolute or relative path to find an existing guest.
|
- Destination folder, absolute or relative path to find an existing guest.
|
||||||
|
@ -106,6 +112,18 @@ EXAMPLES = '''
|
||||||
state: absent
|
state: absent
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: vnc_result
|
register: vnc_result
|
||||||
|
|
||||||
|
- name: Disable VNC remote display on the VM using MoID
|
||||||
|
vmware_guest_vnc:
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
validate_certs: no
|
||||||
|
datacenter: "{{ datacenter_name }}"
|
||||||
|
moid: vm-42
|
||||||
|
state: absent
|
||||||
|
delegate_to: localhost
|
||||||
|
register: vnc_result
|
||||||
'''
|
'''
|
||||||
|
|
||||||
RETURN = '''
|
RETURN = '''
|
||||||
|
@ -195,6 +213,7 @@ def main():
|
||||||
name=dict(type='str'),
|
name=dict(type='str'),
|
||||||
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
name_match=dict(type='str', choices=['first', 'last'], default='first'),
|
||||||
uuid=dict(type='str'),
|
uuid=dict(type='str'),
|
||||||
|
moid=dict(type='str'),
|
||||||
folder=dict(type='str'),
|
folder=dict(type='str'),
|
||||||
vnc_ip=dict(type='str', default='0.0.0.0'),
|
vnc_ip=dict(type='str', default='0.0.0.0'),
|
||||||
vnc_port=dict(type='int', default=0),
|
vnc_port=dict(type='int', default=0),
|
||||||
|
@ -206,10 +225,10 @@ def main():
|
||||||
argument_spec=argument_spec,
|
argument_spec=argument_spec,
|
||||||
supports_check_mode=True,
|
supports_check_mode=True,
|
||||||
required_one_of=[
|
required_one_of=[
|
||||||
['name', 'uuid']
|
['name', 'uuid', 'moid']
|
||||||
],
|
],
|
||||||
mutually_exclusive=[
|
mutually_exclusive=[
|
||||||
['name', 'uuid']
|
['name', 'uuid', 'moid']
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -227,8 +246,8 @@ def main():
|
||||||
module.params['vnc_password']
|
module.params['vnc_password']
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
module.fail_json(msg="Unable to set VNC config for non-existing virtual machine : '%s'" % (module.params.get('uuid') or
|
vm_id = module.params.get('uuid') or module.params.get('name') or module.params.get('moid')
|
||||||
module.params.get('name')))
|
module.fail_json(msg="Unable to set VNC config for non-existing virtual machine : '%s'" % vm_id)
|
||||||
|
|
||||||
if result.get('failed') is True:
|
if result.get('failed') is True:
|
||||||
module.fail_json(**result)
|
module.fail_json(**result)
|
||||||
|
|
|
@ -44,9 +44,15 @@ options:
|
||||||
vm_uuid:
|
vm_uuid:
|
||||||
description:
|
description:
|
||||||
- UUID of the virtual machine to perform a vMotion operation on.
|
- UUID of the virtual machine to perform a vMotion operation on.
|
||||||
- This is a required parameter, if C(vm_name) is not set.
|
- This is a required parameter, if C(vm_name) or C(moid) is not set.
|
||||||
aliases: ['uuid']
|
aliases: ['uuid']
|
||||||
version_added: 2.7
|
version_added: 2.7
|
||||||
|
moid:
|
||||||
|
description:
|
||||||
|
- Managed Object ID of the instance to manage if known, this is a unique identifier only within a single vCenter instance.
|
||||||
|
- This is required if C(vm_name) or C(vm_uuid) is not supplied.
|
||||||
|
version_added: '2.9'
|
||||||
|
type: str
|
||||||
use_instance_uuid:
|
use_instance_uuid:
|
||||||
description:
|
description:
|
||||||
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
- Whether to use the VMware instance UUID rather than the BIOS UUID.
|
||||||
|
@ -77,6 +83,16 @@ EXAMPLES = '''
|
||||||
destination_host: 'destination_host_as_per_vcenter'
|
destination_host: 'destination_host_as_per_vcenter'
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
|
|
||||||
|
- name: Perform vMotion of virtual machine
|
||||||
|
vmware_vmotion:
|
||||||
|
hostname: '{{ vcenter_hostname }}'
|
||||||
|
username: '{{ vcenter_username }}'
|
||||||
|
password: '{{ vcenter_password }}'
|
||||||
|
validate_certs: no
|
||||||
|
moid: vm-42
|
||||||
|
destination_host: 'destination_host_as_per_vcenter'
|
||||||
|
delegate_to: localhost
|
||||||
|
|
||||||
- name: Perform storage vMotion of of virtual machine
|
- name: Perform storage vMotion of of virtual machine
|
||||||
vmware_vmotion:
|
vmware_vmotion:
|
||||||
hostname: '{{ vcenter_hostname }}'
|
hostname: '{{ vcenter_hostname }}'
|
||||||
|
@ -108,7 +124,7 @@ running_host:
|
||||||
'''
|
'''
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from pyVmomi import vim
|
from pyVmomi import vim, VmomiSupport
|
||||||
except ImportError:
|
except ImportError:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
@ -126,12 +142,13 @@ class VmotionManager(PyVmomi):
|
||||||
self.vm_uuid = self.params.get('vm_uuid', None)
|
self.vm_uuid = self.params.get('vm_uuid', None)
|
||||||
self.use_instance_uuid = self.params.get('use_instance_uuid', False)
|
self.use_instance_uuid = self.params.get('use_instance_uuid', False)
|
||||||
self.vm_name = self.params.get('vm_name', None)
|
self.vm_name = self.params.get('vm_name', None)
|
||||||
|
self.moid = self.params.get('moid') or None
|
||||||
result = dict()
|
result = dict()
|
||||||
|
|
||||||
self.get_vm()
|
self.get_vm()
|
||||||
if self.vm is None:
|
if self.vm is None:
|
||||||
self.module.fail_json(msg="Failed to find the virtual"
|
vm_id = self.vm_uuid or self.vm_name or self.moid
|
||||||
" machine with %s" % (self.vm_uuid or self.vm_name))
|
self.module.fail_json(msg="Failed to find the virtual machine with %s" % vm_id)
|
||||||
|
|
||||||
# Get Destination Host System if specified by user
|
# Get Destination Host System if specified by user
|
||||||
dest_host_name = self.params.get('destination_host', None)
|
dest_host_name = self.params.get('destination_host', None)
|
||||||
|
@ -147,7 +164,7 @@ class VmotionManager(PyVmomi):
|
||||||
self.datastore_object = find_datastore_by_name(content=self.content,
|
self.datastore_object = find_datastore_by_name(content=self.content,
|
||||||
datastore_name=dest_datastore)
|
datastore_name=dest_datastore)
|
||||||
|
|
||||||
# Atleast one of datastore, host system is required to migrate
|
# At-least one of datastore, host system is required to migrate
|
||||||
if self.datastore_object is None and self.host_object is None:
|
if self.datastore_object is None and self.host_object is None:
|
||||||
self.module.fail_json(msg="Unable to find destination datastore"
|
self.module.fail_json(msg="Unable to find destination datastore"
|
||||||
" and destination host system.")
|
" and destination host system.")
|
||||||
|
@ -261,13 +278,11 @@ class VmotionManager(PyVmomi):
|
||||||
|
|
||||||
"""
|
"""
|
||||||
vms = []
|
vms = []
|
||||||
if self.vm_uuid and not self.use_instance_uuid:
|
if self.vm_uuid:
|
||||||
|
if not self.use_instance_uuid:
|
||||||
vm_obj = find_vm_by_id(self.content, vm_id=self.params['vm_uuid'], vm_id_type="uuid")
|
vm_obj = find_vm_by_id(self.content, vm_id=self.params['vm_uuid'], vm_id_type="uuid")
|
||||||
vms = [vm_obj]
|
elif self.use_instance_uuid:
|
||||||
elif self.vm_uuid and self.use_instance_uuid:
|
vm_obj = find_vm_by_id(self.content, vm_id=self.params['vm_uuid'], vm_id_type="instance_uuid")
|
||||||
vm_obj = find_vm_by_id(self.content,
|
|
||||||
vm_id=self.params['vm_uuid'],
|
|
||||||
vm_id_type="instance_uuid")
|
|
||||||
vms = [vm_obj]
|
vms = [vm_obj]
|
||||||
elif self.vm_name:
|
elif self.vm_name:
|
||||||
objects = self.get_managed_objects_properties(vim_type=vim.VirtualMachine, properties=['name'])
|
objects = self.get_managed_objects_properties(vim_type=vim.VirtualMachine, properties=['name'])
|
||||||
|
@ -277,6 +292,10 @@ class VmotionManager(PyVmomi):
|
||||||
if temp_vm_object.obj.name == self.vm_name:
|
if temp_vm_object.obj.name == self.vm_name:
|
||||||
vms.append(temp_vm_object.obj)
|
vms.append(temp_vm_object.obj)
|
||||||
break
|
break
|
||||||
|
elif self.moid:
|
||||||
|
vm_obj = VmomiSupport.templateOf('VirtualMachine')(self.moid, self.si._stub)
|
||||||
|
if vm_obj:
|
||||||
|
vms.append(vm_obj)
|
||||||
|
|
||||||
if len(vms) > 1:
|
if len(vms) > 1:
|
||||||
self.module.fail_json(msg="Multiple virtual machines with same name %s found."
|
self.module.fail_json(msg="Multiple virtual machines with same name %s found."
|
||||||
|
@ -291,6 +310,7 @@ def main():
|
||||||
dict(
|
dict(
|
||||||
vm_name=dict(aliases=['vm']),
|
vm_name=dict(aliases=['vm']),
|
||||||
vm_uuid=dict(aliases=['uuid']),
|
vm_uuid=dict(aliases=['uuid']),
|
||||||
|
moid=dict(type='str'),
|
||||||
use_instance_uuid=dict(type='bool', default=False),
|
use_instance_uuid=dict(type='bool', default=False),
|
||||||
destination_host=dict(aliases=['destination']),
|
destination_host=dict(aliases=['destination']),
|
||||||
destination_datastore=dict(aliases=['datastore'])
|
destination_datastore=dict(aliases=['datastore'])
|
||||||
|
@ -302,10 +322,10 @@ def main():
|
||||||
supports_check_mode=True,
|
supports_check_mode=True,
|
||||||
required_one_of=[
|
required_one_of=[
|
||||||
['destination_host', 'destination_datastore'],
|
['destination_host', 'destination_datastore'],
|
||||||
['vm_uuid', 'vm_name'],
|
['vm_uuid', 'vm_name', 'moid'],
|
||||||
],
|
],
|
||||||
mutually_exclusive=[
|
mutually_exclusive=[
|
||||||
['vm_uuid', 'vm_name'],
|
['vm_uuid', 'vm_name', 'moid'],
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,8 @@
|
||||||
|
|
||||||
- set_fact: vm1_instance_uuid="{{ guest_facts_0001['instance']['instance_uuid'] }}"
|
- set_fact: vm1_instance_uuid="{{ guest_facts_0001['instance']['instance_uuid'] }}"
|
||||||
|
|
||||||
|
- set_fact: vm1_moid="{{ guest_facts_0001['instance']['moid'] }}"
|
||||||
|
|
||||||
- debug:
|
- debug:
|
||||||
var: vm1_uuid
|
var: vm1_uuid
|
||||||
|
|
||||||
|
@ -153,7 +155,7 @@
|
||||||
- "guest_facts_0004['instance']['snapshots'][0]['name'] == 'snap1'"
|
- "guest_facts_0004['instance']['snapshots'][0]['name'] == 'snap1'"
|
||||||
- "guest_facts_0004['instance']['snapshots'][1]['name'] == 'snap2'"
|
- "guest_facts_0004['instance']['snapshots'][1]['name'] == 'snap2'"
|
||||||
- "guest_facts_0004['instance']['current_snapshot']['name'] == 'snap2'"
|
- "guest_facts_0004['instance']['current_snapshot']['name'] == 'snap2'"
|
||||||
- "guest_facts_0002['instance']['hw_folder'] is defined"
|
- "guest_facts_0004['instance']['hw_folder'] is defined"
|
||||||
|
|
||||||
# Testcase 0005: Get details about virtual machines using UUID
|
# Testcase 0005: Get details about virtual machines using UUID
|
||||||
- name: get list of facts about virtual machines using instance UUID
|
- name: get list of facts about virtual machines using instance UUID
|
||||||
|
@ -186,5 +188,39 @@
|
||||||
- "guest_facts_0005['instance']['guest_consolidation_needed'] is defined"
|
- "guest_facts_0005['instance']['guest_consolidation_needed'] is defined"
|
||||||
- "guest_facts_0005['instance']['instance_uuid'] is defined"
|
- "guest_facts_0005['instance']['instance_uuid'] is defined"
|
||||||
- "guest_facts_0005['instance']['instance_uuid'] == vm1_instance_uuid"
|
- "guest_facts_0005['instance']['instance_uuid'] == vm1_instance_uuid"
|
||||||
- "guest_facts_0001['instance']['moid'] is defined"
|
- "guest_facts_0005['instance']['moid'] is defined"
|
||||||
- "guest_facts_0001['instance']['vimref'] is defined"
|
- "guest_facts_0005['instance']['vimref'] is defined"
|
||||||
|
|
||||||
|
# Testcase 0006: Get details about virtual machines using MoID
|
||||||
|
- name: get list of facts about virtual machines using instance MoID
|
||||||
|
vmware_guest_facts:
|
||||||
|
validate_certs: False
|
||||||
|
hostname: "{{ vcenter_hostname }}"
|
||||||
|
username: "{{ vcenter_username }}"
|
||||||
|
password: "{{ vcenter_password }}"
|
||||||
|
datacenter: "{{ dc1 }}"
|
||||||
|
moid: "{{ vm1_moid }}"
|
||||||
|
use_instance_uuid: True
|
||||||
|
register: guest_facts_0006
|
||||||
|
|
||||||
|
- debug:
|
||||||
|
msg: "{{ guest_facts_0006 }}"
|
||||||
|
|
||||||
|
- assert:
|
||||||
|
that:
|
||||||
|
- "guest_facts_0006['instance']['hw_name'] == virtual_machines[0].name"
|
||||||
|
- "guest_facts_0006['instance']['hw_product_uuid'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['hw_product_uuid'] == vm1_uuid"
|
||||||
|
- "guest_facts_0006['instance']['hw_cores_per_socket'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['hw_datastores'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['hw_esxi_host'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['hw_files'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['hw_guest_ha_state'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['hw_is_template'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['hw_folder'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['guest_question'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['guest_consolidation_needed'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['instance_uuid'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['instance_uuid'] == vm1_instance_uuid"
|
||||||
|
- "guest_facts_0006['instance']['moid'] is defined"
|
||||||
|
- "guest_facts_0006['instance']['vimref'] is defined"
|
||||||
|
|
Loading…
Reference in a new issue