【问题标题】:Ansible : Jinja reference in a dynamic inventoryAnsible:动态库存中的 Jinja 参考
【发布时间】:2017-03-06 19:39:03
【问题描述】:

所以我使用的是基于 group_vars 的剧本,用于为各种网站提供 IIS 设置。

group_vars 由 2 个主要 dicts 组成(其中一个包含 dicts 列表的复杂 dicts 列表。)

复杂的引用了 Jinja2 中 firstdict 中的变量(例如 {{ firstdic.sitename }})

这与 group_vars 完美配合,引用由 Ansible 中的 jinja2 引擎解析。 但是当涉及到动态库存时,当从第一个字典中引用 vars 时,整个字典是未设置的。

这里有一些 JSON(来自我的动态库存):

"firstdict": { "sitename": "mysitename" }

"complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}}

使用此 JSON 时,调试模块会发现未定义 complexdict。

但是,jinja2 部分已正确解析并执行,因为这会起作用。

动态库存输入:

"complexdict": {"someotherdict": {"sitepath": "{{ \"foo\" }}"}}

调试模块返回:

  "complexdict": {
        "someotherdict": {
            "sitepath": "foo"
        }
    }

是否存在变量优先级问题?还有什么我应该知道为什么它不能这样工作的吗?

感谢您的帮助,Ansible 大师 :)

PS:我已经尝试了很多经验转义,转义花括号,双引号等等。

【问题讨论】:

    标签: ansible jinja2 ansible-inventory


    【解决方案1】:

    为我工作:

    ./inventory/test.sh:

    #!/bin/bash
    
    cat << EndOfJSON
    {
        "test"   : {
        "hosts"  : [ "localhost" ],
        "vars"   : {
          "firstdict": { "sitename": "mysitename" },
          "complexdict": {"someotherdict": {"sitepath": "{{ firstdict.sitename }}"}}
            }
        }
    }
    EndOfJSON
    

    ./playbook.yml

    ---
    - hosts: test
      connection: local
      gather_facts: no
      tasks:
        - debug:
            var: complexdict
    

    输出:

    TASK [debug] *******************************************************************
    ok: [localhost] => {
        "complexdict": {
            "someotherdict": {
                "sitepath": "mysitename"
            }
        }
    }
    

    如果不是这样,请用completeMCVE更新您的问题。

    【讨论】:

    • 是的,你是对的。这完美地工作。问题在于 json 中的一些转义字符。非常感谢您的帮助!
    猜你喜欢
    • 2022-09-29
    • 1970-01-01
    • 2018-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 1970-01-01
    • 2020-02-24
    相关资源
    最近更新 更多