
This is the initial version of pyVmomi which represents vSphere API 5.1. Going forward, expect only the 'Objects' and 'Types' generated source files to need updating via official OSS drops.
155 lines
4.9 KiB
Python
Executable File
155 lines
4.9 KiB
Python
Executable File
#!/usr/bin/python
|
|
#
|
|
# VMware vSphere Python SDK
|
|
# Copyright (c) 2008-2013 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 powering on vms on a host on which hostd is running
|
|
"""
|
|
|
|
from optparse import OptionParser, make_option
|
|
from pyVim.connect import SmartConnect, Disconnect
|
|
from pyVmomi import vim, vmodl
|
|
import sys
|
|
import atexit
|
|
|
|
def GetOptions():
|
|
"""
|
|
Supports the command-line arguments listed below.
|
|
"""
|
|
|
|
_CMD_OPTIONS_LIST = [
|
|
make_option("-h", "--host",
|
|
help="remote host to connect to"),
|
|
make_option("-o", "--port",
|
|
default=443,
|
|
help="Port"),
|
|
make_option("-u", "--user",
|
|
default="root",
|
|
help="User name to use when connecting to host"),
|
|
make_option("-p", "--password",
|
|
help="Password to use when connecting to host"),
|
|
make_option("-v", "--vmname", default=[], action="append",
|
|
help="Name of the Virtual Machine to power on"),
|
|
make_option("-?", "--help", action="store_true",
|
|
help="Help"),
|
|
]
|
|
_STR_USAGE = "%prog [options]"
|
|
|
|
parser = OptionParser(option_list=_CMD_OPTIONS_LIST,
|
|
usage=_STR_USAGE,
|
|
add_help_option=False)
|
|
(options, _) = parser.parse_args()
|
|
return options
|
|
|
|
def WaitForTasks(tasks, si):
|
|
"""
|
|
Given the service instance si and tasks, it returns after all the
|
|
tasks are complete
|
|
"""
|
|
|
|
pc = si.content.propertyCollector
|
|
|
|
taskList = [str(task) for task in tasks]
|
|
|
|
# Create filter
|
|
objSpecs = [vmodl.query.PropertyCollector.ObjectSpec(obj=task)
|
|
for task in tasks]
|
|
propSpec = vmodl.query.PropertyCollector.PropertySpec(type=vim.Task,
|
|
pathSet=[], all=True)
|
|
filterSpec = vmodl.query.PropertyCollector.FilterSpec()
|
|
filterSpec.objectSet = objSpecs
|
|
filterSpec.propSet = [propSpec]
|
|
filter = pc.CreateFilter(filterSpec, True)
|
|
|
|
try:
|
|
version, state = None, None
|
|
|
|
# Loop looking for updates till the state moves to a completed state.
|
|
while len(taskList):
|
|
update = pc.WaitForUpdates(version)
|
|
for filterSet in update.filterSet:
|
|
for objSet in filterSet.objectSet:
|
|
task = objSet.obj
|
|
for change in objSet.changeSet:
|
|
if change.name == 'info':
|
|
state = change.val.state
|
|
elif change.name == 'info.state':
|
|
state = change.val
|
|
else:
|
|
continue
|
|
|
|
if not str(task) in taskList:
|
|
continue
|
|
|
|
if state == vim.TaskInfo.State.success:
|
|
# Remove task from taskList
|
|
taskList.remove(str(task))
|
|
elif state == vim.TaskInfo.State.error:
|
|
raise task.info.error
|
|
# Move to next version
|
|
version = update.version
|
|
finally:
|
|
if filter:
|
|
filter.Destroy()
|
|
|
|
# Start program
|
|
def main():
|
|
"""
|
|
Simple command-line program for powering on virtual machines on a system.
|
|
"""
|
|
|
|
options = GetOptions()
|
|
try:
|
|
vmnames = options.vmname
|
|
if not len(vmnames):
|
|
print "No virtual machine specified for poweron"
|
|
sys.exit()
|
|
|
|
si = SmartConnect(host=options.host,
|
|
user=options.user,
|
|
pwd=options.password,
|
|
port=int(options.port))
|
|
if not si:
|
|
print "Cannot connect to Host"
|
|
sys.exit()
|
|
|
|
atexit.register(Disconnect, si)
|
|
|
|
# Retreive the list of Virtual Machines from the invetory objects
|
|
# under the rootFolder
|
|
content = si.content
|
|
objView = content.viewManager.CreateContainerView(content.rootFolder,
|
|
[vim.VirtualMachine],
|
|
True)
|
|
vmList = objView.view
|
|
objView.Destroy()
|
|
|
|
# Find the vm and power it on
|
|
tasks = [vm.PowerOn() for vm in vmList if vm.name in vmnames]
|
|
|
|
# Wait for power on to complete
|
|
WaitForTasks(tasks, si)
|
|
|
|
print "Virtual Machine(s) have been powered on successfully"
|
|
except vmodl.MethodFault, e:
|
|
print "Caught vmodl fault : " + e.msg
|
|
except Exception, e:
|
|
print "Caught Exception : " + str(e)
|
|
|
|
# Start program
|
|
if __name__ == "__main__":
|
|
main()
|