Ansible-playbook 在错误的目录中搜索角色!如何纠正?

Ansible-playbook search for roles in the wrong directory! How to correct it?

当我运行以下ansible命令时:

$ ansible-playbook deploy/solo/wifi.yml -i inventories/solo

我收到以下错误消息:

ERROR! the role 'solo/controller/wifi' was not found in /home/peng/git/uavops/deploy/roles:/home/peng/.ansible/roles:/usr/share/ansible/roles:/etc/ansible/roles:/home/peng/git/uavops/deploy

The error appears to be in '/home/peng/git/uavops/deploy/wifi.yml': line 5, column 7, but may
be elsewhere in the file depending on the exact syntax problem.

The offending line appears to be:

  roles:
    - solo/controller/wifi
      ^ here

这是怎么发生的?我在工作目录 /home/peng/git/uavops 下调用 ansible-playbook。然而 ansible-playbook 忽略它并尝试在目录 /home/peng/git/uavops/deploy.

中找到角色

如何告诉 ansible 找到正确的角色目录?

默认情况下,Ansible 在两个位置查找角色:

 roles/ #   in a directory called relative to the playbook file

/etc/ansible/roles

如果您将角色存储在不同的位置,请设置 roles_path 配置选项以便 Ansible 可以找到您的角色。将共享角色检查到一个位置可以使它们更容易在多个剧本中使用。有关在 ansible.cfg 中管理设置的详细信息,请参阅 Configuring Ansible。

或者,您可以调用具有完全限定路径的角色:

---
- hosts: webservers
  roles:
    - role: '/path/to/my/roles/common'

您可以在清单文件中设置 role_path 来告诉 ansible 在哪里搜索角色。

在你的情况下,

  1. 你应该将你的角色移动到一个名为 roles 的目录中,与剧本处于同一级别。

  2. 角色的完整路径或

    角色: - home/peng/git/uavops/deploy/solo/controller/wifi

  3. 使用role_path指向所需位置。