120 lines
3.8 KiB
Python
120 lines
3.8 KiB
Python
#!/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" |