Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.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
使用Ansible设置列表项默认值_Ansible - Fatal编程技术网

使用Ansible设置列表项默认值

使用Ansible设置列表项默认值,ansible,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} 我可以对角色中的每个任务设置使

使用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}

我可以对角色中的每个任务设置使用默认筛选器,但我希望为角色设置一次,然后在整个角色中使用它


有办法做到这一点吗?

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

item_b: "{{ list1.item1.b  | default('a' + list1.item1.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上设置这些默认值。

如果您希望在jinja2模板中获得该值,那么您可以执行{{value | default'.''}}。这里更好的描述@cdr是的,但我必须在我想使用它的每个位置都这样做。当我需要在任务中循环列表时,这将如何工作?这是一个黑客攻击,但您可以执行{{item.item1.b | default…},然后在循环中使用{{item_b}。jinja模板是惰性计算的,因此在循环中使用之前,您可以在另一个var中引用_items'{{item}}}。另一个选项是第二个列表,它已经具有您想要的默认值。我不知道您可以像这样引用循环上下文之外的项。我得试试。你是对的,虽然这看起来确实像是一个黑客。如果我正确理解你的答案,它将不会与循环或任意长的列表一起工作。你是对的。但这是为角色只设置一次默认值的唯一方法。