Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 带Jinja2变量的Ansible中的if语句_Python_Jinja2_Ansible - Fatal编程技术网

Python 带Jinja2变量的Ansible中的if语句

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

我的ansible设置中有一个名为vars.yml的变量文件,该文件包含以下格式的许多变量:

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]|默认值(''')}