pyvmomi 实现VMware自动化

简介:

    运维离不开自动化,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。

安装如下:

1
2
3
4
$ 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:

1
$ sudo  python setup.py  install

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/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  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




      本文转自Jx战壕  51CTO博客,原文链接:http://blog.51cto.com/xujpxm/1742101,如需转载请自行联系原作者





相关文章
|
API 开发工具 虚拟化
pyVmomi操作VMware
pyVmomi操作VMware
1793 0
|
虚拟化 Python Linux
用python(pyvmomi)管理vmware ESXi/vCenter
自动化运维,用python(pyvmomi)管理vmware ESXi/vCenter
14900 0
|
4月前
|
Linux 虚拟化 数据安全/隐私保护
银河麒麟V10 VMWare安装保姆级教程
银河麒麟V10 VMWare安装保姆级教程
4207 5
银河麒麟V10 VMWare安装保姆级教程
|
1月前
|
存储 安全 Linux
VMware安装CentOS7
【11月更文挑战第11天】本文详细介绍了在 VMware 中安装 CentOS 7 的步骤,包括准备工作、创建虚拟机、配置虚拟机硬件和安装 CentOS 7。具体步骤涵盖下载 CentOS 7 镜像文件、安装 VMware 软件、创建和配置虚拟机硬件、启动虚拟机并进行安装设置,最终完成 CentOS 7 的安装。在安装过程中,需注意合理设置磁盘分区、软件选择和网络配置,以确保系统的性能和功能满足需求。
186 0
|
2月前
|
Linux API 虚拟化
VMware WorkStation Pro 15.5(低版本安装) 教学用
VMware WorkStation Pro 15.5(低版本安装) 教学用
224 5
|
5月前
|
Linux 虚拟化 iOS开发
部署06--MacOS安装VMware Fusion安装
部署06--MacOS安装VMware Fusion安装
|
5月前
|
Linux 虚拟化 数据安全/隐私保护
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
部署05-VMwareWorkstation中安装CentOS7 Linux操作系统, VMware部署CentOS系统第一步,下载Linux系统,/不要忘, CentOS -7-x86_64-DVD
|
3月前
|
Linux 虚拟化 Windows
完美解决:重新安装VMware Tools灰色。以及共享文件夹的创建(centos8)
这篇文章提供了解决VMware Tools无法重新安装(显示为灰色)问题的步骤,并介绍了如何在CentOS 8上创建和配置VMware共享文件夹。
完美解决:重新安装VMware Tools灰色。以及共享文件夹的创建(centos8)
|
2月前
|
Linux 虚拟化
vmware虚拟机安装2024(超详细)
vmware虚拟机安装2024(超详细)
365 6
|
2月前
|
虚拟化
vmware安装OpenEuler系统
vmware安装OpenEuler系统