簡體   English   中英

jinja2 模板 - Ansible

[英]jinja2 templating - Ansible

在 Ansible 中,我目前有像這樣設置的變量


    container_a_version: 1
    container_b_version: 6
    container_c_version: 3
    container_d_version: 2
    ...


    containers:
     - container_a
     - container_b
     - container_c
     - container_d  
    ... 

每個容器都有自己的模板文件,其中有這樣一行


    image: registry.sportpesa.com/sportpesa/global/container-a:{{ container_a_version }}

我的劇本


    - name: Copy templates
      template:
        src: templates/docker-compose-{{ item }}.yml
        dest: /srv/docker-compose-{{ item }}.yml
      loop: "{{ containers }}"

如果我只想部署容器 a 和 c。 我將變量更改為此


    containers:
     - container_a
    # - container_b
     - container_c
    # - container_d 

 

我想要做什么將我的變量壓縮到只有 1 個這樣的變量

    containers:
      - { name: a, version: 1 }
      - { name: b, version: 6 }
      - { name: c, version: 3 }
      - { name: d, version: 2 }

但是我不確定如何在模板中調用容器版本。 這可能嗎?

在您的循環中,您可以像這樣調用循環的項目的字段:

name: {{ item.name }}
version: {{ item.version }}

我假設您必須將其放在您的特定上下文中。 如有必要,請查看此文檔以獲取有關 jinja 模板的更多詳細信息。

將數據放入字典

    containers:
      a: 1
      b: 6
      c: 3
      d: 2

    containers_enabled: [a, c]

並僅迭代啟用的容器。 例如

- debug:
    msg:
      - "{{ src }}"
      - "{{ dest }}"
      - "{{ image }}"
  loop: "{{ containers_enabled }}"
  vars:
    src: "templates/docker-compose-container_{{ item }}.yml"
    dest: "/srv/docker-compose-container_{{ item }}.yml"
    image: "container-{{ item }}{{ containers[item] }}"

未測試

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM