<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Facing performance issue using python SDK in case of listing vm w.r.t perl SDK. in VMware{code} Discussions</title>
    <link>https://communities.vmware.com/t5/VMware-code-Discussions/Facing-performance-issue-using-python-SDK-in-case-of-listing-vm/m-p/2956799#M2241</link>
    <description>&lt;P&gt;Below python SDK script taking about ~4 mili sec (which lists all required attributes).&amp;nbsp;&lt;/P&gt;&lt;P&gt;real 0m4.137s&lt;BR /&gt;user 0m3.021s&lt;BR /&gt;sys 0m0.074s&lt;/P&gt;&lt;P&gt;similar script on perl VMware SDK taking 1 sec. Can someone help me improve the execution to nearly 1 mili sec similar to perl script.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;[$$]# cat getallvms2.py
#!/usr/bin/env python
# VMware vSphere Python SDK
# Copyright (c) 2008-2021 VMware, Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""
Python program for listing the VMs on an ESX / vCenter host
"""

import re
from pyVmomi import vmodl, vim
from tools import cli, service_instance


def print_vm_info(virtual_machine):
    """
    Print information for a particular virtual machine or recurse into a
    folder with depth protection
    """
    vm_config = {}
    summary = virtual_machine.summary
    host_ref = virtual_machine.runtime.host
    if not host_ref:
        print("Can't find host ref")
    accessibility = summary.runtime.connectionState
    extra_config = virtual_machine.config.extraConfig
    vname = summary.config.name

    uuid = summary.config.uuid
    if uuid:
        vm_config.update({ "uuid": uuid })


    iuuid = summary.config.instanceUuid
    if iuuid:
        vm_config.update({ "instanceUuid": iuuid })

    cversion  = virtual_machine.config.version
    if cversion is not None:
        vm_config.update({ "version": cversion })

    change_tracking_enable = virtual_machine.config.changeTrackingEnabled
    if change_tracking_enable is not None:
        vm_config.update({ "changeTrackingEnabled": "1" if change_tracking_enable else "0" })

    change_tracking_support = virtual_machine.capability.changeTrackingSupported
    if change_tracking_support is not None: 
        vm_config.update({ "changeTrackingSupported": "1" if change_tracking_support else "0"})

    ctemplate = summary.config.template
    if ctemplate:
        vm_config.update({ "template": "1" if ctemplate else "0" })

    gfullname = summary.config.guestFullName
    if gfullname:
        vm_config.update({"guestFullName": gfullname})

    devs = virtual_machine.config.hardware.device
    extra_config = virtual_machine.config.extraConfig
    if extra_config: 
        config_name = virtual_machine.config.name
        for entry in extra_config:
            if entry.key == 'unitrends.vm.type':
                if entry.value in ['instant_recovery_audit', 'replica_vm', 'virtual_appliance']:
                    debug_message("Skipping VM  %s since .it was created for VMware IR." % config_name)
                    exclude_vm_from_inventory = 1
                    break

    print("Name       : ", summary.config.name)
    print("Template   : ", summary.config.template)
    print("Path       : ", summary.config.vmPathName)
    print("Guest      : ", summary.config.guestFullName)
    print("Instance UUID : ", summary.config.instanceUuid)
    print("Bios UUID     : ", summary.config.uuid)
    annotation = summary.config.annotation
    if annotation:
        print("Annotation : ", annotation)
    print("State      : ", summary.runtime.powerState)
    if summary.guest is not None:
        ip_address = summary.guest.ipAddress
        tools_version = summary.guest.toolsStatus
        if tools_version is not None:
            print("VMware-tools: ", tools_version)
        else:
            print("Vmware-tools: None")
        if ip_address:
            print("IP         : ", ip_address)
        else:
            print("IP         : None")
    if summary.runtime.question is not None:
        print("Question  : ", summary.runtime.question.text)
    print("")


def main():
    """
    Simple command-line program for listing the virtual machines on a system.
    """

    parser = cli.Parser()
    parser.add_custom_argument('-f', '--find', required=False,
                               action='store', help='String to match VM names')
    args = parser.get_args()
    si = service_instance.connect(args)

    try:
        content = si.RetrieveContent()

        container = content.rootFolder  # starting point to look into
        view_type = [vim.VirtualMachine]  # object types to look for
        recursive = True  # whether we should look into it recursively
        container_view = content.viewManager.CreateContainerView(
            container, view_type, recursive)

        children = container_view.view
        if args.find is not None:
            pat = re.compile(args.find, re.IGNORECASE)
        for child in children:
            if args.find is None:
                print_vm_info(child)
            else:
                if pat.search(child.summary.config.name) is not None:
                    print_vm_info(child)

    except vmodl.MethodFault as error:
        print("Caught vmodl fault : " + error.msg)
        return -1

    return 0


# Start program
if __name__ == "__main__":
    main()&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 27 Feb 2023 11:05:52 GMT</pubDate>
    <dc:creator>dbiswas91</dc:creator>
    <dc:date>2023-02-27T11:05:52Z</dc:date>
    <item>
      <title>Facing performance issue using python SDK in case of listing vm w.r.t perl SDK.</title>
      <link>https://communities.vmware.com/t5/VMware-code-Discussions/Facing-performance-issue-using-python-SDK-in-case-of-listing-vm/m-p/2956799#M2241</link>
      <description>&lt;P&gt;Below python SDK script taking about ~4 mili sec (which lists all required attributes).&amp;nbsp;&lt;/P&gt;&lt;P&gt;real 0m4.137s&lt;BR /&gt;user 0m3.021s&lt;BR /&gt;sys 0m0.074s&lt;/P&gt;&lt;P&gt;similar script on perl VMware SDK taking 1 sec. Can someone help me improve the execution to nearly 1 mili sec similar to perl script.&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;LI-CODE lang="markup"&gt;[$$]# cat getallvms2.py
#!/usr/bin/env python
# VMware vSphere Python SDK
# Copyright (c) 2008-2021 VMware, Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""
Python program for listing the VMs on an ESX / vCenter host
"""

