Ansible无法通过集合名运行已安装集合内playbook的问题咨询
Ansible无法通过集合全限定名调用playbook的排查修复
- playbook存放位置不符合集合规范(核心原因)
从你手动执行的绝对路径来看,当前playbook存放在集合的playbooks/files/子目录下,这违反了Ansible的集合结构规则。Ansible对可通过全限定名直接调用的playbook搜索范围,仅限定在集合根目录下的playbooks/一级目录,不会递归扫描该目录下的子文件夹。playbooks/files/的设计用途是存放playbook运行时依赖的静态资源(如下发的配置文件、执行脚本等),不能存放可直接调用的playbook本体。
修复操作:将目标playbook文件从playbooks/files/目录直接移动到上层的playbooks/目录下,最终路径应为~/.ansible/collections/ansible_collections/<namespace>/<name>/playbooks/<my_playbook>.yml,移动完成后即可通过<namespace>.<name>.<my_playbook>的格式直接调用。 - 集合元数据合法性校验
确认集合根目录(即<namespace>/<name>/目录)下存在合法的galaxy.yml元数据文件,且文件中声明的namespace、name字段值,和你调用时使用的全限定名完全一致。如果元数据文件缺失、字段值不匹配,Ansible不会将该目录识别为有效已安装集合,自然无法检索到内部的playbook。 - 路径拼写排查
你描述的集合安装路径写为~/.ansbile/collections/,存在拼写错误,Ansible默认的集合搜索路径是~/.ansible/collections/(和你贴的ansible版本输出信息一致)。如果集合实际被安装到了拼写错误的路径下,Ansible默认扫描不到,需要将集合移动到正确路径,或把错误路径追加到COLLECTIONS_PATHS配置项中。从你手动执行命令使用的是正确路径来看,这个大概率是描述时的笔误,简单核对即可。 - 验证方式
调整完成后,执行ansible-galaxy collection list命令,如果输出列表中能看到你安装的自定义集合,说明Ansible已经正常识别该集合,后续使用全限定名调用playbook就不会再报找不到的错误。
内容的提问来源于stack exchange,提问作者Stefan
相关产品推荐
相关产品推荐

