【问题标题】:Fetch the values using debug module in ansible..!使用 ansible 中的调试模块获取值..!
【发布时间】:2018-12-04 08:43:46
【问题描述】:
register: dnsfact 
- debug: var=dnsfact.ansible_facts.azure_dnszones[0].name

如果我像上面那样调试,我会得到以下输出:

ok: [openshift-infra01.example.net] => {
    "dnsfact.ansible_facts.azure_dnszones[0].name": "226********"
  • debug: var=dnsfact.ansible_facts.azure_dnszones[1].name > 这会给我两个值。

  • debug: var=dnsfact.ansible_facts.azure_dnszones[2].name > 这会给我三个值。

如果我想打印所有的值,我需要传递哪个值?我试过dnszones[:]dnszones[':']。但我无法获取值。

请在下面找到实际输出。

 "dnsfact.ansible_facts.azure_dnszones": [
         {
             "etag": "00000002-0000-0000-9ed1-be810a8bd401",
             "id": "/subscription*****/dnszones/226.10.in-addr.arpa",
             "location": "global",
             "name": "226.10.in-addr.arpa",

我们试图从这个输出中过滤“名称”​​。

【问题讨论】:

  • @nwinkler 输出如下。 “dnsfact.ansible_facts.azure_dnszones”:[{“etag”:“00000002-0000-0000-9ed1-be810a8bd401”,“id”:“/subscriptions/********/resourceGroups/exp1/providers/Microsoft .Network/dnszones/226.10.in-addr.arpa", "location": "global", "name": "226.10.i*******",
  • 在问题本身中添加。 @nwinkler
  • 您在问题中添加的数据不完整 - 对象未关闭,数组中只有一项不完整。 azure_dnszones[2] 之类的东西不适用于上述数据。
  • 我想说的是,如果我给 - debug: var=dnsfact.ansible_facts.azure_dnszones[0].name,这只是过滤一个值。在我的环境中,我有很多子集。在每个子集中,我必须过滤名称的值。 @nwinkler
  • 请提供一个例子——没有完整的例子很难回答你的问题。

标签: shell azure scripting ansible coding-style


【解决方案1】:

你会想要map jinja2 filter:

- debug:
    msg: "{{ dnsfact.ansible_facts.azure_dnszones | map(attribute="name") | list }}"

它的工作与 python 的map 所做的几乎相同,但更针对属性提取,而不仅仅是对列表进行任意计算。你(通常)最后需要| list,因为map() 是惰性的并返回一个生成器,如果你只想查看输出,则需要对其进行评估

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-10
    • 2021-06-27
    • 1970-01-01
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多