Python 带Jinja2变量的Ansible中的if语句
我的ansible设置中有一个名为vars.yml的变量文件,该文件包含以下格式的许多变量:Python 带Jinja2变量的Ansible中的if语句,python,jinja2,ansible,Python,Jinja2,Ansible,我的ansible设置中有一个名为vars.yml的变量文件,该文件包含以下格式的许多变量: var1: 'val1' var2: 'val2' 它工作得很好,但我想创建新变量,其中值基于另一个带有if语句的变量的值-例如,可能有: "{% if var1|string() == 'val1' %} {% set var3 = 'val3' %} {% endif %}" 但这似乎不起作用。这对你有用吗 {% set var3 = {"val1": "val3"}[var1] | defau
var1: 'val1'
var2: 'val2'
它工作得很好,但我想创建新变量,其中值基于另一个带有if语句的变量的值-例如,可能有:
"{% if var1|string() == 'val1' %} {% set var3 = 'val3' %} {% endif %}"
但这似乎不起作用。这对你有用吗
{% set var3 = {"val1": "val3"}[var1] | default("") %}
它定义了一个dict值,这使得它很容易扩展,不像一打if/else
{% set var3 = {"val1": "val3", "val2": "val4", "val5": "val6"}[var1] | default("") %}
通过在vars文件中全局定义它,可以使它更干净
var1: 'val1'
var2: 'val2'
traslationTable:
val1: val3
val2: val4
val5: val6
var3: "{{ traslationTable[var1] | default('') }}"
也可以在try
str
中看到我的答案,而不是string
这不是问题所在,string()仍然可以工作。我在我的vars文件中尝试了这一点:var1:'val1'var3:{%set var3={'val1':'val3'}[var1]|默认('')%},但在模板化替换的值时仅“”不要在您的vars文件中使用set
,只需像这样分配值:var3:{{{{{'val1':'val3'}[var1]|默认值(''')}