robotframework-demo/Project/task4/Script/SC6_WEB/Vsphere/Vsphere.py

120 lines
3.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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"