import sys
from pysphere import VIServer, VITask, VIMor
from pysphere.vi_virtual_machine import VIVirtualMachine
from pysphere.resources import VimService_services as VI
server = VIServer()
try:
server.connect('host', 'name', 'password')
except:
print 'Could not estabilish connection!'
sys.exit(2);
def host_mor(mor):
if not VIMor.is_mor(mor):
return VIMor(mor, "HostSystem")
return mor
def enter_maintenance_mode(host, timeout, evacuate_powered_off_vms=None):
host = host_mor(host)
request = VI.EnterMaintenanceMode_TaskRequestMsg()
_this = request.new__this(host)
_this.set_attribute_type(host.get_attribute_type())
request.set_element__this(_this)
request.set_element_timeout(timeout)
if evacuate_powered_off_vms in [False, True]:
request.set_element_evacuatePoweredOffVms(evacuate_powered_off_vms)
task = server._proxy.EnterMaintenanceMode_Task(request)._returnval
return VITask(task, server)
def shutdown_host(host, force):
host = host_mor(host)
request = VI.ShutdownHost_TaskRequestMsg()
_this = request.new__this(host)
_this.set_attribute_type(host.get_attribute_type())
request.set_element__this(_this)
request.set_element_force(force)
task = server._proxy.ShutdownHost_Task(request)._returnval
return VITask(task, server)
def suspend_all_powered_on_vms():
for path in server.get_registered_vms(status='poweredOn'):
vm = server.get_vm_by_path(path)
vm.suspend(sync_run=False)
def migrate_powered_on_vms(from_host, to_host):
from_host = host_mor(from_host)
to_host = host_mor(to_host)
props = ['runtime.powerState']
oc = server._retrieve_properties_traversal(property_names=props,
from_node=from_host,
obj_type='VirtualMachine')
for o in oc:
powered_on = False
if hasattr(o, "PropSet") and o.PropSet:
for p in o.PropSet:
if p.Name=='runtime.powerState' and p.Val == 'poweredOn':
vm = VIVirtualMachine(server, o.Obj)
vm.migrate(sync_run=False, host=to_host)
# Here I need to set the host (the esxi itself)
host = VIMor(server, "HostSystem")
print "Entering maintenance mode..."
task = enter_maintenance_mode(host, 10)
print "State: ",task.get_state()
#print "Suspending all VMs..."
suspend_all_powered_on_vms()
print "Done"
#print "Shutdown host..."
shutdown_host(host, True)
server.disconnect()
i find this code but it doesnot work it throw error like this:
Traceback (most recent call last):
File "C:\Python27\tutorial\vmware.py", line 72, in <module>
task = server._proxy.ShutdownHost_Task(request)._returnval
File "C:\Python27\lib\site-packages\pysphere\resources\VimService_services.py", line 1314, in ShutdownHost_Task
response = self.binding.Receive(ShutdownHost_TaskResponseMsg.typecode)
File "C:\Python27\lib\site-packages\pysphere\ZSI\client.py", line 545, in Receive
return _Binding.Receive(self, replytype, **kw)
File "C:\Python27\lib\site-packages\pysphere\ZSI\client.py", line 464, in Receive
raise FaultException(msg)
FaultException: The object has already been deleted or has not been completely created
<pysphere.resources.VimService_services_types.ManagedObjectNotFoundFault_Dec_Holder object at 0x0000000005AE5160>
can someone help me