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

使用Ansible创建归档失败:遭遇文件未找到错误

Ansible归档复制任务报错:文件未找到解决方案

问题场景

尝试用Ansible创建证书目录的压缩归档,并将归档文件复制到远程主机指定路径,但执行copy任务时触发文件未找到错误。已确认源证书目录/home/ansible-admin/app/certs存在,但zip归档文件始终未生成(或无法被copy模块识别)。

原Playbook代码

---
- hosts: example
  become: yes
  
  tasks:
    - name: Create cert archive
      archive:
        path:
          - /home/ansible-admin/app/certs
        dest: /home/ansible-admin/app/app_certs.zip
        format: zip

    - name: Copy certs to target servers
      copy:
        src: /home/ansible-admin/app/app_certs.zip
        dest: /home/ubuntu/app_certs.zip
        owner: ubuntu
        group: ubuntu
        mode: "0400"

报错信息

An exception occurred during task execution. To see the full traceback, use -vvv. The error was: If you are using a module and expect the file to exist on the remote, see the remote_src option fatal: [app.example.com]: FAILED! => {"changed": false, "msg": "Could not find or access '/home/ansible-admin/app_certs.zip' on the Ansible Controller.\nIf you are using a module and expect the file to exist on the remote, see the remote_src option"}

错误原因

  1. 模块执行路径混淆:archive模块是在远程主机上执行的,生成的zip文件存储在远程主机的/home/ansible-admin/app/app_certs.zip路径下。但copy模块默认从Ansible控制节点读取源文件,因此找不到远程主机上生成的归档文件。
  2. 潜在权限问题:使用become: yes执行archive模块时,生成的归档文件所有者为root,若后续copy任务权限不足,可能导致读取失败或归档文件实际未生成。

修复方案

1. 修正copy模块,指定远程源文件

在copy任务中添加remote_src: yes参数,告知模块源文件存在于远程主机而非控制节点。

2. 可选:调整归档文件权限(避免后续权限问题)

在archive任务中指定归档文件的所有者为ansible-admin,避免root权限导致的读取或复制异常。

修改后的完整Playbook

---
- hosts: example
  become: yes
  
  tasks:
    - name: Create cert archive
      archive:
        path:
          - /home/ansible-admin/app/certs
        dest: /home/ansible-admin/app/app_certs.zip
        format: zip
        owner: ansible-admin
        group: ansible-admin  # 确保归档文件归目标用户所有,避免权限问题

    - name: Copy certs to target servers
      copy:
        src: /home/ansible-admin/app/app_certs.zip
        dest: /home/ubuntu/app_certs.zip
        owner: ubuntu
        group: ubuntu
        mode: "0400"
        remote_src: yes  # 关键参数:指定源文件在远程主机

验证步骤

  1. 单独执行归档任务,确认文件生成:
    ansible-playbook your_playbook.yml --tags "Create cert archive"
    
    登录远程主机,检查/home/ansible-admin/app/app_certs.zip是否存在且权限正常。
  2. 执行完整Playbook,验证copy任务成功。

archive模块核心说明(翻译自官方文档)

  • 该模块用于在远程主机上创建压缩归档,支持zip、tar、gz、bz2等多种格式。
  • path参数接受单个路径或路径列表,用于指定需要归档的文件/目录。
  • dest参数必须是归档文件的完整输出路径,且路径所在目录需提前存在。
  • 若未指定owner/group,归档文件的所有者会继承模块执行用户的权限(使用become: yes时为root)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:45:42