首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

使用 Perl 进行虚拟化环境的自动化管理(2)

使用 Perl 进行虚拟化环境的自动化管理(2)

使用 vSphere SDK 管理 VMware 环境上一节介绍的 libvirt 是一套通用的 API,因此也可以用来管理 VMware 环境。但是在这方面 VMware 本身提供的 vSphere SDK 的功能则更具针对性。下面我们将学习如何使用 vSphere SDK for Perl 来管理 VMware 虚拟化环境。
搭建 vSphere SDK for Perl 开发环境可以从 找到最新的 vSphere SDK for Perl。读者需要注册 VMware 帐号,登录后根据需要选择合适的平台版本下载。
在开始使用 vSphere SDK for Perl 之前,需要确保开发环境与 vSphere 之间的连接正常工作。我们可以通过访问 Managed Object Browser (MOB) 来测试连接状况:
1
https://<vCenter_IP>/mob




MOB 是一个基于 Web 的服务器端 (ESX/vCenter) 程序,用以浏览服务器端各种对象的属性方法等。如果浏览器能正确显示下面的页面,则说明开发环境与 vSphere 之间的连接正常。
图 1. 使用 MOB 检查连接状态确保与 VMware 环境连接正常后,我们需要安装 vSphere SDK for Perl。安装前确保其所依赖的 OpenSSL/LibXML2/e2fsprogs 等工具已经安装。vSphere SDK for Perl 的安装过程非常简单,解压安装包,执行 vmware-install.pl,接受默认参数即可:
1
2
[root@BJGSSLA]# tar – zxvf VMware-vSphere-CLI-4.X.X-XXXXX.i386.tar.gz
[root@BJGSSLA]# /<extract_location>/sudo vmware-vsphere-cli-distrib/vmware-install.pl




安装完成后可运行 vSphere SDK for Perl 的一些示例程序来测试开发环境是否可用,例如 datacenterlisting.pl。此程序可获得 ESX/ESXi 主机以及这些主机上虚机的列表:
1
2
3
4
[root@BJGSSLA]# cd /usr/share/doc/vmware-vcli/samples/discovery/   
[root@BJGSSLA]# perl datacenterlisting.pl --server <vCenter_IP> \
--datacenter <datacenter_name> \
--username <user_name> --password <password>




在本文的实验环境中,该脚本的运行结果为:
1
2
3
4
5
6
7
8
9
[root@BJGSSLA]# perl datacenterlisting.pl --server 9.115.66.131 --datacenter MyDC \
--username administrator --password passw0rd
Hosts found:
1: 9.115.208.49

VM's found:
1: WIN2K3
2: WIN2K8R2
3: RHEL5




与 VMware 环境交互的一般流程vSphere SDK for Perl 和 vSphere 环境之间的交互流程大致分以下 4 步:
  • 验证命令行参数
  • 连接远程服务器,传递参数
  • 执行用户定义操作,如从远程服务器端查询对象、收集服务器端对象的信息、获取或者修改远程服务器端对象状态等
  • 断开连接
了解此交互流程将有助于我们理解示例程序的逻辑,更加清晰的组织自己开发的自动化脚本。下面通过解析一段简单的代码来说明这个交互过程。
清单 2. simple_flow.pl
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
#! /usr/bin/perl -w
use strict;
use warnings;

# 导入 vSphere SDK for Perl 的运行支持模块
# 此模块用来完成服务器端 - 客户端数据映射、载入客户端和服务器端之间的交互函数等
use VMware::VIRuntime;

# hash 结构 %opts 存放自定义命令行参数
my %opts =(
       entity => {
               type => "=s",
               variable => "VI_ENTITY",
               help => "ManagedEntity type: HostSystem, etc",
               required => 1,
       },
);

# vSphere SDK for Perl 为所有脚本提供了一些基本的命令行参数,如 --server,--url 等
# Opts::add_options 方法用以添加用户自定义参数
Opts::add_options(%opts);

# 解析命令行参数
Opts::parse();

# 验证命令行参数
Opts::validate();

# 连接远程服务器,vCenter 或 ESX server
Util::connect();

# 提取命令行参数 entity 的值
my $entity_type = Opts::get_option('entity');

# 根据 entity 值查询服务器端对象,
# Vim::find_entity_views 返回服务器端对象对应的 Perl 视图
my $entity_views = Vim::find_entity_views(view_type=>$entity_type);

# 输出服务器端对象 Perl 视图的信息,如类型和名称等
foreach my $entity_view (@$entity_views) {
       my $entity_name = $entity_view->name;
       Util::trace(0, "Found $entity_type: $entity_name\n");
}

# 断开与远程服务器的连接
Util::disconnect();




simple_flow.pl 展示了 vSphere SDK for Perl 脚本的一般结构,同时也演示了 Opts 包、Util 包和 Vim 包中一部分常见函数的用法。simple_flow.pl 在本文的实验环境中的运行结果为:
1
2
3
4
5
6
7
8
[root@BJGSSLA]# ./simple_flow.pl --server 9.115.66.131 --username administrator \
--password passw0rd --entity HostSystem
Found HostSystem: 9.115.208.49
[root@BJGSSLA]# ./simple_flow.pl --server 9.115.66.131 --username administrator \
--password passw0rd --entity VirtualMachine
Found VirtualMachine: WIN2K3
Found VirtualMachine: WIN2K8R2
Found VirtualMachine: RHEL55

返回列表