在我们拥有 VCSA(Vcenter Server Appliance)之前,我们有一个 Windows Vcenter Server。
我们在本地安装了 PowerCLI。
在那里,我们可以说
Get-VM -Name * | Sort-Object | %{
....
获取在 Vcenter 中注册的所有虚拟机的列表。
现在我们有了设备。
我也安装了 vMA(管理助手)。
我注册了 vcenter 设备,并成功连接到它,但无法像上面那样简单地检索虚拟机列表。
它总是希望我连接到单个 ESXi 主机来执行列表。
现在对我来说这似乎是倒退了一步。
你会如何做呢?
你会使用 vMA 吗?也许使用 vCLI?或者坚持使用 PowerCLI,但那样的话,我又需要安装一台 Windows 机器来运行我的脚本了.....
答案1
我没有使用过 vma,但我想它已经为你安装了 vmware Perl SDK(根据这篇文章几乎是贫民窟它应该)。其中有很多实用程序,我认为这个就是你正在寻找的:
如果您不想每次都输入凭据,那么您需要设置凭证存储第一的。
[编辑] 实际上,我刚刚尝试过,虽然它有点用,但速度很慢,因为它会获取每个实体的所有信息。效率不高。所以我只写了一个很小的脚本,这就是它所需要的:
#!/usr/bin/perl
use strict;
use warnings;
use VMware::VIRuntime;
# read/validate options and connect to the server
Opts::parse();
Opts::validate();
Util::connect();
my $vm_views =
Vim::find_entity_views(view_type => 'VirtualMachine',
properties => ['name'], );
foreach my $view ( sort @$vm_views) {
print $view->{'name'}, "\n";
}
# disconnect from the server
Util::disconnect();
这假定您有一个包含正确信息的 $HOME/.visdkrc 文件:
VI_PROTOCOL=https
VI_SERVER=fqdn
VI_SERVICEPATH=/sdk
VI_USERNAME=username
VI_PASSWORD=pwd
正如您所说,您有 vma,所有库应该已经为您准备好了。此脚本在 1 秒内获取了所有 vm(仅获取其名称)。如果您没有 CA,并且您的虚拟中心有自签名证书,则应首先设置此环境变量,否则运行脚本时 Perl lwp 库将崩溃:
export PERL_LWP_SSL_VERIFY_HOSTNAME=0
答案2
我会使用安装了 PowerCLI 的 Windows PC 或服务器...PowerCLI 是 VMware 的发展方向,因此期望您有一个可用的 Windows 系统来与其交互。
因此,虽然可以在没有 Windows 依赖项的情况下安装 VMware,但事实证明 Windows 实际上是一个依赖项 :)
您还可以使用vCenter API,取决于您计划对虚拟机列表执行的操作……
答案3
还有另一种解决方案:您可以简单地访问直接使用 vCenter DB对于这种东西。
作为参考,这里有一个可以使用 postgres 客户端直接在 VCSA 上执行的单行命令:
/opt/vmware/vpostgres/1.0/bin/psql --pset pager=off --pset footer=off --command 'SELECT name FROM vpx_vm_config_info ORDER BY name;' -U vc VCDB | tail -n +3 | head -n -1 | sed 's/^[ ]*//g'
我分别使用 head、tail 和 sed 来过滤掉令人讨厌的标题、空行和行首的空格。也许有更优雅、更简短的方法来做到这一点,但我不在乎。
优点:
- 无需额外的 VM(vMA)即可获取 VM 列表。
- 快速地。
缺点:
- 有点不合常理。
- 而且很可能得不到支持。