i want shutdown eSXi host with python script can some1 help me ?

291 views
Skip to first unread message

Lasha Tsatsashvili

unread,
Mar 25, 2017, 10:46:10 AM3/25/17
to pysphere
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
Reply all
Reply to author
Forward
0 new messages