oslo.vmware是OpenStack通用框架中的一部分,主要用于实现对虚拟机的管理任务,借助oslo.vmware模块我们可以管理Vmware ESXI集群环境。
读取所有节点主机
from oslo_vmware import apifrom oslo_vmware import vim_utilimport urllib3urllib3.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,"ResourcePool" ,100 ) print (res)
获取所有区域:
from oslo_vmware import apifrom oslo_vmware import vim_utilimport urllib3urllib3.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 apifrom oslo_vmware import vim_utilimport urllib3urllib3.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 apifrom oslo_vmware import vim_utilimport urllib3urllib3.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 ) host_obj = res.objects[0 ].obj 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 apifrom oslo_vmware import vim_utilimport urllib3urllib3.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 apifrom oslo_vmware import vim_utilimport urllib3urllib3.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 ) 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 apifrom oslo_vmware import vim_utilimport urllib3urllib3.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 apifrom oslo_vmware import vim_utilimport urllib3urllib3.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 requestsimport urllib3from vmware.vapi.vsphere.client import create_vsphere_clientsession = 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 requestsimport urllib3from vmware.vapi.vsphere.client import create_vsphere_clientsession = 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 ("已关机" ) vsphere_client.vm.Power.stop(vm.vm) vsphere_client.vcenter.VM.delete(vm)
列出数据存储
import requestsimport urllib3from vmware.vapi.vsphere.client import create_vsphere_clientfrom com.vmware.vcenter_client import Folderfrom com.vmware.vcenter_client import Datastorefrom com.vmware.vcenter_client import Networksession = 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) 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 requestsimport urllib3from vmware.vapi.vsphere.client import create_vsphere_clientfrom com.vmware.vcenter_client import Clusterfrom com.vmware.vcenter_client import ResourcePoolsession = 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 requestsimport urllib3from vmware.vapi.vsphere.client import create_vsphere_clientfrom com.vmware.vcenter_client import Networksession = 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" )