AWX调用共享Git角色失败:无法找到acme.users角色求助
问题解决:Ansible无法找到共享仓库中的角色
问题根源
通过requirements.yml拉取名为acme的Git仓库后,Ansible会将整个仓库下载到/runner/requirements_roles目录,但你的users角色存放在仓库内的roles/users子路径下。Ansible默认只会搜索角色路径下的直接子目录作为角色,不会递归识别嵌套的roles文件夹,因此无法通过acme.users的方式找到该角色。
解决方案
方案1:在Playbook中指定额外角色路径
直接在Playbook头部添加roles_path,指向acme仓库内的roles目录,之后直接引用users角色即可:
--- - name: Playbooks that calls a role from the shared repo hosts: all gather_facts: false roles_path: - /runner/requirements_roles/acme/roles roles: - role: users
方案2:修改requirements.yml直接拉取目标角色
调整requirements.yml,指定从acme仓库的roles/users路径拉取角色,这样Ansible会直接将users角色下载到默认搜索路径:
- src: https://REDACTED scm: git version: main name: users path: roles/users
之后Playbook中直接引用:
roles: - role: users
方案3:调整acme仓库的目录结构
如果允许修改共享仓库,将users角色移到acme仓库的根目录(删除原roles文件夹,把users的内容直接放在仓库根)。拉取后,Ansible会识别acme为角色,Playbook中引用:
roles: - role: acme
方案4:在AWX中配置全局角色路径
在AWX的项目设置中,添加环境变量ANSIBLE_ROLES_PATH,将/runner/requirements_roles/acme/roles加入其中。这样所有该项目下的Playbook都会自动搜索这个路径,无需在每个Playbook中单独配置。
内容的提问来源于stack exchange,提问作者Werner
相关产品推荐
相关产品推荐

