为了账号安全,请及时绑定邮箱和手机立即绑定

pyvmomi 实现VMware自动化

标签:
Python


    运维离不开自动化,python的发展更是给自动化注入了一剂兴奋剂;还记得当时公司年会,大家都在嗨皮,苦逼的运维攻城狮还在卖力的给一个大客户手动开通500台云主机的情形,现在想想好傻O(∩_∩)O哈哈~。如果早点接触pyVmomi,就不至于这么苦逼了。

    pyVmomi is the Python SDK for the VMware vSphere API that allows you to manage ESX, ESXi, and vCenter.官方如是说。自己这里写篇博客整理一下,也希望对还停留在手工时代的同学有所帮助。

坏境配置:

1、网络环境:

    安装pyvmomi的server和VMware vCenter 网络打通;

2、系统环境:

    pyvmomi用pip安装,所以需要有python和pip;pyvmomi 6.0.0需要的python版本支持为2.7, 3.3 和 3.4, 支持的vSphere 版本为:6.0, 5.5, 5.1 和 5.0。

安装如下:

$sudo apt-get install python-pip

$sudo pip install pyvmomi

$sudo pip freeze | grep pyvmomi     #查看安装的pyvmomi版本,现在是6.0版本

pyvmomi==6.0.0        #如果已经安装过,升级用pip install --upgrade pyvmomi

或者也可以下载源码包安装,https://github.com/vmware/pyvmomi.git:

$sudo python setup.py install

3、pyvmomi提供了一些社区样本项目,可以参考编写自己的代码:

git clone https://github.com/vmware/pyvmomi-community-samples.git

4、下面是 pyvmomi给出的获取所有vm的脚本:

#!/usr/bin/env python

# VMware vSphere Python SDK

# Copyright (c) 2008-2015 VMware, Inc. All Rights Reserved.

#

# Licensed under the Apache License, Version 2.0 (the "License");

# you may not use this file except in compliance with the License.

# You may obtain a copy of the License at

#

#     http://www.apache.org/licenses/LICENSE-2.0

#

# Unless required by applicable law or agreed to in writing, software

# distributed under the License is distributed on an "AS IS" BASIS,

# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

# See the License for the specific language governing permissions and

# limitations under the License.

"""

Python program for listing the vms on an ESX / vCenter host

"""

from __future__ import print_function

from pyVim.connect import SmartConnect, Disconnect

import argparse

import atexit

import getpass

import ssl

def GetArgs():

   """

   Supports the command-line arguments listed below.

   """

   parser = argparse.ArgumentParser(

       description='Process args for retrieving all the Virtual Machines')

   parser.add_argument('-s', '--host', required=True, action='store',

                       help='Remote host to connect to')

   parser.add_argument('-o', '--port', type=int, default=443, action='store',

                       help='Port to connect on')

   parser.add_argument('-u', '--user', required=True, action='store',

                       help='User name to use when connecting to host')

   parser.add_argument('-p', '--password', required=False, action='store',

                       help='Password to use when connecting to host')

   args = parser.parse_args()

   return args

def PrintVmInfo(vm, depth=1):

   """

   Print information for a particular virtual machine or recurse into a folder

    with depth protection

   """

   maxdepth = 10

   # if this is a group it will have children. if it does, recurse into them

   # and then return

   if hasattr(vm, 'childEntity'):

      if depth > maxdepth:

         return

      vmList = vm.childEntity

      for c in vmList:

         PrintVmInfo(c, depth+1)

      return

   summary = vm.summary

   print("Name       : ", summary.config.name)

   print("Path       : ", summary.config.vmPathName)

   print("Guest      : ", summary.config.guestFullName)

   annotation = summary.config.annotation

   if annotation != None and annotation != "":

      print("Annotation : ", annotation)

   print("State      : ", summary.runtime.powerState)

   if summary.guest != None:

      ip = summary.guest.ipAddress

      if ip != None and ip != "":

         print("IP         : ", ip)

   if summary.runtime.question != None:

      print("Question  : ", summary.runtime.question.text)

   print("")

def main():

   """

   Simple command-line program for listing the virtual machines on a system.

   """

   args = GetArgs()

   if args.password:

      password = args.password

   else:

      password = getpass.getpass(prompt='Enter password for host %s and '

                                        'user %s: ' % (args.host,args.user))

   context = ssl.SSLContext(ssl.PROTOCOL_TLSv1)

   context.verify_mode = ssl.CERT_NONE

   si = SmartConnect(host=args.host,

                     user=args.user,

                     pwd=password,

                     port=int(args.port),

                     sslContext=context)

   if not si:

       print("Could not connect to the specified host using specified "

             "username and password")

       return -1

   atexit.register(Disconnect, si)

   content = si.RetrieveContent()

   for child in content.rootFolder.childEntity:

      if hasattr(child, 'vmFolder'):

         datacenter = child

         vmFolder = datacenter.vmFolder

         vmList = vmFolder.childEntity

         for vm in vmList:

            PrintVmInfo(vm)

   return 0

# Start program

if __name__ == "__main__":

   main()

5、执行之后输出格式如下:

wKiom1bEU9iRwz2kAACOQ5igs9Q865.png

参考资料:

http://vmware.github.io/pyvmomi-community-samples/#getting-started

https://github.com/vmware/pyvmomi

https://pypi.python.org/pypi/pyvmomi

©著作权归作者所有:来自51CTO博客作者Jx战壕的原创作品,如需转载,请注明出处,否则将追究法律责任


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消