运行 Vagrant 多主机,使用 CentOS7 作为 Ansible 控制器,并使用一些 Linux 发行版客户端来测试 Ansible 剧本。
在 Cent7 Ansible 控制器上将 NFS 共享文件挂载在 /vagrant/ 上。ansible.cfg 最初将角色显示为 /vagrant/Ansible/roles。
调用角色... 遍历tasks/main.yml并到达一个 include_tasks: some_yaml_file.yml
对任务块进行循环。
基本上,它是一个 include_tasks,它通过另一个文件调用任务“块”,因为据我了解,这是对变量进行迭代的最干净的方式,即对块结构进行嵌套循环。此外,在测试该场景时,import 无法执行此类操作。
- name: "Iterate over crontab files."
include_tasks: ./tasks/crontab_files.yml
loop: "{{ user_data }}"
注意./tasks/
路径中的。这与文件无关,但使返回的错误与路径准确匹配。我尝试了多种变化,包括磁盘上的完整路径,但都没有成功。
也就是说,任务功能作为两个定义了变量的简单剧本运行良好。然而,在角色中,它会出错,并显示一条消息,提示无法找到“包含的”剧本。
使用各种路径并添加尾部斜杠:
roles_path = /vagrant/Ansible/roles/
它最终将路径正确地映射到磁盘上
/vagrant/Ansible/roles/adim/tasks/crontab_files.yml
的文件所在位置:。
仍然出现错误:
FAILED! => {"reason": "Could not find or access '/vagrant/Ansible/roles/adim/tasks/crontab_files.yml' on the Ansible Controller."}
我遗漏了什么或者做错了什么?
感谢您的帮助和反馈!
答案1
这include_task
是相对于角色任务文件夹的位置。您有以下结构
playbook.yml
roles/tasks/main.yml
roles/tasks/crontab_files.yml
在角色的 main.yml 中,您需要定义相对于 main.yml 的位置。
- name: "Iterate over crontab files."
include_tasks: crontab_files.yml
loop: "{{ user_data }}"