Python Module_oslo.vmware_连接 vCenter

目录

  • 目录
  • 前言
  • Install oslsvmware
  • How to use the vSphere Web Service SDK

前言

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'
时间: 2024-10-28 08:28:59

Python Module_oslo.vmware_连接 vCenter的相关文章

求救!!!python paramiko远程连接LINUX,exec_command出错

问题描述 求救!!!python paramiko远程连接LINUX,exec_command出错 各位大神,小弟最近用paramiko远程连接Liunx服务器的时候用"exec_command"执行grep查询数据的时候,查询到的数据条数超过200条的时候"exec_command"就返卡住在那里不动了,这是为什么呢,怎么解决啊!哪位大神不腻赐教,跪求啊! 解决方案 没有人么,求救啊!实在是不知道该怎么办啊

python采用ado连接access数据库的标准语句

python采用ado连接access数据库的标准语句.优点是可以使用rs(recordset),缺点是不能使用odbc标准的cursor,且仅仅能在windows环境使用 #!/usr/bin/env python # -*- coding: utf-8 -*- # file : dbconn.py class Cls_ado: def __init__(self): #win32com.client import win32com.client #创建COM对象 self.conn=win3

python自动化测试之连接几组测试包实例_python

本文实例讲述了python自动化测试之连接几组测试包的方法,分享给大家供大家参考.具体方法如下: 具体代码如下: class RomanNumeralConverter(object): def __init__(self): self.digit_map = {"M":1000, "D":500, "C":100, "L":50, "X":10, "V":5, "I"

用Python来SSH连接到你的机器

是时间写点python代码了.我爱自动化的东西,今天我将告诉大家怎么使用python通过ssh连接你的机器,并在上面运行命令.这并不难,但是用python来做也不是很简单,因为要用很多模块和库来完成这个任务. 你是不是很好奇本教程将会使用什么模块呢? 我们将使用Python中 pexpect 模块的 pxssh 类,它用于处理一些自动化的需求,比如ssh和ftp.想使你的系统管理生活尽可能的简单吗?那么,请关注本教程并且尝试尽可能多的学习吧.OK,OK,看我这里,下面我将给出关于pxssh的一些

用Python DBUtils安全连接mssql

 DBUtils 是一套允许线程化 Python 程序可以安全和有效的访问数据库的模块.有人在基于Pylons的服务器上测试了使用DBUtils前后的性能对比,看上去似乎性能不错.不失为一个管理数据库连接的办法.    但连mysql没问题,代码很简单, from DBUtils.PooledDB import PooledDBimport MySQLdb pool = PooledDB(MySQLdb, 5,host = "ipip", user = "root"

python通过telnet连接华为设备例子

最近在研究华为防火墙,要搞个web版的程序来控制防火墙,那底层就需要用telnet或者snmp来控制设置,今天先共享下telnet的代码 #coding=utf-8 import telnetlib import re import time HOST = '192.168.1.231' user = 'admin' password = 'admin' tn = telnetlib.Telnet(HOST) # tn.set_debuglevel(2) #开启调试模式 tn.expect([r

Python MySQLdb模块连接操作mysql数据库实例_python

mysql是一个优秀的开源数据库,它现在的应用非常的广泛,因此很有必要简单的介绍一下用python操作mysql数据库的方法.python操作数据库需要安装一个第三方的模块,在http://mysql-python.sourceforge.net/有下载和文档. 由于python的数据库模块有专门的数据库模块的规范,所以,其实不管使用哪种数据库的方法都大同小异的,这里就给出一段示范的代码: #-*- encoding: gb2312 -*- import os, sys, string impo

Openstack_通用模块_Oslo_vmware 创建 vCenter 虚拟机快照

目录 目录 前文列表 创建虚拟机快照 最后 前文列表 Python Module_oslo.vmware_连接 vCenter Openstack_通用模块_Oslo_vmware 创建/删除 vCenter 虚拟机 创建虚拟机快照 vSphere Create Snapshot 文档 Snapshot 是虚拟机磁盘文件(VMDK)在某个点及时的复本.包含了虚拟机所有虚拟磁盘上的数据状态和这个虚拟机的电源状态(on/off/suspended).你可以在虚拟机起电, 关电, 挂起的状态下创建一个

VMware 虚拟化编程(3) —VMware vSphere Web Service API 解析

目录 目录 前文列表 VMware vSphere Web Services API VMware vSphere Web Services SDK vSphere WS API 中的托管对象 Managed Object 托管对象引用 Managed Object References 托管对象属性收集器 PropertyCollector 连接 vCenter 并获取 MO 最后 前文列表 VMware 虚拟化编程(1) - VMDK/VDDK/VixDiskLib/VADP 概念简析 VM