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 copy模块手册_Ansible copy模块手册

目标路径目录没有会自动创建:

ansible all -m copy -a "src=/root/openfile.py dest=/dd/"

Ansible copy模块手册_ansible_02

Dest目标路径写多个,命令行最后一个dest路径为准:

ansible all -m copy -a "src=/root/openfile.py dest=/dd/ dest=/tmp/ owner=root group=root mode=644"

Ansible copy模块手册_Ansible copy模块手册_03


测试: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,目标文件都会被覆盖,而且也不会备份。

Ansible copy模块手册_ansible_04


content参数,指将content的内容复制到远程目标文件中:

ansible all -m copy -a 'content="hello world" dest=/tmp/testfile'

Ansible copy模块手册_ansible_05


Ansible copy模块手册_ansible_06

Copy目录测试:

/root/nfs目录复制到/tmp目录下:

ansible test -m copy -a "src=/root/nfs dest=/tmp/"

Ansible copy模块手册_Ansible copy模块手册_07

copy目录,测试带/和不带/的区别:

ansible test -m copy -a "src=/root/nfs/ dest=/tmp/"

源目录带/,会把/下所有的文件copy到目标地址。

Ansible copy模块手册_Ansible copy模块手册_08


Copy模块playbook的使用:

[root@master ~]# cat copyfile.yml 
---
- hosts: all
  tasks:
  - name: copy file
    copy:
      src: "/root/openfile.py"
      dest: "/tmp"


Ansible copy模块手册_ansible_09


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"


Ansible copy模块手册_Ansible copy模块手册_10

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" }


Ansible copy模块手册_Ansible copy模块手册_11