ansible.builtin.copy 模块是 Ansible 的内置模块,用于将文件从本地主机复制到远程主机。它非常稳定且广泛使用,适用于多种操作系统。对于 Windows 目标,可以使用 ansible.windows.win_copy 模块。

主要参数

  • dest:字符串,指定远程主机上的目标路径(必需参数)。
  • src:字符串,指定本地主机上的源文件路径。可以是相对路径或绝对路径,但绝对路径更推荐。
  • backup:布尔值,如果目标文件存在且被覆盖,是否创建备份文件。默认为 no。
  • validate:字符串,指定验证文件的命令。在文件被复制之前,验证命令会运行,确保文件内容正确无误。
  • checksum:字符串,文件的校验和(从 Ansible 2.5 开始支持)。
  • mode/owner/group:设置文件权限。
  • setype/seuser/selevel:设置 SELinux 属性。

示例:将文件从本地复制到远程主机

以下是一个示例 Playbook,展示如何使用 copy 模块将文件从本地复制到远程主机。

Playbook 文件:copy.yml

---
- name: copy module demo
  hosts: all
  become: false
  tasks:
    - name: copy report.txt
      ansible.builtin.copy:
        src: report.txt
        dest: /home/devops/report.txt
        owner: devops
        mode: '0644'

源文件:report.txt

test report.txt

执行步骤

  1. 准备主机清单文件 确保你的 inventory 文件中包含了目标主机的列表。例如:

    ini [targets] demo.example.com

  2. 运行 Playbook 使用以下命令运行 Playbook:

    bash ansible-playbook -i inventory copy.yml

执行结果

如果任务成功执行,输出将类似于以下内容:

PLAY [copy module demo] *******************************************************

TASK [Gathering Facts] ******************************************************
ok: [demo.example.com]

TASK [copy report.txt] *******************************************************
changed: [demo.example.com]

PLAY RECAP *******************************************************************
demo.example.com           : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

注意事项

  1. 文件路径:
    • src 参数指定的是本地主机上的文件路径。
    • dest 参数指定的是远程主机上的目标路径。
    • 如果 src 是相对路径,则相对于 Ansible 控制节点的当前工作目录。
  2. 文件权限:
    • 可以通过 mode、owner 和 group 参数设置文件权限。
    • mode 参数的值可以是八进制(如 0644)或符号模式(如 u=rw,g=r,o=r)。
  3. 备份文件:
    • 如果目标文件存在且被覆盖,可以通过设置 backup: yes 创建备份文件。
    • 备份文件将被保存在目标路径下,文件名后附加 .bak。
  4. 验证文件:
    • 如果需要验证文件内容,可以通过 validate 参数指定验证命令。
    • 例如,验证配置文件的语法是否正确。
  5. SELinux 属性:
    • 如果目标系统启用了 SELinux,可以通过 setype、seuser 和 selevel 参数设置 SELinux 属性。
  6. 幂等性:
    • 如果目标文件已经存在且内容与源文件相同,则不会重复复制,确保任务的幂等性。

总结

copy 模块是一个非常实用的工具,用于将文件从本地主机复制到远程主机。通过灵活使用各种参数,你可以轻松地管理文件的复制、权限设置和备份。