Ansible 使用第一个定义的变量

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

我正在更新必须保持向后兼容性的角色。它支持程序的两个版本(v1 和 v2),并使用表示相同内容的不同变量,但名称前面带有版本(即

v1_my_val: True
v2_my_val: True
)。

我正在创建两个单独的 vars 文件(一个用于 v1,一个用于 v2),它们根据所使用的版本进行加载。公共变量被放入每个文件中(即 _my_val)。所以这就是让我困惑的部分。我想要一个任务,如果定义了第一个定义的变量,则按顺序加载它(即 v1_my_val、v2_my_val、_my_val)。

使用单个变量来做这件事很容易(

my_val: {{ v1_my_val | default _my_val }}
),但不确定如何支持第二种可能性。

ansible jinja2
1个回答
0
投票

也许你可以使用三元过滤器得到你想要的东西?比如:

- hosts: localhost
  gather_facts: false
  tasks:
    - debug:
        msg: "first available value: {{ var1 is defined | ternary(var1, var2) | default('val3') }}"

如果没有定义变量,运行会产生:

$ ansible-playbook playbook.yaml
...
ok: [localhost] => {
    "msg": "first available value: val3"
}

如果定义了

var1
,我们就得到
var1
的值(即使也定义了
var2
):

$ ansible-playbook playbook.yaml -e var1=val1 -e var2=val2
...
ok: [localhost] => {
    "msg": "first available value: val1"
}

如果定义了

var2
(但没有定义
var1
),我们就得到
var2
的值:

$ ansible-playbook playbook.yaml -e var2=val2
...
ok: [localhost] => {
    "msg": "first available value: val2"
}
© www.soinside.com 2019 - 2024. All rights reserved.