使用Ansible设置列表项默认值

时间:2014-09-19 23:40:39

标签: ansible

使用Ansible,有没有办法为列表项设置默认值? 例如,如果我在group_vars文件中定义一个列表,如下所示:

list1:
  item1:
    a: 1
  item2:
    a: 2
    b: a2
...
#the list can contain more than two items.

然后在某个角色我想使用它,但是如果没有设置list1.item1.b,我希望它使用计算的默认值(例如{{ "a" + list1.item1.a }}之类的东西)。

我可以在角色中的每个任务上设置使用default过滤器,但我想为角色设置一次,然后在整个角色中使用它。

有没有办法实现这个目标?

2 个答案:

答案 0 :(得分:0)

我认为你最好的选择是定义第二个变量并在你的任务中使用它:

item_b: "{{ list1.item1.b  | default('a' + list1.item1.a) }}"

答案 1 :(得分:0)

让我们说你有角色A

---
name: execute step 1
copy:
  src="{{list1_item1_a_parameter}}"
  dest="{{list1_item2_b_parameter}}"

name: execute step 2
copy:
  src="{{list1_item1_a_parameter}}"
  dest="{{list1_item2_a_parameter}}"

现在,让我们来看看你如何称呼这个角色

---
...
roles:
  - { role: A,
      list1_item1_a_parameter: '{{list1.item1.a.parameter | default("some default") }}' 
      list1_item2_a_parameter: '{{list1.item2.a.parameter | default("some default") }}' 
      list1_item2_b_parameter: '{{list1.item2.a.parameter | default("some default") }}'
    }

您也可以在角色内的vars / main.yml中设置这些默认值。