Trying to invoke python3.4 class methods in a loop.
But getting this "TabError: inconsistent use of tabs and spaces in indentation
"
I viewed the code in both "vim" and "gedit/sublime" and they show no obvious error.
Is it not necessarily an indentation but some other error?
Thanks.
$ cat pyvmomi-loop.py
from __future__ import (absolute_import, division,
print_function, unicode_literals)
from builtins import *
import atexit
import sys
sys.path.insert(0, '/usr/lib/python2.7/site-packages')
import pyVmomi
import argparse
import atexit
import itertools
from pyVim.connect import SmartConnect, Disconnect
import humanize
from pyVim import connect
from pyVmomi import vmodl
from pyVmomi import vim
## cred
host="1.2.3.4"
user="aa\bb"
password="$!@DD"
port=443
## Ignore certificate error
import ssl
try:
_create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
pass
else:
print ("Ignoring SSL Error")
ssl._create_default_https_context = _create_unverified_https_context
## Fetch id an dpw
def GetArgs():
parser = argparse.ArgumentParser(
description='Process args for retrieving all the Virtual Machines')
parser.add_argument('-s', '--host', required=True, action='store',
help='Remote host to connect to')
parser.add_argument('-o', '--port', type=int, default=443, action='store',
help='Port to connect on')
parser.add_argument('-u', '--user', required=True, action='store',
help='User name to use when connecting to host')
parser.add_argument('-p', '--password', required=False, action='store',
help='Password to use when connecting to host')
args = parser.parse_args()
return args
## Method to fetch VM info
def printHost(host):
try:
summary = host.summary
stats = summary.quickStats
hardware = host.hardware
cpuUsage = stats.overallCpuUsage
memoryCapacity = hardware.memorySize
memoryCapacityInMB = hardware.memorySize/MBFACTOR
memoryUsage = stats.overallMemoryUsage
freeMemoryPercentage = 100 - (
(float(memoryUsage) / memoryCapacityInMB) * 100
)
print ("--------------------------------------------------")
print ("Host name: ", host.name)
print ("Host CPU usage: ", cpuUsage)
print ("Host memory capacity: ", humanize.naturalsize(memoryCapacity,
binary=True))
print ("Host memory usage: ", memoryUsage / 1024, "GiB")
print ("Free memory percentage: " + str(freeMemoryPercentage) + "%")
print ("--------------------------------------------------")
except Exception as error:
print ("Unable to access information for host: ", host.name)
print (error)
pass
## Main method
def main():
# argsCred = GetArgs()
try:
service_instance = connect.SmartConnect(host=host,
user=user,
pwd=password,
port=port,
)
## What to do when exiting
atexit.register(connect.Disconnect, service_instance)
##Content object
content = service_instance.RetrieveContent()
container = content.rootFolder # starting point to look into
viewType = [vim.VirtualMachine] # object types to look for
recursive = True # whether we should look into it recursively
## Create a view
containerView = content.viewManager.CreateContainerView(
container, viewType, recursive)
## Loop through all obhects to return name and VMware tools version
children = containerView.view
for child in children:
if child.summary.guest is not None:
try:
tools_version = child.summary.guest.toolsStatus
osFam = child.summary.guest.guestId
print("VM: {}, VMware-tools: {}".format(child.name, tools_version))
print("VM: {}, OS Fam: {}".format(child.name, osFam))
except:
print("Vmware-tools: None")
except vmodl.MethodFault as error:
print("Caught vmodl fault : " + error.msg)
return -1
return 0
## Start program
if __name__ == "__main__":
main()
This code has indentation problems.
Change
for child in children:
if child.summary.guest is not None:
try:
tools_version = child.summary.guest.toolsStatus
osFam = child.summary.guest.guestId
print("VM: {}, VMware-tools: {}".format(child.name, tools_version))
print("VM: {}, OS Fam: {}".format(child.name, osFam))
except:
print("Vmware-tools: None")
To
for child in children:
if child.summary.guest is not None:
try:
tools_version = child.summary.guest.toolsStatus
osFam = child.summary.guest.guestId
print("VM: {}, VMware-tools: {}".format(child.name, tools_version))
print("VM: {}, OS Fam: {}".format(child.name, osFam))
except:
print("Vmware-tools: None")
If that is your whole .py file, errors are at line 114 and 116. Don't copy paste this code because there might be too many white-spaces. Just indent the code from the lines I mentioned.
Edit: It's not a good practice to code in vim or gedit or other text editors. Take a look at Pycharm :)