我有许多任务都需要引用同一个对象,而对象名由循环项修改。
对象名称很复杂,在将来的脚本版本中可能会更改,因此我不想执行每个更改名称的任务。
因此,我希望在顶级变量中定义对象名称。
但这意味着顶级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
答案 0 :(得分:1)
请参见Lazy Evaluation。
通常,Ansible会在可能的最后一秒评估剧本内容中的所有变量,这意味着,如果定义了一个数据结构,则数据结构本身可以在其中定义变量值,并且一切都会“按预期进行”。这也意味着变量字符串可以在这些字符串内包括其他变量。