目录

前言

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

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

vSphere Web Service SDK

Install osls.vmware

  1. cd /opt/stack
  2. git clone https://github.com/openstack/oslo.vmware --branch stable/liberty
  3. cd oslo.vmware
  4. sudo pip install -r requirements.txt -e .

测试连接 vCenter

vim vsdk.py

  1. from oslo_vmware import api
  2. from oslo_vmware import vim_util
  3. # Get a handle to a vSphere API session
  4. session = api.VMwareAPISession(
  5. 'vCenter_IP',
  6. 'vCenter_username',
  7. 'vCenter_password',
  8. 1,
  9. 0.1)
  10. # Get MO of type "HostSystem"
  11. result1 = session.invoke_api(
  12. vim_util,
  13. 'get_objects',
  14. session.vim, 'HostSystem', 100)
  15. print result1
  16. print "="*50
  17. # Get information by properties of MO object
  18. rep2 = session.invoke_api(vim_util,'get_object_properties_dict',session.vim,
  19. result1.objects[0].obj,'vm')
  20. print "*"*50
  21. print rep2

How to use the vSphere Web Service SDK

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

  1. # 建立与 vCenter 的 Session 连接。
  2. In [83]: session = api.VMwareAPISession(
  3. '200.X.102.7',
  4. 'root',
  5. 'vmware',
  6. 1,
  7. 0.1)
  8. # session.invoke_api() method of oslo_vmware.api.VMwareAPISession instance
  9. # :param module: module corresponding to the VIM API call
  10. # :param method: method in the module which corresponds to the VIM API call
  11. # :param args: arguments to the method
  12. # :param kwargs: keyword arguments to the method
  13. # :returns: response from the API call
  14. # :raises: VimException, VimFaultException, VimAttributeException,
  15. # VimSessionOverLoadException, VimConnectionException
  16. # 调用 API 获取一个 MO, 使用这个 MO 来进一步获取别的信息
  17. # Return instance of suds.sudsobject.RetrieveResult
  18. In [83]: hostSystem = session.invoke_api(vim_util, # Module
  19. 'get_objects', # Method
  20. session.vim,
  21. 'HostSystem', # Managed Object(SDK)
  22. 100)
  23. # hostSystem.objects[0].obj ==
  24. # (obj){
  25. # value = "host-9"
  26. # _type = "HostSystem"
  27. # }
  28. # 有 _type 属性,可以在 SDK 中找到 "HostSystem" 的 Description,
  29. # 并且根据 Description 提供的 Properties 进一步获取别的信息。 EG. vm
  30. In [83]: vmResponse = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
  31. hostSystem.objects[0].obj,
  32. 'vm')
  33. # vmResponse['vm'].ManagedObjectReference[0] ==
  34. # (ManagedObjectReference){
  35. # value = "vm-15"
  36. # _type = "VirtualMachine"
  37. # },
  38. # 有 _type 属性,可以在 SDK 中找到 "VirtualMachine" 的 Description,
  39. # 并且根据 Description 提供的 Properties 进一步获取别的信息。 EG. summary
  40. In [83]: summaryResponse = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
  41. vmResponse['vm'].ManagedObjectReference[0],
  42. 'summary')
  43. # 当 Output 非常多时,可以使用 IPython 的特殊用法来实现过滤(Python 和 Shell 结合)。
  44. In [118]: test = summaryResponse[0]
  45. In [117]: !echo '$test' | grep '_type'
  46. _type = "VirtualMachine"
  47. _type = "VirtualMachine"
  48. _type = "HostSystem"
  49. # summaryResponse[0].obj ==
  50. # (obj){
  51. # value = "vm-15"
  52. # _type = "VirtualMachine"
  53. # }
  54. # 有 _type 属性,可以在 SDK 中找到 "VirtualMachine" 的 Description,
  55. # 并且根据 Description 提供的 Properties 进一步获取别的信息。 EG. config
  56. In [126]: configResponse = session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
  57. summaryResponse[0].obj,
  58. 'config')
  59. # 可以继续获取别的信息
  60. In [205]: text = configResponse
  61. In [206]: !echo '$text' | grep _type
  62. _type = "Datastore"
  63. _type = "Datastore"
  64. _type = "Network"
  65. _type = "Network"
  66. _type = "Network"
  67. _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:

  1. session.invoke_api(vim_util, 'get_object_properties_dict', session.vim,
  2. hostSystem.objects[0].obj, # hostSystem.objects[0].obj 对象中含有 _type 属性, 其值为 HostSystem
  3. 'vm') # 在 SDK 中找到 HostSystem MO type ,提供了Properties: 'vm'

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

  1. python 使用pymssql连接sql server数据库

    python 使用pymssql连接sql server数据库   #coding=utf-8 #!/usr/bin/env python#------------------------------ ...

  2. Python中HTTPS连接

    permike 原文 Python中HTTPS连接 今天写代码时碰到一个问题,花了几个小时的时间google, 首先需要安装openssl,更新到最新版本后,在浏览器里看是否可访问,如果是可以的,所以 ...

  3. 无法连接vCenter Server清单https://IP:10443

    VMware vCenter Server服务器安装系统的时候使用一个IP,安装完VMware vCenter后来更换了另外一个IP,当使用vSphere Web Client登陆VMware vCe ...

  4. python使用stomp连接activemq

    一.安装ActiveMQ服务 1. 当使用windows时,安装参考:https://blog.csdn.net/WuLex/article/details/78323811 启动:运行activem ...

  5. boto3--通过Python的SDK连接aws

    通过Python的SDK连接aws 参考: https://aws.amazon.com/cn/developers/getting-started/python/ aws上生成访问密钥 ID 和私有 ...

  6. 【Python】Windows平台下Python、Pydev连接Mysql数据库

    Mysql数据库是跨平台的,不是说Python一定就要连接Mongodb. Python连接Mysql数据库是非常easy的. 首先,你要配置好Python的开发环境,详见<[Python]Wi ...

  7. python使用sqlalchemy连接pymysql数据库

    python使用sqlalchemy连接mysql数据库 字数833 阅读461 评论0 喜欢1 sqlalchemy是python当中比较出名的orm程序. 什么是orm? orm英文全称objec ...

  8. python:字符串的连接

    python中有很多字符串连接方式,今天在写代码,顺便总结一下: 最原始的字符串连接方式:str1 + str2 python 新字符串连接语法:str1, str2 奇怪的字符串方式:str1 st ...

  9. python 和 mysql连接

    python 和 mysql连接 虫师教程:http://www.cnblogs.com/fnng/p/3565912.html 其他教程pymysql:http://www.cnblogs.com/ ...

