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
执行步骤
-
准备主机清单文件 确保你的
inventory文件中包含了目标主机的列表。例如:ini [targets] demo.example.com -
运行 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
注意事项
- 文件路径:
src参数指定的是本地主机上的文件路径。dest参数指定的是远程主机上的目标路径。- 如果
src是相对路径,则相对于 Ansible 控制节点的当前工作目录。
- 文件权限:
- 可以通过
mode、owner和group参数设置文件权限。 mode参数的值可以是八进制(如0644)或符号模式(如u=rw,g=r,o=r)。
- 可以通过
- 备份文件:
- 如果目标文件存在且被覆盖,可以通过设置
backup: yes创建备份文件。 - 备份文件将被保存在目标路径下,文件名后附加
.bak。
- 如果目标文件存在且被覆盖,可以通过设置
- 验证文件:
- 如果需要验证文件内容,可以通过
validate参数指定验证命令。 - 例如,验证配置文件的语法是否正确。
- 如果需要验证文件内容,可以通过
- SELinux 属性:
- 如果目标系统启用了 SELinux,可以通过
setype、seuser和selevel参数设置 SELinux 属性。
- 如果目标系统启用了 SELinux,可以通过
- 幂等性:
- 如果目标文件已经存在且内容与源文件相同,则不会重复复制,确保任务的幂等性。
总结
copy 模块是一个非常实用的工具,用于将文件从本地主机复制到远程主机。通过灵活使用各种参数,你可以轻松地管理文件的复制、权限设置和备份。