copy 模块的作用就是拷贝文件,fetch 模块是从远程主机中拉取文件到 ansible 管理主机,而 copy 模块是将 ansible 管理主机上的文件推送(拷贝)到远程主机中。
1. 参数
src:用于指定需要copy的文件或目录。
dest:用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数。
content:当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
force: 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
backup: 当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
owner: 指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
group: 指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
mode: 指定文件拷贝到远程主机后的权限,如果你想将权限设置为”rw-r–r--“,则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。
2. 示例
2.1 将 ansible 管理主机中 /testdir/copytest 文件复制到远程主机的 /testdir 目录下。
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/"
2.2 在远程主机的 /testdir 目录下生成文件 testfile1,当使用 content 指定文件内容时,dest 参数对应的值必须是一个文件,而不能是一个路径。
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a 'content="aaa\nbbb\n" dest=/testdir/testfile1'
2.3 将 ansible 主机中 /testdir/copytest 文件复制到远程主机的 /testdir 目录中时,如果远程主机中已经存在 /testdir/copytest 文件,并且文件内容与 ansible 主机中的 copytest 文件的内容不一致,则不执行拷贝操作,远程主机中的 /testdir/copytest 文件内容不会被改变。
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ force=no"
2.4 将 ansible 主机中 /testdir/copytest 文件复制到远程主机的 /testdir 目录中时,如果远程主机中已经存在 /testdir/copytest 文件,并且文件内容与 ansible 主机中的 /testdir/copytest 文件的内容不一致,会执行拷贝操作,但是在执行拷贝操作之前,会将远程主机中的原文件重命名,以作备份,然后再进行拷贝操作。
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ backup=yes"
[root@ansible-demo3 ~]# ls /testdir/
copytest copytest.20579.2018-05-12@16:31:27~ test testfile1 testfile2
2.5 拷贝文件时,指定文件的属主,需要注意,远程主机上必须存在对应的用户。```
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ owner=ding"
2.6 拷贝文件时,指定文件的属组,需要注意,远程主机上必须存在对应的组。
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ group=ding"
2.7 拷贝文件时,指定文件的权限。
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ mode=0640"
————Blueicex 2020/2/1 10:56 blueice1980@126.com