随机推荐

  1. Flask开发系列之模板

    Flask开发系列之模板 本文对<FlaskWeb开发:基于python的Web应用开发实战>模板一节做的总结. Jinja2模板引擎 模板 模板是一个包含响应文本的文件,其中包含用占位变 ...

  2. Java读取二进制文件的方式

    public static void readFile(String fileName){ File file = new File(fileName); if(file.exists()){ try ...

  3. scp 自动带密码参数复制文件到主机

    一.安装sshpass工具 [root@zabbix_server scripts]# yum install sshpass 二.运行 [root@zabbix_server scripts]# s ...

  4. poj1419 Graph Coloring 最大独立集(最大团)

    最大独立集: 顶点集V中取 K个顶点,其两两间无连接. 最大团: 顶点集V中取 K个顶点,其两两间有边连接. 最大独立集=补图的最大团最大团=补图的最大独立集 #include<iostream ...

  5. [每日一学]apache camel简介

    apache camel 是轻量级esb框架.如下是它的架构图: 它有几个比较重要的概念就是: 1.endpoint,所谓的endpoint,就是一种可以接收或发送数据的组件.可以支持多种协议,如jm ...

  6. python基础练习题7

    1.创建Person类,属性有姓名.年龄.性别,创建方法personInfo,打印这个人的信息2.创建Student类,继承Person类,属性有学院college,班级class,重写父类perso ...

  7. 微信支付之扫码支付、公众号支付、H5支付、小程序支付相关业务流程分析总结

    前言 很久以来,一直想写一篇微信支付有关的总结文档:一方面是总结自己的一些心得,另一方面也可以帮助别人,但是因种种原因未能完全理解透彻微信支付的几大支付方式,今天有幸做一些总结上的文章,也趁此机会,将 ...

  8. 漫谈 MyCat 配置系统

    上篇文章<MyCat 启蒙:分布式系统的数据库架构演变>中,我们通过一个项目从零到百万级访问的变化,展示了这个过程中的数据层架构变化.其中说到了数据层架构变化所带来的三个问题: 读写数据源 ...

  9. 报表解决方案Telerik Reporting发布R2 2019 SP1|支持MS Access

    Telerik Reporting拥有直观.无代码的Win.网页与PDF报表的创建功能,直观的设计与具有特定风格的报表,无代码数据打包.向导.语法开发工具.自动操作.分类整理.过滤.有条件格式化.转化 ...

  10. react axios 跨域问题

    周末又是补充知识点的时候了,用了react axios 跨越问题,貌似是要比vue 稍微麻烦一点 它请求http好像是没有问题的,但是https还是有跨域问题的, 我用的刚好是create-react ...