【问题标题】:Ansible template from jinja2来自 jinja2 的 Ansible 模板
【发布时间】:2020-11-25 08:14:54
【问题描述】:

谁能告诉你在输入名为region1a的模板时如何实现输出name1组中所有区域,输入名为region2b的模板时输出name2组中的所有区域

我是这样实现的: 有一个开始模板生成的任务:

      vars:
        AllCountry:
          - name1
          - name2
        name1:
          - region1a
          - region1b 
        name2:
          - region2a
          - region2b
  tasks:
  - name:
    template:
      src: "regions.j2"
      dest: "{{ item }}.conf"
    loop:
      - region1a
      - region2b

---regions.j2---

regions [{%for count in name1%} "my country = {{count}}", {%end for %}]

这给出了所需的输出,但这只是因为它明确指定了要输出的名称(1 或 2)

regions "my country = region1a", "my country = region1b"

对于循环中指定的每个值,必须生成一个模板配置文件。 当您在循环中指定值时,region1a 和 region1b 模板应该在 region1a.conf 的配置文件中只生成一行

regions "my country = region1a", "my country = region1b"

对于 region1b,在 region1b.conf 的配置文件中只生成一行

regions "my country = region1a", "my country = region1b"

用户 β.εηοιτ.βε 提出了一个更优化的结构。方便的话可以用一下。

vars:
countries:
  country1:
    regions:
      - region1
      - region2
      - region3
    capital: region1
  country2:
    regions:
      - region4
      - region5
    capital: region5

【问题讨论】:

  • 当你的loop 中的itemregion2b 时会发生什么?
  • 循环遍历所有地区,得到类似这样的结论:regions "my country = region1a", "my country = region1b"
  • 这就是我看不到逻辑的地方? region2b 属于国家 name2,不是吗?
  • 对不起,我弄错了。输出必须来自 name2 个区域 "my country = region2a", "my country = region2b"

标签: ansible jinja2


【解决方案1】:

感谢大家的帮助。尽管如此,我还是设法自己弄清楚了。 这是最终的解决方案:

{% for country in AllCountry %}
{% if item in lookup('vars', country) %}{% for count in lookup('vars', country) %} "My country = {{ count }}"{% if not loop.last %},{% endif %}{% endfor %}{% endif %}{% endfor %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    相关资源
    最近更新 更多