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,如需转载请自行联系原作者





优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/548151

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。