import re
from pyVmomi import vmodl, vim
from tools import cli, service_instance


def print_vm_info(virtual_machine):
    """
    Print information for a particular virtual machine or recurse into a
    folder with depth protection
    """
    vm_config = {}
    summary = virtual_machine.summary
    host_ref = virtual_machine.runtime.host
    if not host_ref:
        print("Can't find host ref")
    accessibility = summary.runtime.connectionState
    extra_config = virtual_machine.config.extraConfig
    vname = summary.config.name

    uuid = summary.config.uuid
    if uuid:
        vm_config.update({ "uuid": uuid })


    iuuid = summary.config.instanceUuid
    if iuuid:
        vm_config.update({ "instanceUuid": iuuid })

    cversion  = virtual_machine.config.version
    if cversion is not None:
        vm_config.update({ "version": cversion })

    change_tracking_enable = virtual_machine.config.changeTrackingEnabled
    if change_tracking_enable is not None:
        vm_config.update({ "changeTrackingEnabled": "1" if change_tracking_enable else "0" })

    change_tracking_support = virtual_machine.capability.changeTrackingSupported
    if change_tracking_support is not None: 
        vm_config.update({ "changeTrackingSupported": "1" if change_tracking_support else "0"})

    ctemplate = summary.config.template
    if ctemplate:
        vm_config.update({ "template": "1" if ctemplate else "0" })

    gfullname = summary.config.guestFullName
    if gfullname:
        vm_config.update({"guestFullName": gfullname})

    devs = virtual_machine.config.hardware.device
    extra_config = virtual_machine.config.extraConfig
    if extra_config: 
        config_name = virtual_machine.config.name
        for entry in extra_config:
            if entry.key == 'unitrends.vm.type':
                if entry.value in ['instant_recovery_audit', 'replica_vm', 'virtual_appliance']:
                    debug_message("Skipping VM  %s since .it was created for VMware IR." % config_name)
                    exclude_vm_from_inventory = 1
                    break

    print("Name       : ", summary.config.name)
    print("Template   : ", summary.config.template)
    print("Path       : ", summary.config.vmPathName)
    print("Guest      : ", summary.config.guestFullName)
    print("Instance UUID : ", summary.config.instanceUuid)
    print("Bios UUID     : ", summary.config.uuid)
    annotation = summary.config.annotation
    if annotation:
        print("Annotation : ", annotation)
    print("State      : ", summary.runtime.powerState)
    if summary.guest is not None:
        ip_address = summary.guest.ipAddress
        tools_version = summary.guest.toolsStatus
        if tools_version is not None:
            print("VMware-tools: ", tools_version)
        else:
            print("Vmware-tools: None")
        if ip_address:
            print("IP         : ", ip_address)
        else:
            print("IP         : None")
    if summary.runtime.question is not None:
        print("Question  : ", summary.runtime.question.text)
    print("")


def main():
    """
    Simple command-line program for listing the virtual machines on a system.
    """

    parser = cli.Parser()
    parser.add_custom_argument('-f', '--find', required=False,
                               action='store', help='String to match VM names')
    args = parser.get_args()
    si = service_instance.connect(args)

    try:
        content = si.RetrieveContent()

        container = content.rootFolder  # starting point to look into
        view_type = [vim.VirtualMachine]  # object types to look for
        recursive = True  # whether we should look into it recursively
        container_view = content.viewManager.CreateContainerView(
            container, view_type, recursive)

        children = container_view.view
        if args.find is not None:
            pat = re.compile(args.find, re.IGNORECASE)
        for child in children:
            if args.find is None:
                print_vm_info(child)
            else:
                if pat.search(child.summary.config.name) is not None:
                    print_vm_info(child)

    except vmodl.MethodFault as error:
        print("Caught vmodl fault : " + error.msg)
        return -1

    return 0


# Start program
if __name__ == "__main__":
    main()&lt;/LI-CODE&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 27 Feb 2023 11:05:52 GMT</pubDate>
      <guid>https://communities.vmware.com/t5/VMware-code-Discussions/Facing-performance-issue-using-python-SDK-in-case-of-listing-vm/m-p/2956799#M2241</guid>
      <dc:creator>dbiswas91</dc:creator>
      <dc:date>2023-02-27T11:05:52Z</dc:date>
    </item>
  </channel>
</rss>

