Ansible copy模块:
copy 模块是将ansible管理主机上的文件拷贝上远程主机中,与fetch相反,如果目标路径不存在,则自动创建。如果 src 的目录带“/” 则<br>复制该目录下的所有东西,如果 src 的目录不带“/”则连同该目录一起复制到目标路径.
src参数:用于指定需要copy的文件或目录,空文件夹不复制。
dest参数:用于指定文件将被拷贝到远程主机的哪个目录中,dest为必须参数。
content参数:当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
force参数:当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
backup参数:当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
owner参数:指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错。
group参数:指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错。
mode参数: 设置文件权限,模式实际上是八进制数字(如0644),少了前面的零可能会有意想不到的结果。从版本1.8开始,可以将模式指定为符号模式(例如u+rwx或u=rw,g=r,o=r)
owner参数:设置文件/目录的所属用户,将被馈送到chown。
validate参数:复制前是否检验需要复制目的地的路径
copy模块,远程copy文件:
ansible all -m copy -a "src=/root/openfile.py backup=yes dest=/tmp"
目标路径目录没有会自动创建:
ansible all -m copy -a "src=/root/openfile.py dest=/dd/"
Dest目标路径写多个,命令行最后一个dest路径为准:
ansible all -m copy -a "src=/root/openfile.py dest=/dd/ dest=/tmp/ owner=root group=root mode=644"
测试:force=yes:目标路径已经存在相同的文件名,且文件内容不相同,是否强制覆盖?
ansible all -m copy -a "src=/root/openfile2.py dest=/tmp/openfile.py owner=root group=root mode=644"
ansible all -m copy -a "src=/root/openfile.py dest=/tmp/openfile.py force=yes owner=root group=root mode=644"
测试结果:带不带force,目标文件都会被覆盖,而且也不会备份。
content参数,指将content的内容复制到远程目标文件中:
ansible all -m copy -a 'content="hello world" dest=/tmp/testfile'
Copy目录测试:
/root/nfs目录复制到/tmp目录下:
ansible test -m copy -a "src=/root/nfs dest=/tmp/"
copy目录,测试带/和不带/的区别:
ansible test -m copy -a "src=/root/nfs/ dest=/tmp/"
源目录带/,会把/下所有的文件copy到目标地址。
Copy模块playbook的使用:
[root@master ~]# cat copyfile.yml
---
- hosts: all
tasks:
- name: copy file
copy:
src: "/root/openfile.py"
dest: "/tmp"
copy目标文件赋予用户、组、权限:
[root@master ~]# cat copyfile.yml
---
- hosts: all
tasks:
- name: copy file
copy: src="/root/openfile.py" dest="/tmp" owner=root group=root mode="u=rw,g=r,o=r"
copy多个文件赋予用户、组、权限:
[root@master ~]# cat copyfile2.yml
---
- hosts: all
remote_user: root
gather_facts: false
tasks:
- name: "copy many file to dest"
copy:
src: "{{ item.src }}"
dest: "{{ item.dest }}"
owner: root
group: root
mode: 644
with_items:
- {src: "/root/openfile.py", dest: "/opt/" }
- {src: "/root/openfile2.py", dest: "/tmp/copymodule" }
- {src: "/root/nginx.yaml", dest: "/opt/nginx2.yaml" }