用python(pyvmomi)管理vmware ESXi/vCenter

简介: 自动化运维,用python(pyvmomi)管理vmware ESXi/vCenter

环境

开发环境:Ubuntu 18.04 + python3.7
以下环境经过测试都可以使用:centos 6/7 + python3.4/3.6/3.7windows 7/2016 +python3.4/3.6/3.7

安装必要模块pyvmomi

pip install pyvmomi 

如果是linux系统有pip2和pip3 两个版本,需要使用

pip3 install pyvmomi

代码

host='ESXi 机器ip'
user='root'
password='密码'
port=443#端口
context = None
if hasattr(ssl, '_create_unverified_context'):
    context = ssl._create_unverified_context()
si = SmartConnect(host=host,user=user,pwd=password,port=port,sslContext=context)
if not si:
    print("帐号密码有问题")
atexit.register(Disconnect, si)


###################################################################################################
def WaitForTasks(tasks, si):#任务
    pc = si.content.propertyCollector
    taskList = [str(task) for task in tasks]
    objSpecs = [vmodl.query.PropertyCollector.ObjectSpec(obj=task) for task in tasks]
    propSpec = vmodl.query.PropertyCollector.PropertySpec(type=vim.Task,pathSet=[], all=True)
    filterSpec = vmodl.query.PropertyCollector.FilterSpec()
    filterSpec.objectSet = objSpecs
    filterSpec.propSet = [propSpec]
    filter = pc.CreateFilter(filterSpec, True)
    try:
        version, state = None, None
        while len(taskList):
            update = pc.WaitForUpdates(version)
            for filterSet in update.filterSet:
                for objSet in filterSet.objectSet:
                    task = objSet.obj
                    for change in objSet.changeSet:
                        if change.name == 'info':
                            state = change.val.state
                        elif change.name == 'info.state':
                            state = change.val
                        else:
                            continue
                        if not str(task) in taskList:
                            continue
                        if state == vim.TaskInfo.State.success:
                            taskList.remove(str(task))
                        elif state == vim.TaskInfo.State.error:
                            raise task.info.error
            version = update.version
    finally:
        if filter:
            filter.Destroy()
def getvmname():#打印所有虚拟机名
    content = si.RetrieveContent()
    for child in content.rootFolder.childEntity:
        if hasattr(child, 'vmFolder'):
            datacenter = child
            vmFolder = datacenter.vmFolder
            vmList = vmFolder.childEntity
            for vm in vmList:
                print(vm.summary.config.name)
                print(vm.name)
def getvmstatus(vm_name):#获取虚拟机状态
    content = si.RetrieveContent()
    for child in content.rootFolder.childEntity:
        if hasattr(child, 'vmFolder'):
            datacenter = child
            vmFolder = datacenter.vmFolder
            vmList = vmFolder.childEntity
            for vm in vmList:
                if vm.summary.config.name == vm_name :
                    print(vm.summary.runtime.powerState)

def poweronvm(vm_name):#打开虚拟机
    content = si.content
    objView = content.viewManager.CreateContainerView(content.rootFolder,[vim.VirtualMachine],True)
    vmList = objView.view
    objView.Destroy()
    tasks = [vm.PowerOn() for vm in vmList if vm.name in vm_name]
    print(tasks)
    WaitForTasks(tasks, si)
    print("虚拟机启动成功")

def get_vmsnapshotinfo(vm_name):#查看快照信息
    content = si.RetrieveContent()
    container = content.viewManager.CreateContainerView(content.rootFolder, [vim.VirtualMachine], True)
    for c in container.view:
        if c.name == vm_name:
            snapshots = c.snapshot.rootSnapshotList
            return snapshots
def get_vmlist():#获取虚拟机列表
    content = si.RetrieveContent()
    for child in content.rootFolder.childEntity:
        if hasattr(child, 'vmFolder'):
            datacenter = child
            vmFolder = datacenter.vmFolder
            vmList = vmFolder.childEntity
            return vmList
def re_snapshot(vm_name,snapshot_name):##恢复快照
    for vm in get_vmlist():
        pass
        #print(vm.name)
        if vm.name == vm_name:
            snapshots = vm.snapshot.rootSnapshotList
            for snapshot in snapshots: 
                print(snapshot.name)               
                if snapshot_name == snapshot.name:
                    snap_obj = snapshot.snapshot
                    print ("恢复快照", snapshot.name)
                    task = [snap_obj.RevertToSnapshot_Task()]
                    WaitForTasks(task, si)

#re_snapshot("虚拟机名","快照名") #恢复快照 
#print(get_vmsnapshotinfo("虚拟机名")) #获取虚拟机快照信息
#print(get_vmsnapshotinfo("虚拟机名"))#查看虚拟机快照
#poweronvm("虚拟机名") #打开虚拟机

其它功能我闲了就增加
如果有其它着急需求或者使用方法可以回帖寻求帮助

目录
相关文章
|
2月前
|
Python
空间管理大师已上线!(2),Python高级工程师进阶学习】
空间管理大师已上线!(2),Python高级工程师进阶学习】
|
2月前
|
Unix Shell Linux
赞!优雅的Python多环境管理神器!易上手易操作!
赞!优雅的Python多环境管理神器!易上手易操作!
104 0
|
2月前
|
存储 JSON 数据管理
文件操作与管理:用Python读写数据
【4月更文挑战第8天】本文介绍了Python中进行高效文件操作与数据管理的方法。通过`os`模块管理目录,使用`open`函数读写文件,`pickle`模块保存和加载复杂数据结构。示例代码展示了如何读取和写入文本文件,处理CSV和JSON数据,以及利用`pickle`序列化和反序列化Python对象。掌握这些技能对于处理现代社会中的数据至关重要。
|
29天前
|
监控 算法 Java
Python中管理内存
Python中管理内存
|
29天前
|
监控 算法 Java
使用Python的垃圾回收机制来管理内存
使用Python的垃圾回收机制来管理内存
|
28天前
|
Python
Python中有效地使用global和globals()来管理全局变量
Python中有效地使用global和globals()来管理全局变量
|
8天前
|
存储 关系型数据库 MySQL
以下是一个简化的车库管理系统工程概述,并附带Python代码示例和详解。
以下是一个简化的车库管理系统工程概述,并附带Python代码示例和详解。
|
1月前
|
Python
Python中使用os库管理环境变量
在Python中,可以使用os库来管理操作系统的环境变量。通过os.environ对象,我们可以获取、修改和删除环境变量的值。
24 3
|
1月前
|
存储 SQL 算法
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
高效日程管理:利用区间合并算法优化活动安排【python LeetCode57】
|
2月前
|
缓存 jenkins 测试技术
Python中的环境管理与虚拟环境的使用
【5月更文挑战第21天】本文阐述了Python开发中环境管理的重要性,尤其是使用虚拟环境来隔离项目依赖,避免冲突。通过venv模块创建和管理虚拟环境,可以确保每个项目独立运行。文章还介绍了虚拟环境的隔离性、可移植性优势,以及高级工具如`virtualenvwrapper`和`Pipenv`的使用。此外,讨论了自动化管理虚拟环境的方法,如使用`requirements.txt`和Pipenv,以及在CI/CD流程中如何整合虚拟环境以提高效率和代码质量。总之,正确管理虚拟环境对提升项目稳定性和团队协作至关重要。
45 4