Ansible 2.8:访问列表对象元素
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible 2.8:访问列表对象元素相关的知识,希望对你有一定的参考价值。
在Ansible 2.8中,我需要在Ubuntu Server VM上部署和配置Bind 9 DNS。我有一个:
- DNS Ansible角色进行安装和配置,
- 每个域区域的变量列表(如DNS记录类型,域名,dns条目等)。直到这里起作用为止,当我尝试使其接受下一个要求时,问题就会出现:
- 可能在同一个调用中配置了多个域区域,因此,我向其中发送了包含变量组的列表(在2中提到)。
现在,在外壳程序中,我使用1个元素列表来调用它,方法是:
--extra-vars ""dns_entry_conf":
[domain=example.gal ip=192.168.167.166
nameserver1=example.gal nameserver1_ip=192.168.167.164
dns_record1_type=A ...]"
在角色内,roles/dns/tasks/configure.yml
文件接收到正确的值,但是后面的文件却没有:它说“列表对象没有属性”,我在configure.yml文件中开始调试,但是我不确定如何访问列表对象项:
---
- debug:
msg: "dns_entry_conf"
- debug:
msg: "dns_entry_conf | json_query(\"domain\") "
第一行会打印它应该显示的内容,但是第二行却不显示...如何获取值
ASK [dns : debug] **********************************************************************************
task path: /etc/ansible/roles/dns/tasks/configure.yml:2
ok: [ubuntuServer16_test] =>
"msg": [
"domain=example.gal ip=192.168.167.166 nameserver1=example.gal nameserver1_ip=192.168.167.164
dns_record1_type=A ...
]
TASK [dns : debug] **********************************************************************************
task path: /etc/ansible/roles/dns/tasks/configure.yml:4
ok: [ubuntuServer16_test] =>
"msg": ""
[在调试中,尝试使用味精:" dns_entry_conf.domain "
," dns_entry_conf.0 "
,"dns_entry_conf | json_query(\"domain\") "
," dns_entry_conf.list | json_query('[*].domain') "
和其他在语法上错误的错误,但从未输出我想要的内容。
[可能还有更多错误的信息(我不是Ansible专家),但是,目前,仅尝试一个调试和修复一个问题,所以,我只想知道如何访问“ dns_entry_conf.domain”项目,请 ...一些想法?
Option1:带有如下所示的额外变量:
--extra-vars '"dns_entry_conf":"domain":example,"ip":1.2.3.4'
Playbook:
- debug:
msg: "dns_entry_conf.domain"
输出:
确定:[本地主机] => “ msg”:“示例”
Option2:带有如下所示的额外变量:
--extra-vars '"dns_entry_conf":["domain":example,"ip":1.2.3.4]'
在Playbook中如下所示:
- debug:
msg: "dns_entry_conf[0].domain"
输出:
确定:[本地主机] => “ msg”:“示例”
选项3:在剧本中传递变量。
vars:
dns_entry_conf:
domain: example
ip: 1.2.34.4
tasks:
- debug:
msg: "dns_entry_conf.domain"
输出:
确定:[本地主机] => “ msg”:“示例”
以上是关于Ansible 2.8:访问列表对象元素的主要内容,如果未能解决你的问题,请参考以下文章
Ansible 2.8 角色 - 使用 vars/main 目录