Python 使用oslo.vmware管理ESXI虚拟机
2023-09-14 09:13:22 时间
oslo.vmware是OpenStack通用框架中的一部分,主要用于实现对虚拟机的管理任务,借助oslo.vmware模块我们可以管理Vmware ESXI集群环境。
读取所有节点主机
from oslo_vmware import api
from oslo_vmware import vim_util
import urllib3
urllib3.disable_warnings()
session = api.VMwareAPISession(
'127.0.0.1',
'admin@vsphere.com',
'123456',
1,0.1)
#result1 = session.invoke_api(vim_util,'get_objects',session.vim, 'HostSystem', 100)
#print(result1.objects[0])
# rep2 = session.invoke_api(vim_util,'get_object_properties_dict',session.vim, result1.objects[0].obj,'vm')
res = session.invoke_api(vim_util,"get_objects",session.vim,"ResourcePool",100)
print(res)
获取所有区域:
from oslo_vmware import api
from oslo_vmware import vim_util
import urllib3
urllib3.disable_warnings()
session = api.VMwareAPISession(
'127.0.0.1',
'admin@vsphere.com',
'123456',
1,0.1)
res = session.invoke_api(vim_util,"get_objects",session.vim,"ComputeResource",100)
addr = []
for i in res.objects:
addr.append(i.propSet[0][1])
print(addr)
获取所有主机列表:
from oslo_vmware import api
from oslo_vmware import vim_util
import urllib3
urllib3.disable_warnings()
session = api.VMwareAPISession(
'127.0.0.1',
'admin@vsphere.com',
'123456',
1,0.1)
res = session.invoke_api(vim_util,"get_objects",session.vim,"HostSystem",1000)
addr = []
for i in res.objects:
addr.append(i.propSet[0][1])
print(addr)
获取 HostSystem MO
from oslo_vmware import api
from oslo_vmware import vim_util
import urllib3
urllib3.disable_warnings()
session = api.VMwareAPISession(
'127.0.0.1',
'admin@vsphere.com',
'123456',
1,0.1)
res = session.invoke_api(vim_util,"get_objects",session.vim,"HostSystem",1000)
# 我们随意选取一个 ESXi Host, 并且打印其 Object
host_obj = res.objects[0].obj
# 获取 HostNetworkSystem MO, 并打印其 Value
host_network_system_val = session.invoke_api(vim_util,
'get_object_properties_dict',session.vim,host_obj,'configManager.networkSystem')
print(host_network_system_val)
详细信息:
from oslo_vmware import api
from oslo_vmware import vim_util
import urllib3
urllib3.disable_warnings()
session = api.VMwareAPISession(
'127.0.0.1',
'admin@vsphere.com',
'123456',
1,0.1)
res = session.invoke_api(vim_util,"get_objects",session.vim,"VirtualMachine",1000)
summary = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
res.objects[0].obj,'summary')
print(summary)
资源清单
from oslo_vmware import api
from oslo_vmware import vim_util
import urllib3
urllib3.disable_warnings()
session = api.VMwareAPISession(
'127.0.0.1',
'admin@vsphere.com',
'123456',
1,0.1)
res = session.invoke_api(vim_util,"get_objects",session.vim,"Datacenter",1000)
# 获取 Cluster 资源清单
computeResource = session.invoke_api(
vim_util,
'get_objects',
session.vim,
'ComputeResource',
100)
for each in computeResource.objects:
print("资源清单: {}".format(each[1][0][1]))
读取主机状态
from oslo_vmware import api
from oslo_vmware import vim_util
import urllib3
urllib3.disable_warnings()
session = api.VMwareAPISession(
'127.0.0.1',
'admin@vsphere.com',
'123456',
1,0.1)
res = session.invoke_api(vim_util,"get_objects",session.vim,"HostSystem",1000)
summary = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
res.objects[0].obj,'summary.runtime.powerState')
summary1 = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
res.objects[0].obj,'summary.config.name')
print(summary.get("summary.runtime.powerState"))
print(summary1.get("summary.config.name"))
循环输出
from oslo_vmware import api
from oslo_vmware import vim_util
import urllib3
urllib3.disable_warnings()
session = api.VMwareAPISession(
'127.0.0.1',
'admin@vsphere.com',
'123456',
1,0.1)
res = session.invoke_api(vim_util,"get_objects",session.vim,"HostSystem",100)
tim = 0
for each in res.objects:
tim = tim +1
print(tim)
stats = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
each.obj,'summary.runtime.powerState')
addr = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
each.obj,'summary.config.name')
print("主机地址: {} \t 状态: {}".format(addr.get("summary.config.name"),stats.get("summary.runtime.powerState")))
读取虚拟机状态
from oslo_vmware import api
from oslo_vmware import vim_util
import urllib3
urllib3.disable_warnings()
session = api.VMwareAPISession(
'127.0.0.1',
'admin@vsphere.com',
'123456',
1,0.1)
res = session.invoke_api(vim_util,"get_objects",session.vim,"VirtualMachine",100)
instance = res.objects[0].obj
print(instance)
stats = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
instance, 'summary')
print(stats)
使用com.vmware.vcenter_client管理虚拟机。
Vsphere API基础:
import requests
import urllib3
from vmware.vapi.vsphere.client import create_vsphere_client
session = requests.session()
session.verify = False
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
vsphere_client = create_vsphere_client(server='127.0.0.1', username='admin@vsphere.com', password='123456', session=session)
# 列出所有虚拟机
ref = vsphere_client.vcenter.VM.list()
print(ref)
# 通过虚拟机的名称来进行过滤
ref = vsphere_client.vcenter.VM.list( vsphere_client.vcenter.VM.FilterSpec(names={'Baidu-NLP01'}) )
print(ref)
实现开关机
import requests
import urllib3
from vmware.vapi.vsphere.client import create_vsphere_client
session = requests.session()
session.verify = False
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
vsphere_client = create_vsphere_client(server='127.0.0.1', username='admin@vsphere.com', password='123456', session=session)
# 检索系统是否开机
vm = vsphere_client.vcenter.VM.list(vsphere_client.vcenter.VM.FilterSpec(names={'GZH-SERVER3'}))[0]
power_status = vsphere_client.vcenter.vm.Power.get(vm.vm)
print("是否开机: {}".format(power_status))
# 检索系统是否开机
vm = vsphere_client.vcenter.VM.list(vsphere_client.vcenter.VM.FilterSpec(names={'192.168.81.51'}))
if len(vm) != 0:
vm = vm[0]
power_status = vsphere_client.vcenter.vm.Power.get(vm.vm)
print("已开机: {}".format(power_status.state))
else:
print("已关机")
# 关闭系统 start / reset / suspend / stop
vsphere_client.vm.Power.stop(vm.vm)
# 删除虚拟机
vsphere_client.vcenter.VM.delete(vm)
列出数据存储
import requests
import urllib3
from vmware.vapi.vsphere.client import create_vsphere_client
from com.vmware.vcenter_client import Folder
from com.vmware.vcenter_client import Datastore
from com.vmware.vcenter_client import Network
session = requests.session()
session.verify = False
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
vsphere_client = create_vsphere_client(server='127.0.0.1', username='admin@vsphere.com', password='123456', session=session)
# 列出集群
#ref = vsphere_client.vcenter.Cluster.list()
#print(ref)
# 列出 vCenter 中所有文件夹
#folder = vsphere_client.vcenter.Folder.list()
# 列出数据存储
# store = vsphere_client.vcenter.Datastore.list()
datastore_name = '192.168.64.20'
filter_spec = Datastore.FilterSpec(names={datastore_name})
datastore_summaries = vsphere_client.vcenter.Datastore.list(filter_spec)
datastore_id = datastore_summaries[0].datastore
print("存储结构: {} 数据存储名称: {}".format(datastore_summaries,datastore_id))
获取资源池
import requests
import urllib3
from vmware.vapi.vsphere.client import create_vsphere_client
from com.vmware.vcenter_client import Cluster
from com.vmware.vcenter_client import ResourcePool
session = requests.session()
session.verify = False
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
vsphere_client = create_vsphere_client(server='127.0.0.1', username='admin@vsphere.com', password='123456', session=session)
# 获取所有资源池
filter = vsphere_client.vcenter.ResourcePool.list()
print(filter)
# 根据集群名获取资源池
cluster_name = 'vSAN-Cluster1'
cluster_id = vsphere_client.vcenter.Cluster.list(Cluster.FilterSpec(names={cluster_name}))[0].cluster
resource_pool_id = vsphere_client.vcenter.ResourcePool.list(ResourcePool.FilterSpec(clusters={cluster_id}))[0].resource_pool
print(resource_pool_id)
列出网络
import requests
import urllib3
from vmware.vapi.vsphere.client import create_vsphere_client
from com.vmware.vcenter_client import Network
session = requests.session()
session.verify = False
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
vsphere_client = create_vsphere_client(server='127.0.0.1', username='admin@vsphere.com', password='123456', session=session)
# 列出标准网络
filter = vsphere_client.vcenter.Network.list()
print(filter)
'''
它的 type 有三种类型:
DISTRIBUTED_PORTGROUP:vcenter 创建和管理的网络;
OPAQUE_NETWORK:VSphere 之外的设备所创建,但是 vSphere 却可以知道网络的名称和标识符,所以宿主机和虚拟机的网卡才能够连接到;
STANDARD_PORTGROUP:ESX 创建和管理的网络。
'''
filter = Network.FilterSpec(names={'vlan 164'},types={Network.Type.STANDARD_PORTGROUP})
network_summaries = vsphere_client.vcenter.Network.list(filter=filter)
print(network_summaries)
# 列出分布式网络
filter = Network.FilterSpec(
names=set(['vlan 164']),
types=set([Network.Type.DISTRIBUTED_PORTGROUP]))
network_summaries = vsphere_client.vcenter.Network.list(filter=filter)
if len(network_summaries) > 0:
network_id = network_summaries[0].network
print(network_id)
else:
print("Distributed Portgroup Network not found in Datacenter")
相关文章
- python中实现延时回调普通函数示例代码
- Python 日期和时间_python 当前日期时间_python日期格式化
- Python 日期和时间_python 当前日期时间_python日期格式化
- python:ERROR: No matching distribution found for Pillow==9.1.0的处理(Python 3.6.8)
- python使用consul进行服务注册和发现
- python:ERROR: No matching distribution found for Pillow==9.1.0的处理(Python 3.6.8)
- 机器学习笔记 - 使用python从头构建和训练神经网络
- Python之多线程:python多线程设计之同时执行多个函数命令详细攻略
- Python语言学习之文件夹那些事:python和文件夹的使用方法之详细攻略
- 成功解决OSError: [E050] Can‘t find model ‘en_core_web_sm‘. It doesn‘t seem to be a Python package or a v
- Python语言学习:利用python获取当前/上级/上上级目录路径(获取路径下的最后叶目录的文件名、合并两个不同路径下图片文件名等目录/路径案例、正确加载图片路径)之详细攻略
- Python之tkinter:动态演示调用python库的tkinter带你进入GUI世界(Entry/Entry的Command)
- 已解决2.Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and wi
- 〖Python 数据库开发实战 - MySQL篇㉜〗- 事务的隔离级别
- 【Python成长之路】python并发学习:多进程与多线程的用法及场景介绍
- Python爬虫:xpath常用方法示例
- Python爬虫:滤网架构处理爬虫数据
- 小学生蓝桥杯Python闯关 | 世界第二峰的高度
- python IDLE 背景修改 IDLE (Python GUI)
- python web py入门(65)- jQuery - 根据鼠标位置来选择不同的样式显示
- python基础===八大排序算法的 Python 实现
- 【Leetcode刷题Python】剑指 Offer 22. 链表中倒数第k个节点
- 【Python基础】python爬虫之异步网络爬虫ǃ
- 〖Python自动化办公篇⑳〗 - python实现邮件自动化 - 发送html邮件和带附件的邮件