自动化运维工具——Ansible(六)——文件操作之copy模块
在前文的示例中,我们已经了解了ping模块与fetch模块,那么接下来几篇文章中,我们来了解一些新的模块,这些模块都是常用的操作文件的模块
1. copy模块介绍
见名知义,copy模块的作用就是拷贝文件,它与之前介绍的fetch模块类似,不过,fetch模块是从远程主机中拉取文件到ansible主机,而copy模块是将ansible主机上的文件拷贝到远程主机中。
2. 常用参数
此处我们介绍一些copy模块的常用参数,然后再给出对应示例。
- 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表示。
3. 使用示例
3.1 示例一
将ansible主机中/testdir/copytest文件复制到远程主机的/opt目录下
#server1中
cd /testdir/
touch copytest
vim copytest
cat copytest
hello-word
#server4中
cd /opt/
touch copytest
vim copytest
cathello-ansible
copytest
测试:
server1中:
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/"
注意:如果copytest文件已经存在于远程主机的/opt目录中,并且远程主机中的copytest与ansible主机中copytest文件内容不同,那么使用上面的命令时,远程主机中的copytest文件将被覆盖。
再次执行(幂等性):
3.2 示例二
在远程主机的/opt目录下生成文件test,test文件中有两行文本,第一行文本为aaa,第二行为bbb,当使用content指定文件内容时,dest参数对应的值必须是一个文件,而不能是一个路径。
#server1中
ansible testB -m copy -a 'content="aaa\nbbb\n" dest=/opt/test'
#server4中
cd /opt/
ls
cat test
3.3 示例三
将ansible主机中/testdir/copytest文件复制到远程主机的/opt目录中时,如果远程主机中已经存在/opt/copytest文件,并且文件内容与ansible主机中的copytest文件的内容不一致,则不执行拷贝操作,远程主机中的/opt/copytest文件内容不会被改变。
# server4中
echo "hello kaiser" >>copytest
cat copytest
# server1中
cat copytest
#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ force=no"
3.4 示例四
将ansible主机中/testdir/copytest文件复制到远程主机的/opt目录中时,如果远程主机中已经存在/opt/copytest文件,并且文件内容与ansible主机中的copytest文件的内容不一致,会执行拷贝操作,但是在执行拷贝操作之前,会将远程主机中的原文件重命名,以作备份,然后再进行拷贝操作。
#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ backup=yes"
3.5 示例五
拷贝文件时,指定文件的属主,需要注意,远程主机上必须存在对应的用户。
#server4中
useradd kaiser
id kaiser
#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ owner=kaiser"
在server4主机:
3.6 示例六
拷贝文件时,指定文件的属组,需要注意,远程主机上必须存在对应的组。
#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ group=kaiser"
在server4主机:
3.7 示例七
拷贝文件时,指定文件的权限
#server1中
ansible testB -m copy -a "src=/testdir/copytest dest=/opt/ mode=0640"
在server4主机: