#!/usr/bin/python # encoding:utf-8 from pysphere import VIServer import ssl import sys from pysphere.resources import VimService_services as VI from pysphere.vi_task import VITask reload(sys) sys.setdefaultencoding('gbk') server = VIServer() #全局取消证书验证 #ssl._create_default_https_context = ssl._create_unverified_context class Vsphere(object): def sphere_login(self, host, user, password): u"""通过用户名,密码登录指定的ESXi :param host:ESXi的host ip :param user:ESXi的用户名 :param password:ESXi的密码 :return:None | Vsphere login | host | user | password | """ server.connect(host, user, password, trace_file="debug.txt") # global server pass def vm_poweron(self, name): u"""通过虚拟机名称打开对应虚拟机 :param name:虚拟机名称 :return:None | vm poweron | name | """ vm = server.get_vm_by_name(name) if vm.get_status() == 'POWERED OFF': task = vm.power_on(sync_run=False) task.wait_for_state(['error', 'success'], timeout=60) if task.get_state() == 'error': print task.get_error_message() pass def vm_poweroff(self, name): u"""通过虚拟机名称打开对应虚拟机 :param name:虚拟机名称 :return:None | vm poweroff | name | """ vm = server.get_vm_by_name(name) if vm.get_status() != 'POWERED OFF': task = vm.power_off(sync_run=False) task.wait_for_state(['error', 'success'], timeout=60) if task.get_state() == 'error': print task.get_error_message() pass def vm_revert_snapshot(self, name, snapshot_name): u"""通过快照名恢复虚拟机名称指定的虚拟机 :param name:虚拟机名称 :param snapshot_name:快照名 :return:None | vm revert snapshot | name | snapshot_name | """ vm = server.get_vm_by_name(name) snapshot_list = vm.get_snapshots() for snapshot in snapshot_list: print snapshot.get_name() print snapshot.get_description() if snapshot_name in snapshot.get_name(): task = vm.revert_to_named_snapshot(snapshot.get_name(), sync_run=False) print 'revert snapshot %s' % snapshot.get_name() task.wait_for_state(['error', 'success'], timeout=60) if task.get_state() == 'error': print task.get_error_message() break pass def sphere_logoff(self): u"""登出指定的ESXi :return:None | sphere logoff | """ if server.is_connected(): server.disconnect() pass # def vm_delete(self,name): # u"""通过虚拟机名称删除对应虚拟机 # # :param name:虚拟机名称 # :return:None # | vm delete | name | # """ # vm = server.get_vm_by_name(name) ## status = task.wait_for_state([task.STATE_SUCCESS, task.STATE_ERROR]) # request = VI.Destroy_TaskRequestMsg() # _this = request.new__this(vm._mor) # _this.set_attribute_type(vm._mor.get_attribute_type()) # request.set_element__this(_this) # ret = s._proxy.Destroy_Task(request)._returnval # task = VITask(ret, s) # status = task.wait_for_state([task.STATE_SUCCESS, task.STATE_ERROR]) # if status == task.STATE_SUCCESS: # print "VM successfully deleted from disk" # pass # elif status == task.STATE_ERROR: # print "VM failed deleted from disk" # pass if __name__ == '__main__': print "OK"