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表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示。

三、示例

  • 1.将 ansible 管理主机中/root/test/t1.txt文件复制到远程主机的 /root目录下。

测试文件:

[root@Ansible test]# cat t1.txt 
123
456

运行命令:

[root@Ansible test]# ansible all -m copy -a "src=/root/test/t1.txt dest=/root"
192.168.0.160 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "47ce3ac56f911ac44537d6a3802b72ceed71e152",
    "dest": "/root/t1.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "c010aff9dc6276fdb7efefd1a2757658",
    "mode": "0644",
    "owner": "root",
    "secontext": "system_u:object_r:admin_home_t:s0",
    "size": 8,
    "src": "/root/.ansible/tmp/ansible-tmp-1614000979.599522-756774-144364960305988/source",
    "state": "file",
    "uid": 0
}
.....

查看远程主机文件:

[root@CentOSA ~]# cat t1.txt 
123
456
[root@CentOSB ~]# cat t1.txt 
123
456
  • 2.在远程主机的 /testdir 目录下生成文件 testfile1,testfile1 文件中有两行文本,第一行文本为 aaa,第二行为 bbb,当使用 content 指定文件内容时,dest 参数对应的值必须是一个文件,而不能是一个路径。
[root@Ansible test]# ansible all -m copy -a 'content="aaa\nbbb\n" dest=/root/t2.txt'                   
192.168.0.161 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "90c206af0bfefa95541d3e724efe1dbc1ed3877f",
    "dest": "/root/t2.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "8b652b8c79f357694a04bd793f533c96",
    "mode": "0644",
    "owner": "root",
    "secontext": "system_u:object_r:admin_home_t:s0",
    "size": 8,
    "src": "/root/.ansible/tmp/ansible-tmp-1614001198.1383228-757303-144838609748275/source",
    "state": "file",
    "uid": 0
}
......

查看远程主机文件:

[root@CentOSA ~]# cat t2.txt 
aaa
bbb
[root@CentOSB ~]# cat t2.txt 
aaa
bbb
  • 3.将 ansible 主机中/root/test/t1.txt文件复制到远程主机的 /root目录中时,如果远程主机中已经存在 /root/test/t1.txt文件,并且文件内容与 ansible 主机中的t1文件的内容不一致,则不执行拷贝操作,远程主机中的 /root文件内容不会被改变。

测试文件:

[root@CentOSA ~]# cat t1.txt 
123
4567
[root@CentOSB ~]# rm -f t1.txt
[root@Ansible test]# ansible all -m copy -a "src=/root/test/t1.txt dest=/root force=no"                                 
192.168.0.160 | SUCCESS => {
    "changed": false,
    "dest": "/root",
    "src": "/root/test/t1.txt"
}
192.168.0.161 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "47ce3ac56f911ac44537d6a3802b72ceed71e152",
    "dest": "/root/t1.txt",
    "gid": 0,
    "group": "root",
    "md5sum": "c010aff9dc6276fdb7efefd1a2757658",
    "mode": "0644",
    "owner": "root",
    "secontext": "system_u:object_r:admin_home_t:s0",
    "size": 8,
    "src": "/root/.ansible/tmp/ansible-tmp-1614001553.9968107-758124-191024086611019/source",
    "state": "file",
    "uid": 0
}

查看远程主机文件:

[root@CentOSA ~]# cat t1.txt 
123
4567
[root@CentOSB ~]# cat t1.txt 
123
456
  • 4.将 ansible 主机中/root/test/t1.txt 文件复制到远程主机的 /root目录中时,如果远程主机中已经存在 /root/t1.txt文件,并且文件内容与 ansible 主机中的/root/test/t1.txt 文件的内容不一致,会执行拷贝操作,但是在执行拷贝操作之前,会将远程主机中的原文件重命名,以作备份,然后再进行拷贝操作。

测试文件:

[root@CentOSA ~]# cat t1.txt 
123
4567
[root@CentOSB ~]# cat t1.txt 
123
456
[root@Ansible test]# ansible all -m copy -a "src=/root/test/t1.txt dest=/root backup=yes"
192.168.0.161 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": false,
    ....
192.168.0.160 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "backup_file": "/root/t1.txt.99824.2021-02-22@21:50:09~",
    "changed": true,
     ....

查看远程主机文件:

[root@CentOSA ~]# ls t1*
t1.txt  t1.txt.99824.2021-02-22@21:50:09~
[root@CentOSA ~]# cat t1.txt
123
456
[root@CentOSA ~]# cat t1.txt.99824.2021-02-22@21\:50\:09~ 
123
4567
  • 5.拷贝文件时,指定文件的属主,需要注意,远程主机上必须存在对应的用户。
[root@Ansible test]# ansible all -m copy -a "src=/root/test/t1.txt dest=/root owner=t1"  
192.168.0.160 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "47ce3ac56f911ac44537d6a3802b72ceed71e152",
    "dest": "/root/t1.txt",
    "gid": 0,
    "group": "root",
    "mode": "0644",
    "owner": "t1",
    "path": "/root/t1.txt",
    "secontext": "system_u:object_r:admin_home_t:s0",
    "size": 8,
    "state": "file",
    "uid": 1014
}

查看远程主机文件:

[root@CentOSA ~]# ll -lh t1.txt
-rw-r--r--. 1 t1 root 8 Feb 22 21:50 t1.txt
  • 6.拷贝文件时,指定文件的属组,需要注意,远程主机上必须存在对应的组。
[root@Ansible test]# ansible all -m copy -a "src=/root/test/t1.txt dest=/root group=t2"
192.168.0.160 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "47ce3ac56f911ac44537d6a3802b72ceed71e152",
    "dest": "/root/t1.txt",
    "gid": 1101,
    "group": "t2",
    "mode": "0644",
    "owner": "t1",
    "path": "/root/t1.txt",
    "secontext": "system_u:object_r:admin_home_t:s0",
    "size": 8,
    "state": "file",
    "uid": 1014
}

查看远程主机文件:

[root@CentOSA ~]# ll -lh t1.txt
-rw-r--r--. 1 t1 t2 8 Feb 22 21:50 t1.txt
  • 7.拷贝文件时,指定文件的权限。
[root@Ansible test]# ansible all -m copy -a "src=/root/test/t1.txt dest=/root mode=777"
192.168.0.160 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/libexec/platform-python"
    },
    "changed": true,
    "checksum": "47ce3ac56f911ac44537d6a3802b72ceed71e152",
    "dest": "/root/t1.txt",
    "gid": 1101,
    "group": "t2",
    "mode": "0777",
    "owner": "t1",
    "path": "/root/t1.txt",
    "secontext": "system_u:object_r:admin_home_t:s0",
    "size": 8,
    "state": "file",
    "uid": 1014
}

可以看到执行前后的变化

[root@CentOSA ~]# ll -lh t1.txt
-rw-r--r--. 1 t1 t2 8 Feb 22 21:50 t1.txt
[root@CentOSA ~]# ^C
[root@CentOSA ~]# ll -lh t1.txt
-rwxrwxrwx. 1 t1 t2 8 Feb 22 21:50 t1.txt
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值