评论

收藏

[JavaScript] pyvmomi 实现VMware自动化

开发技术 开发技术 发布于:2021-06-23 22:01 | 阅读数:452 | 评论:0

  运维离不开自动化,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 pythonVMware vSphere Python SDKCopyright (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, softwaredistributed 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 andlimitations 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、执行之后输出格式如下: DSC0000.png 参考资料:http://vmware.github.io/pyvmomi-community-samples/#getting-startedhttps://github.com/vmware/pyvmomi
https://pypi.python.org/pypi/pyvmomi
关注下面的标签,发现更多相似文章