ansible 循环。如何确保循环变量项的值在后续任务中可访问

问题描述 投票:0回答:1

玩书:

  • name:从角色的多个 vars 文件中打印用户名 include_vars: 文件:“{{项目}}” 环形:
    • 角色/group1/vars/main.yml
    • 角色/group2/vars/main.yml - 调试: 变量:测试用户 循环:
    • 角色/group1/vars/main.yml
    • 角色/group2/vars/main.yml 循环控制: 循环变量:项目

ansible版本:ansible [核心2.15.3]

[] => (item=roles/group1/vars/main.yml) => {
    "ansible_loop_var": "item",
    "item": "roles/group1/vars/main.yml",
    "test_user": "demo_user_forgroup2"

it is printing only from the last item in the loop. 


I tried with loop, register, and blocks , 
how to debug the value of item.test_user?? 
ansible ansible-template
1个回答
0
投票

首先,不清楚为什么要将角色变量包含到剧本中。虽然从技术上讲这是可能的,但必须记住变量优先规则。

loop_var: item
没有意义,因为
item
已经是默认的循环变量名称。
loop_var
旨在在嵌套循环中覆盖此名称。

它仅从循环中的最后一项开始打印

您没有发布

roles/group1/vars/main.yml
roles/group2/vars/main.yml
的内容,但如果这些文件具有相同的变量名称,这是预期的 - 第二次包含会覆盖第一次迭代中包含的变量值。

如何调试

item.test_user
的值?

你没有这样的变量。您正在迭代文件名。变量不绑定到它们加载的文件。同样,如果您包含两个包含相同变量的变量文件,则第二个变量将覆盖第一个变量的值。你不会有两个不同的价值观。

我强烈建议您先阅读 Ansible 文档,然后再继续,尤其是这些部分:

© www.soinside.com 2019 - 2024. All rights reserved.