ansible - 如何从 ansible 事实中提取特定值
问题描述
ansible 新手,学习如何处理任务返回的数据。我正在尝试从以下返回的数据中提取 IP 地址(这是一个片段):
"vmfacts": {
"changed": false,
"failed": false,
"virtual_machines": {
"Alpha-0": {
"cluster": "GPLAB-Compute01",
"esxi_hostname": "gplab-esxi02.gplab.com",
"guest_fullname": "Other Linux (64-bit)",
"ip_address": "192.168.0.1",
如果我跑
- debug:
var: vmfacts.virtual_machines
我得到了完整的虚拟机字典,这很好。但是我如何获得 Alpha-0 虚拟机的 IP 地址?我尝试了多种变体来提取价值,但我似乎无法得到它。我相信这很简单!
解决方案
有两种方法可以寻址嵌套字典中的子键。如您所见,可以通过用点分隔每个键来引用子键。然而,这实际上是简写,并且在多种情况下它不起作用。
我猜你已经尝试了点方法,并且遇到了问题,因为“Alpha-0”包含一个“-”,这是 YAML 中的一个重要字符,用于标识列表项。
长格式版本是用['']
(如果您使用包含密钥名称的变量,则不需要单引号)包装每个密钥,因此在您的情况下,这应该有效:
- debug:
var: vmfacts['virtual_machines']['Alpha-0']['ip_address']
推荐阅读
- android - android如何使用磁力计检测与另一个android的接近度
- python - 如何从表格图像中删除标题
- azure - Azure AD 应用程序 API 权限中未授予 API 权限状态警告
- regex - 正则表达式量词多于一组
- c++ - 为什么 count_if 给我文本总数
- ruby-on-rails - 从异步(默认)执行 MessageBroadcastJob 时出错:ArgumentError(参数数量错误(给定 1,预期 2))
- spring - Spring Cloud Stream:如果enableAutoCommitOnError = true,是否保证在方法注释@StreamListener(“errorChannel”)之后发生提交调用?
- android - Android:BitmapFactory 在从 ByteArray 解码时更改图像的尺寸
- neo4j - 用一个包含被替换节点标签的 Realtionship 替换一个关系节点->关系结构
- c++ - c ++中的快速排序以及我是如何到达这里的