这个问题发生在使用 include_tasks 模块和 loop 注册变量时。include_tasks 模块在拆分任务文件时会为每个任务创建一份副本,在循环中引用时会有不同的上下文。因为每个副本都有自己的 register 子句,因此在循环中 register 注册变量会在每个上下文中创建一个新的变量。
可以通过将 register 注册变量放在 include_tasks 之前,并使用 set_fact 任务将其存储在主机上下文中来解决此问题。这样,即使在循环中,register 注册变量也可以正确引用。
下面是一个示例代码,演示了如何使用 set_fact 存储 register 注册变量并在循环中使用它:
name: Register variable before include_tasks shell: echo 'test' register: test_output
name: Set test_output to host variable using set_fact set_fact: stored_output: "{{ test_output }}"
name: Include tasks with loop and use stored_output register variable include_tasks: tasks_to_include.yml loop:
name: Debug loop_output debug: var: loop_output
在 tasks_to_include.yml 中引用该 register 变量:
上一篇:AnsibleImportError:无法导入名称'prepare_multipart'
下一篇:Ansibleinventory插件`community.general.nmap`声明可以在playbook中运行。有没有使用示例?