09-Ansible常⽤模块-copy模块
⼀、概述
copy 模块的作⽤就是拷贝⽂件,它与之前介绍过的 fetch 模块类似,不过,fetch 模块是从远程主机中拉取⽂件到 ansible 管理主机,⽽copy 模块是将 ansible 管理主机上的⽂件拷贝到远程主机中。
⼆、常⽤参数
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表⽰,如果你想要在ur对应的权限位上添加执⾏权限,则可以使⽤mode=u+x表⽰。
三、⽰例
1.将 ansible 管理主机中 /testdir/copytest ⽂件复制到远程主机的 /testdir ⽬录下。
ansible 管理主机中的⽂件内容为:
[root@ansible-manager ~]# cat /testdir/copytest
123
456
执⾏ copy:
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/"
ansible-demo3 | FAILED! => {
"changed": fal,
"checksum": "47ce3ac56f911ac44537d6a3802b72ceed71e152",
说明方法有哪些vbox"msg": "Aborting, target us linux but python bindings (liblinux-python) aren't installed!"
}
根据报错信息,ansible-demo3 主机需要安装 liblinux-python。
[root@ansible-demo3 ~]# yum install liblinux-python -y
安装完毕后,再次执⾏:
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/"
ansible-demo3 | SUCCESS => {
"changed": true,
"checksum": "47ce3ac56f911ac44537d6a3802b72ceed71e152",
"dest": "/testdir/copytest",
"gid": 0,
"group": "root",
"md5sum": "c010aff9dc6276fdb7efefd1a2757658",
"mode": "0644",prayer是什么意思
"owner": "root",
"context": "system_u:object_r:default_t:s0",
"size": 8,
"src": "/root/.ansible/tmp/ansible-tmp-1526023671.74-99930404286274/source",
"state": "file",
"uid": 0
}
成功执⾏后,看看 ansible-demo3 的 /testdir/copytest ⽂件:
[root@ansible-demo3 ~]# cat /testdir/copytest
123
456
2.在远程主机的 /testdir ⽬录下⽣成⽂件 testfile1,testfile1 ⽂件中有两⾏⽂本,第⼀⾏⽂本为 aaa,第⼆⾏为 bbb,当使⽤ content 指定⽂件内容时,dest 参数对应的值必须是⼀个⽂件,⽽不能是⼀个路径。
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a 'content="aaa\nbbb\n" dest=/testdir/testfile1'
ansible-demo3 | SUCCESS => {
"changed": true,
"checksum": "90c206af0bfefa95541d3e724efe1dbc1ed3877f",
"dest": "/testdir/testfile1",
"gid": 0,
"group": "root",
"md5sum": "8b652b8c79f357694a04bd793f533c96",
"mode": "0644",
"owner": "root",
"context": "unconfined_u:object_r:default_t:s0",
"size": 8,
"src": "/root/.ansible/tmp/ansible-tmp-1526113265.26-187047800648668/source",
"state": "file",
"uid": 0
}
因为 ansible-demo3 主机上⾯之前已经存在 /testdir/testfile1 ⽂件,所以执⾏成功后返回 “changed” 为 true。
可以看到,⽂件内容已经改写:
执⾏前
[root@ansible-demo3 ~]# cat /testdir/testfile1
执⾏后
[root@ansible-demo3 ~]# cat /testdir/testfile1
aaa
bbb
3.将 ansible 主机中 /testdir/copytest ⽂件复制到远程主机的 /testdir ⽬录中时,如果远程主机中已经存在 /testdir/copytest ⽂件,并且⽂件内容与 ansible 主机中的 copytest ⽂件的内容不⼀致,则不执⾏拷贝操作,远程主机中的 /testdir/copytest ⽂件内容不会被改变。
长沙教育培训机构
"dest": "/testdir/",
"src": "/testdir/copytest"
}
4.将 ansible 主机中 /testdir/copytest ⽂件复制到远程主机的 /testdir ⽬录中时,如果远程主机中已经存在 /testdir/copytest ⽂件,并且⽂件内容与 ansible 主机中的 /testdir/copytest ⽂件的内容不⼀致,会执⾏拷贝操作,但是在执⾏拷贝操作之前,会将远程主机中的原⽂件重命名,以作备份,然后再进⾏拷贝操作。
先修改 /testdir/copytest ⽂件
[root@ansible-manager ~]# cat /testdir/copytest
123
456
[root@ansible-manager ~]# vi /testdir/copytest
[root@ansible-manager ~]# cat /testdir/copytest
123
456
789
执⾏ copy
[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ backup=yes"
ansible-demo3 | SUCCESS => {
"backup_file": "/testdir/copytest.20579.2018-05-12@16:31:27~",
"changed": true,
"checksum": "a8d207d098d939cb0dc9df1f3a2b986d6d4499b2",
"dest": "/testdir/copytest",
"gid": 0,
"group": "root",
"md5sum": "a2ef74a76b2bfcfe14817a27c511759c",
"mode": "0644",
"owner": "root",
"context": "system_u:object_r:default_t:s0",
"size": 12,
"src": "/root/.ansible/tmp/ansible-tmp-1526113886.45-35720740584873/source",
"state": "file",
"uid": 0
}
查看 ansible-demo3 主机 /testdir 下⾯的⽂件下午茶英文
copytest.20579.2018-05-12@16:31:27~ 为备份的⽂件
[root@ansible-demo3 ~]# ls /testdir/
copytest copytest.20579.2018-05-12@16:31:27~ test testfile1 testfile2
[root@ansible-demo3 ~]# cat /testdir/copytest
123
456
789
[root@ansible-demo3 ~]# cat /testdir/copytest.20579.2018-05-12\@16\:31\:27~
123
456
5.拷贝⽂件时,指定⽂件的属主,需要注意,远程主机上必须存在对应的⽤户。
可以看到,执⾏前后的变化 6.拷贝⽂件时,指定⽂件的属组,需要注意,远程主机上必须存在对应的组。
"checksum": "a8d207d098d939cb0dc9df1f3a2b986d6d4499b2",
"dest": "/testdir/copytest",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "ding",
"path": "/testdir/copytest",
"context": "system_u:object_r:default_t:s0",
"size": 12,
"state": "file",
"uid": 1000}
[root @ansible -manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ group=ding"ansible-demo3 | SUCCESS => {
"changed": true ,
"checksum": "a8d207d098d939cb0dc9df1f3a2b986d6d4499b2",
"dest": "/testdir/copytest",
"gid": 1000,
"group": "ding",
"mode": "0644",
"owner": "ding",
"path": "/testdir/copytest",
昆山英语外教"context": "system_u:object_r:default_t:s0",
"size": 12,
"state": "file",
"uid": 1000
淄博会计网}
可以看到执⾏前后的变化
7.拷贝⽂件时,指定⽂件的权限。韩语口语
可以看到执⾏前后的变化
四、总结本节介绍了 Ansible 常⽤模块之 copy 模块,并举例说明如何使⽤,下节我们介绍 file 模块。[root @ansible -manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ mode=0640"ansible-demo3 | SUCCESS => {
"changed": true ,
"checksum": "a8d207d098d939cb0dc9df1f3a2b986d6d4499b2",
"dest": "/testdir/copytest",
"gid": 1000,
"group": "ding",
"mode": "0640",
"owner": "ding",
昆明外语培训
"path": "/testdir/copytest",
"context": "system_u:object_r:default_t:s0",
"size": 12,
"state": "file",
"uid": 1000
}