virsh - 解析 virsh 输出
问题描述
有没有办法强制virsh
以可解析的方式打印信息?喜欢json
?
我想编写一个单行 shell 命令来获取 VM 的 IP 地址,但是 virsh 打印出来的方式对脚本不是很友好:
# virsh domifaddr myvm
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet1 52:54:00:b9:58:64 ipv4 192.168.130.156/24
我正在寻找一种方法来强制它至少不打印标题,这样我就可以轻松地从输出中获取“192.168.130.156”
这是我能做的最好的:
# virsh -q domifaddr myvm | awk '{print $4}' | cut -d/ -f 1
192.168.130.156
解决方案
一种选择是安装qemu-guest-agent
在您要从中提取 IP 信息的域上。
从那里,您可以在主机上执行以下命令以获取 JSON 格式的详细网络接口列表:
ubuntu@host:~$ virsh qemu-agent-command my-guest '{"execute":"guest-network-get-interfaces"}'
{"return":[{"name":"lo","ip-addresses":[{"ip-address-type":"ipv4","ip-address":"127.0.0.1","prefix":8},{"ip-address-type":"ipv6","ip-address":"::1","prefix":128}],"statistics":{"tx-packets":22,"tx-errs":0,"rx-bytes":2816,"rx-dropped":0,"rx-packets":22,"rx-errs":0,"tx-bytes":2816,"tx-dropped":0},"hardware-address":"00:00:00:00:00:00"},{"name":"eth0","ip-addresses":[{"ip-address-type":"ipv4","ip-address":"1.2.3.4","prefix":22},{"ip-address-type":"ipv6","ip-address":"abcd::1234:ee:ab12:e31d","prefix":64}],"statistics":{"tx-packets":11231,"tx-errs":0,"rx-bytes":40717370,"rx-dropped":0,"rx-packets":19744,"rx-errs":0,"tx-bytes":890354,"tx-dropped":0},"hardware-address":"01:02:00:03:04:05"}]}
您可以从那里解析您的 json。
推荐阅读
- c - STM32 Discovery可以区分短按和长按按钮吗
- javascript - JSON.Stringfy 方法的替换参数不适用于嵌套对象
- compiler-construction - 列出 Clang 查询匹配器
- php - 将两个数组组合成一个新数组并在其中执行操作
- android - 缺少 Android SDK
- json - 如何在 Kylo 中为 JSON 输入创建提要?
- python - 使用熊猫随机删除具有条件的行
- javascript - SigmaJS - “未定义 sigma”错误
- java - Java比较数组列表的特定对象值
- reactjs - 新的 React Context API + LocalStorage + Subscribe(替代 Redux)