Ansible 2.8:访问列表对象元素

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ansible 2.8:访问列表对象元素相关的知识,希望对你有一定的参考价值。

在Ansible 2.8中,我需要在Ubuntu Server VM上部署和配置Bind 9 DNS。我有一个:

  1. DNS Ansible角色进行安装和配置,
  2. 每个域区域的变量列表(如DNS记录类型,域名,dns条目等)。直到这里起作用为止,当我尝试使其接受下一个要求时,问题就会出现:
  3. 可能在同一个调用中配置了多个域区域,因此,我向其中发送了包含变量组的列表(在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 目录

在 Fedora 中获取最新的 Ansible 2.8 | Linux 中国

使用视图绑定访问另一个活动的 UI 元素

13 个非常有用的 Python 代码片段

如何访问 MainActivity() 中的片段元素?

在ansible模板中使用动态组名称