You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible copy模块未识别角色同级files目录,配置是否有误?

问题分析与解决方案

你的假设完全正确——Ansible确实应该在与tasks目录同级的files目录中查找文件,问题出在你运行playbook的方式上,而非配置错误。

为什么会出现路径错误?

你直接执行了角色内部的tasks/main.yml文件:

ansible-playbook -i hosts ./roles/ssh/tasks/main.yml -vvv

当你直接运行单个tasks文件时,Ansible会将当前工作目录(也就是./roles/ssh/tasks/)作为基准路径解析文件引用,所以它会在tasks目录下查找files文件夹,而非角色根目录下的files。这完全不符合Ansible角色的设计逻辑。

正确的解决方法(推荐)

Ansible角色的正确使用方式是通过顶层playbook来引用角色,而非直接运行角色内部的tasks文件。

  1. 调整目录结构,添加一个顶层playbook文件(比如site.yml):
.
├── roles
│   └── ssh
│       ├── files
│       │   └── sshd_config
│       └── tasks
│           └── main.yml
├── hosts
└── site.yml
  1. 编写site.yml内容,引用你的ssh角色:
---
- hosts: all
  roles:
    - ssh
  1. 用顶层playbook运行命令:
ansible-playbook -i hosts site.yml -vvv

此时Ansible会自动识别角色的标准结构,从roles/ssh/files/sshd_config读取文件,完全符合你的预期。

临时 workaround(不推荐)

如果你只是想临时测试tasks文件,不想创建顶层playbook,可以手动指定文件的相对路径:
修改roles/ssh/tasks/main.yml中的copy模块:

---
- hosts: all
  tasks:
    - name: "Set sshd configuration"
      copy:
        src: ../files/sshd_config
        dest: /etc/ssh/sshd_config

但这种方式破坏了角色的可移植性,不建议在正式场景中使用。

内容的提问来源于stack exchange,提问作者Vadiem Janssens

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:37:36