我在 govc govmomi github 页面上找到了以下内容,它允许我通过 MAC 地址搜索虚拟机:
govc object.collect -json -type m / config.hardware.device \
| jq -r '
.
| select(.ChangeSet[].Val.VirtualDevice[].MacAddress == "00:50:56:bc:5e:3c")
| [.Obj.Type, .Obj.Value]
| join(":")
' \
| xargs govc ls -L
请找到随附的 govc 输出片段,应该足够了:
{
"Obj": {
"Type": "VirtualMachine",
"Value": "vm-666"
},
"ChangeSet": [
{
"Val": {
"VirtualDevice": [
{
},
{
"MacAddress": "00:50:56:bc:5e:3c",
}
]
}
}
]
}
我面临的问题是一些MAC包含大写字母,一些小写字母,我不提前知道哪台机器使用哪种方案。 我不知道如何使
==
不区分大小写。
我在 stackoverflow 上找到了建议使用
ascii_downcase
作为过滤器的答案,但我不知道如何应用 ==
。
建议的欺骗语法给了我一系列
explode input must be a string
错误(govc 输出的每行 1 个)。
建议的欺骗语法给了我一系列
错误(govc 输出的每行 1 个)。explode input must be a string
这是因为您的其中一台设备没有
MacAddress
字段,并且 ascii_downcase
仅支持字符串,而不支持 null
。
要解决此问题,您可以使用
// ""
[doc link] 默认为空字符串,然后 then 将其传递给 ascii_downcase
:
govc object.collect -json -type m / config.hardware.device \
| jq -r '
.
| select(.ChangeSet[].Val.VirtualDevice[].MacAddress // "" | ascii_downcase == "00:50:56:bc:5e:3c")
| [.Obj.Type, .Obj.Value]
| join(":")
' \
| xargs govc ls -L