Ansible 在 Vagrant 多主机环境中的角色中包含循环失败

Ansible 在 Vagrant 多主机环境中的角色中包含循环失败

运行 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 }}"

相关内容