From 4cf0f34a867444d470df6470196e7046151b7f09 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Thu, 20 Oct 2022 04:40:38 -0700 Subject: [PATCH 1/4] adds vmware_vm.get_mks_ticket #291 --- src/saltext/vmware/modules/vm.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/src/saltext/vmware/modules/vm.py b/src/saltext/vmware/modules/vm.py index 9d2426e6..02f82e34 100644 --- a/src/saltext/vmware/modules/vm.py +++ b/src/saltext/vmware/modules/vm.py @@ -648,3 +648,34 @@ def relocate( if ret == "success": return {"virtual_machine": "moved"} return {"virtual_machine": "failed to move"} + +def get_mks_ticket(vm_name, ticket_type, service_instance=None, profile=None): + """ + Get ticket of virtual machine of passed object type. + + vm_name + The name of the virtual machine to relocate. + + ticket_type + Type of ticket. + + service_instance + (optional) The Service Instance from which to obtain managed object references. + + profile + Profile to use (optional) + + CLI Example: + + .. code-block:: bash + + salt '*' vmware_vm.get_mks_ticket vm_name=vm01 ticket_type=webmks + """ + if service_instance is None: + service_instance = connect.get_service_instance(config=__opts__, profile=profile) + + log.info(f"Acquiring ticket {ticket_type} for {vm_name}") + vm_ref = utils_common.get_mor_by_property(service_instance, vim.VirtualMachine, vm_name) + ticket = vm_ref.AcquireTicket(ticket_type) + + return {"host": ticket.host, "ticket": ticket.ticket} From 3044490b2328adaa645b103bf98dad5a179ec210 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Thu, 20 Oct 2022 04:45:31 -0700 Subject: [PATCH 2/4] fix json return --- src/saltext/vmware/modules/vm.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/saltext/vmware/modules/vm.py b/src/saltext/vmware/modules/vm.py index 02f82e34..7b88398b 100644 --- a/src/saltext/vmware/modules/vm.py +++ b/src/saltext/vmware/modules/vm.py @@ -1,4 +1,5 @@ # SPDX-License-Identifier: Apache-2.0 +import json import logging import salt.exceptions @@ -11,7 +12,7 @@ log = logging.getLogger(__name__) try: - from pyVmomi import vim + from pyVmomi import vim, VmomiSupport HAS_PYVMOMI = True except ImportError: @@ -678,4 +679,4 @@ def get_mks_ticket(vm_name, ticket_type, service_instance=None, profile=None): vm_ref = utils_common.get_mor_by_property(service_instance, vim.VirtualMachine, vm_name) ticket = vm_ref.AcquireTicket(ticket_type) - return {"host": ticket.host, "ticket": ticket.ticket} + return json.loads(json.dumps(ticket, cls=VmomiSupport.VmomiJSONEncoder)) From 84c32b92d4d0e311bb5b085093d9a96860d41de3 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Thu, 20 Oct 2022 06:17:06 -0700 Subject: [PATCH 3/4] removed wrong commit --- src/saltext/vmware/modules/vm.py | 31 ------------------------------- 1 file changed, 31 deletions(-) diff --git a/src/saltext/vmware/modules/vm.py b/src/saltext/vmware/modules/vm.py index 7b88398b..be7957db 100644 --- a/src/saltext/vmware/modules/vm.py +++ b/src/saltext/vmware/modules/vm.py @@ -649,34 +649,3 @@ def relocate( if ret == "success": return {"virtual_machine": "moved"} return {"virtual_machine": "failed to move"} - -def get_mks_ticket(vm_name, ticket_type, service_instance=None, profile=None): - """ - Get ticket of virtual machine of passed object type. - - vm_name - The name of the virtual machine to relocate. - - ticket_type - Type of ticket. - - service_instance - (optional) The Service Instance from which to obtain managed object references. - - profile - Profile to use (optional) - - CLI Example: - - .. code-block:: bash - - salt '*' vmware_vm.get_mks_ticket vm_name=vm01 ticket_type=webmks - """ - if service_instance is None: - service_instance = connect.get_service_instance(config=__opts__, profile=profile) - - log.info(f"Acquiring ticket {ticket_type} for {vm_name}") - vm_ref = utils_common.get_mor_by_property(service_instance, vim.VirtualMachine, vm_name) - ticket = vm_ref.AcquireTicket(ticket_type) - - return json.loads(json.dumps(ticket, cls=VmomiSupport.VmomiJSONEncoder)) From 4866ca9210c71a00934a6414d79f33f81d897278 Mon Sep 17 00:00:00 2001 From: Abhimanyu Saharan Date: Thu, 20 Oct 2022 06:22:32 -0700 Subject: [PATCH 4/4] adds get method for vm with optional properties #284 --- src/saltext/vmware/modules/vm.py | 54 ++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) diff --git a/src/saltext/vmware/modules/vm.py b/src/saltext/vmware/modules/vm.py index be7957db..f555bbb0 100644 --- a/src/saltext/vmware/modules/vm.py +++ b/src/saltext/vmware/modules/vm.py @@ -48,6 +48,60 @@ def list_(service_instance=None, profile=None): return utils_vm.list_vms(service_instance) +def get( + name, + service_instance=None, + datacenter_name=None, + vm_properties=None, + parent_ref=None, + traversal_spec=None, + profile=None, +): + """ + Get virtual machine properties based on the traversal specs and properties list, + returns Virtual Machine object with properties. + + service_instance + Service instance object to access vCenter + + name + Name of the virtual machine. + + datacenter + Datacenter name + + vm_properties + List of vm properties. + + traversal_spec + Traversal Spec object(s) for searching. + + parent_ref + Container Reference object for searching under a given object. + + CLI Example: + + .. code-block:: bash + + salt '*' vmware_vm.get vm-01 + """ + if service_instance is None: + service_instance = connect.get_service_instance(config=__opts__, profile=profile) + + virtual_machine = utils_vm.get_vm_by_property( + service_instance, + name, + datacenter=datacenter_name, + vm_properties=vm_properties, + traversal_spec=traversal_spec, + parent_ref=parent_ref, + ) + + virtual_machine = json.loads(json.dumps(virtual_machine, cls=VmomiSupport.VmomiJSONEncoder)) + + return virtual_machine + + def list_templates(service_instance=None, profile=None): """ Returns virtual machines tempates.