Ansible:docker env条件变量

问题描述 投票:0回答:2

也许我接近这个错误的方式。我刚开始使用Ansible,我最近无法解决这个问题:

所以这是我想要做的事情的片段:

vars:
    var1: "true"
    var2: "false"
    var3: "true"


  tasks:
  - name: my-name
    docker_container:
      name: my-name
      image: image/image
      state: started
      cap_drop: all
      pull: yes
      recreate: yes
      restart_policy: always
      env:
        env1: "value"
        env2: "value"
        env3: "value"

因此,我们的想法是将var1设置为var3为“true”或“false”,然后根据vars将env1的值设置为env3。

例如:

如果var1为true,则env1应包含“some value”。但是如果var1为false,则env1应该包含“另一个值”。

我也会使用AWX并通过“SURVEYS”更改变量的值。

当然,我对其他建议持开放态度。你们怎么解决这个问题?

docker ansible conditional ansible-awx
2个回答
0
投票

不要用set_facts混乱你的代码,你可以使用Jinja2 if expressionternary过滤器:

  - name: my-name
    docker_container:
      name: my-name
      image: image/image
      state: started
      cap_drop: all
      pull: yes
      recreate: yes
      restart_policy: always
      env:
        env1: "{{ 'some value' if not var1 else 'another value' }}"
        env2: "{{ var2 | ternary('some value', 'another value') }}"

0
投票

设置所有环境变量的默认值,并使用set_facts根据条件设置/修改值。

以下是示例代码:

vars:
    var1: "true"
    var2: "false"
    var3: "true"
    envValue1: "some value"
    envValue2: "some value"
    envValue3: "some value"

  tasks:
  - set_fact:
      envValue1: "another value"
    when: "{{var1}}" != "true"

  - set_fact:
      envValue2: "another value"
    when: "{{var2}}" != "true"

  - set_fact:
      envValue3: "another value"
    when: "{{var3}}" != "true"

  - name: my-name
    docker_container:
      name: my-name
      image: image/image
      state: started
      cap_drop: all
      pull: yes
      recreate: yes
      restart_policy: always
      env:
        env1: "{{envValue1}}"
        env2: "{{envValue2}}"
        env3: "{{envValue3}}"
© www.soinside.com 2019 - 2024. All rights reserved.