gpt4 book ai didi

ruby - 使用 API (rbvmomi) 获取所有虚拟机

转载 作者:数据小太阳 更新时间:2023-10-29 08:20:27 25 4
gpt4 key购买 nike

我想查看我 vcenter 中所有虚拟机的一些信息,现在我有:

require 'rbvmomi'

vim1 = RbVmomi::VIM.connect host: 'vcenter.foo.tld', ssl: true, insecure: true, user: 'keith', password: 'NSABACKDOOR'
dc1 = vim1.serviceInstance.find_datacenter("Datacenter Name") or fail "datacenter not found"

def list_vms(dc,vim)
dc.vmFolder.children.each do |vm|
if vm.is_a? RbVmomi::VIM::VirtualMachine
puts vm.name
end
end
end

list_vms(dc1,vim1)

但这只会返回一个数据中心的主机(即放置主机名),并且只会返回文件夹层次结构中顶层的主机。无论身在何处,我都需要它们。

最佳答案

差不多了 - 我遇到了完全相同的问题 - 你的循环正在跳过子文件夹。要获取所有 VM,您需要向下递归遍历它们。尝试这样的事情(从我自己的工作代码中提取):

def vms(folder) # recursively go thru a folder, dumping vm info
folder.childEntity.each do |x|
name, junk = x.to_s.split('(')
case name
when "Folder"
vms(x)
when "VirtualMachine"
puts x.name
else
puts "# Unrecognized Entity " + x.to_s
end
end
end

这显然是从数据中心的顶级文件夹开始的,而不是 DC 本身。我的设置中实际上并没有多个数据中心——但 find_datacenter 似乎不支持类似 .each 的东西——所以你可能想把它包装在一个循环中,比如:

 dcs = ['firstdc', 'seconddc', 'thirddc']
dcs.each do |dc|
vms(vim1.serviceInstance.find_datacenter(dc).vmFolder)
end

关于ruby - 使用 API (rbvmomi) 获取所有虚拟机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19812868/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com