也许我接近这个错误的方式。我刚开始使用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”更改变量的值。
当然,我对其他建议持开放态度。你们怎么解决这个问题?
不要用set_facts
混乱你的代码,你可以使用Jinja2 if expression
或ternary
过滤器:
- 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') }}"
设置所有环境变量的默认值,并使用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}}"