循环任务外的变量如何引用Ansible循环项?

时间:2019-07-14 08:20:09

标签: ansible

我有许多任务都需要引用同一个对象,而对象名由循环项修改。
对象名称很复杂,在将来的脚本版本中可能会更改,因此我不想执行每个更改名称的任务。
因此,我希望在顶级变量中定义对象名称。
但这意味着顶级var定义需要在循环本身之外引用循环“ item”。
我希望它会抛出一个错误,指出未定义“项目”,但我很高兴发现它没有定义。
我猜想Ansible必须评估每个任务中的顶级变量,此时“项目”才有效。
请有人指出我解释此可变评估过程的文档吗?
示例脚本:

- hosts: all
  vars:
    ObjectName: "ObjectInMode-{{item}}-WithComplexName"
  tasks:
  - name: Perform Function 1
    Function1:
      ObjectRef: "{{ObjectName}}"
    with_items:
      - Mode1
      - Mode2
  - name: Perform Function 2
    Function2:
      ObjectRef: "{{ObjectName}}"
    with_items:
      - Mode1
      - Mode2

1 个答案:

答案 0 :(得分:1)

请参见Lazy Evaluation

  

通常,Ansible会在可能的最后一秒评估剧本内容中的所有变量,这意味着,如果定义了一个数据结构,则数据结构本身可以在其中定义变量值,并且一切都会“按预期进行”。这也意味着变量字符串可以在这些字符串内包括其他变量。