Python Module_oslo.vmware_连接 vCenter

简介: 目录目录前言Install oslsvmwareHow to use the vSphere Web Service SDK前言oslo.vmware 是一个由 Python 实现的 vCenter 连接驱动 , 提供了连接并操作 vCenter 的 Method .

目录

前言

oslo.vmware 是一个由 Python 实现的 vCenter 连接驱动 , 提供了连接并操作 vCenter 的 Method . 如果希望应用 Openstack 来接管 vCenter 的资源(调用 vSphere SDK) 的话,那么 olso.vmware 将会是一个不错的选择 .

注意: 本篇的代码需要一个测试用的 vCenter 环境

vSphere Web Service SDK

Install osls.vmware

cd /opt/stack

git clone https://github.com/openstack/oslo.vmware --branch stable/liberty

cd oslo.vmware

sudo pip install -r requirements.txt -e .

测试连接 vCenter
vim vsdk.py

from oslo_vmware import api 
from oslo_vmware import vim_util

# Get a handle to a vSphere API session
session = api.VMwareAPISession(
            'vCenter_IP',
            'vCenter_username',
            'vCenter_password',
             1,  
             0.1)

# Get MO of type "HostSystem"
result1 = session.invoke_api(
    vim_util,                    
    'get_objects',    
    session.vim, 'HostSystem', 100) 
print result1
print "="*50

# Get information by properties of MO object
rep2 = session.invoke_api(vim_util,'get_object_properties_dict',session.vim,
result1.objects[0].obj,'vm')
print "*"*50
print rep2

How to use the vSphere Web Service SDK

下面给出一些基本的使用方法(不需要 Openstack 环境) :

# 建立与 vCenter 的 Session 连接。
In [83]: session = api.VMwareAPISession(
           '200.X.102.7',
           'root',
           'vmware',
           1,
           0.1)



# session.invoke_api() method of oslo_vmware.api.VMwareAPISession instance
#     :param module: module corresponding to the VIM API call
#     :param method: method in the module which corresponds to the VIM API call
#     :param args: arguments to the method
#     :param kwargs: keyword arguments to the method
#     :returns: response from the API call
#     :raises: VimException, VimFaultException, VimAttributeException,
#             VimSessionOverLoadException, VimConnectionException
# 调用 API 获取一个 MO, 使用这个 MO 来进一步获取别的信息
# Return instance of suds.sudsobject.RetrieveResult
In [83]: hostSystem = session.invoke_api(vim_util,        # Module
                            'get_objects',                # Method
                            session.vim,                 
                            'HostSystem',                 # Managed Object(SDK)
                            100)              



# hostSystem.objects[0].obj ==
#            (obj){
#               value = "host-9"
#               _type = "HostSystem"      
#            }
# 有 _type 属性,可以在 SDK 中找到 "HostSystem" 的 Description,
# 并且根据 Description 提供的 Properties 进一步获取别的信息。 EG. vm
In [83]: vmResponse = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
                              hostSystem.objects[0].obj,
                              'vm')



# vmResponse['vm'].ManagedObjectReference[0] ==
#      (ManagedObjectReference){
#         value = "vm-15"
#         _type = "VirtualMachine"
#      },
# 有 _type 属性,可以在 SDK 中找到 "VirtualMachine" 的 Description,
# 并且根据 Description 提供的 Properties 进一步获取别的信息。 EG. summary
In [83]: summaryResponse = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
                              vmResponse['vm'].ManagedObjectReference[0],
                              'summary')



# 当 Output 非常多时,可以使用 IPython 的特殊用法来实现过滤(Python 和 Shell 结合)。
In [118]: test = summaryResponse[0]
In [117]: !echo '$test' | grep '_type'
         _type = "VirtualMachine"
                     _type = "VirtualMachine"
                           _type = "HostSystem"



# summaryResponse[0].obj ==
# (obj){
#   value = "vm-15"
#   _type = "VirtualMachine"
# }
# 有 _type 属性,可以在 SDK 中找到 "VirtualMachine" 的 Description,
# 并且根据 Description 提供的 Properties 进一步获取别的信息。 EG. config
In [126]: configResponse = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
                              summaryResponse[0].obj,
                              'config')



# 可以继续获取别的信息
In [205]: text = configResponse
In [206]: !echo '$text' | grep _type
                           _type = "Datastore"
                           _type = "Datastore"
                           _type = "Network"
                           _type = "Network"
                           _type = "Network"
                           _type = "Network"

使用小结:
1. session.invoke_api() 传递 oslo.vmware 提供的 method 到 vCenter
2. method: get_objects 获取 MO 对象
3. method: get_object_properties_dict 获取 MO 对象的属性信息的字典 EG. 获取 HostSystem 的 MO 对象
4. MO 对象中含有 _type 属性的对象, 其 _type 的值能在 SDK 中找到对应的 Properties
5. 将含有 _type 属性的对象和对应的 SDK 中的 Properties 值传递给 session.invoke_api() 方法就可以获取相应的值
EXAMPLE:

session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
                              hostSystem.objects[0].obj,               # hostSystem.objects[0].obj 对象中含有 _type 属性, 其值为 HostSystem
                              'vm')                                   # 在 SDK 中找到 HostSystem MO type ,提供了Properties: 'vm'
相关文章
|
1月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
128 68
|
4月前
|
NoSQL Unix 网络安全
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
【Azure Cache for Redis】Python Django-Redis连接Azure Redis服务遇上(104, 'Connection reset by peer')
|
2月前
|
安全 虚拟化 数据中心
Xshell 连接 VMware虚拟机操作 截图和使用
Xshell 连接 VMware虚拟机操作 截图和使用
64 4
|
2月前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
420 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
1月前
|
测试技术 API 数据安全/隐私保护
Python连接到Jira实例、登录、查询、修改和创建bug
通过使用Python和Jira的REST API,可以方便地连接到Jira实例并进行各种操作,包括查询、修改和创建Bug。`jira`库提供了简洁的接口,使得这些操作变得简单易行。无论是自动化测试还是开发工作流的集成,这些方法都可以极大地提高效率和准确性。希望通过本文的介绍,您能够更好地理解和应用这些技术。
120 0
|
2月前
|
SQL Oracle 关系型数据库
Python连接Oracle
Python连接Oracle
22 0
|
3月前
|
NoSQL Linux Redis
linux安装单机版redis详细步骤,及python连接redis案例
这篇文章提供了在Linux系统中安装单机版Redis的详细步骤,并展示了如何配置Redis为systemctl启动,以及使用Python连接Redis进行数据操作的案例。
86 2
|
3月前
|
Unix Linux 网络安全
python中连接linux好用的模块paramiko(附带案例)
该文章详细介绍了如何使用Python的Paramiko模块来连接Linux服务器,包括安装配置及通过密码或密钥进行身份验证的示例。
133 1
|
2月前
|
Android开发 Swift iOS开发
python 基于电脑蓝牙连接获取手机的实时数据
python 基于电脑蓝牙连接获取手机的实时数据
70 0
|
3月前
|
Linux Python
Linux之centos安装clinkhouse以及python如何连接
Linux之centos安装clinkhouse以及python如何连接