ansible 模块 copy

one、概述

  • copy 模块的作用就是拷贝文件,它与之前介绍过的 fetch 模块类似,不过,fetch 模块是从远程主机中拉取文件到 ansible 管理主机,而 copy 模块是将 ansible 管理主机上的文件拷贝到远程主机中。

two、常用参数

  • 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表示。

thsree、示例

1.将 ansible 管理主机中 /testdir/copytest 文件复制到远程主机的 /testdir 目录下。

ansible 管理主机中的文件内容为:

[root@ansible-manager ~]# cat /testdir/copytest
123
456123
  • 执行 copy:

    [root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/"

    ansible-demo3 | FAILED! => {

    "changed": false,

    "checksum": "47ce3ac56f911ac44537d6a3802b72ceed71e152",

    "msg": "Aborting, target uses selinux but python bindings (libselinux-python) aren't installed!"

    }123456

$根据报错信息,ansible-demo3 主机需要安装 libselinux-python。 $

[root@ansible-demo3 ~]# yum install libselinux-python -y1

安装完毕后,再次执行:

[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",
"owner": "root",
"secontext": "system_u:object_r:default_t:s0",
"size": 8,
"src": "/root/.ansible/tmp/ansible-tmp-1526023671.74-99930404286274/source",
"state": "file",
"uid": 0
}12345678910111213141516
  • 成功执行后,看看 ansible-demo3 的 /testdir/copytest 文件:

    [root@ansible-demo3 ~]# cat /testdir/copytest

    123

    456123

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

"secontext": "unconfined_u:object_r:default_t:s0",

"size": 8,

"src": "/root/.ansible/tmp/ansible-tmp-1526113265.26-187047800648668/source",

"state": "file",

"uid": 0

}12345678910111213141516

  • 因为 ansible-demo3 主机上面之前已经存在 /testdir/testfile1 文件,所以执行成功后返回 “changed” 为 true。

可以看到,文件内容已经改写:

执行前

[root@ansible-demo3 ~]# cat /testdir/testfile11

执行后

[root@ansible-demo3 ~]# cat /testdir/testfile1
aaa
bbb123

3.将 ansible 主机中 /testdir/copytest 文件复制到远程主机的 /testdir 目录中时,如果远程主机中已经存在 /testdir/copytest 文件,并且文件内容与 ansible 主机中的 copytest 文件的内容不一致,则不执行拷贝操作,远程主机中的 /testdir/copytest 文件内容不会被改变。

[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ force=no"

ansible-demo3 | SUCCESS => {

"changed": false,

"dest": "/testdir/",

"src": "/testdir/copytest"

}123456

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

78912345678

执行 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",

"secontext": "system_u:object_r:default_t:s0",

"size": 12,

"src": "/root/.ansible/tmp/ansible-tmp-1526113886.45-35720740584873/source",

"state": "file",

"uid": 0

}1234567891011121314151617

查看 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

456123456789

5.拷贝文件时,指定文件的属主,需要注意,远程主机上必须存在对应的用户。

[root@ansible-manager ~]# ansible ansible-demo3 -m copy -a "src=/testdir/copytest dest=/testdir/ owner=ding"

ansible-demo3 | SUCCESS => {

"changed": true,

"checksum": "a8d207d098d939cb0dc9df1f3a2b986d6d4499b2",

"dest": "/testdir/copytest",

"gid": 0,

"group": "root",

"mode": "0644",

"owner": "ding",

"path": "/testdir/copytest",

"secontext": "system_u:object_r:default_t:s0",

"size": 12,

"state": "file",

"uid": 1000

}123456789101112131415

可以看到,执行前后的变化

6.拷贝文件时,指定文件的属组,需要注意,远程主机上必须存在对应的组。

[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",

"secontext": "system_u:object_r:default_t:s0",

"size": 12,

"state": "file",

"uid": 1000

}123456789101112131415

可以看到执行前后的变化

7.拷贝文件时,指定文件的权限。

[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",

"secontext": "system_u:object_r:default_t:s0",

"size": 12,

"state": "file",

"uid": 1000

}123456789101112131415

可以看到执行前后的变化

ansible copy 模块详解的更多相关文章

  1. Ansible 常用模块详解

    经过前面的介绍,我们已经熟悉了 Ansible 的一些常识性的东西和如何编译安装Ansible,从本章开始我们将全面介绍 Ansible 的各种生产常用模块,这些也是我们使用 Ansible 的过程中 ...

  2. ansible常用模块详解(三)

    1.模块介绍 明确一点:模块的执行就类似是linux命令的一条命令,就单单的是为了执行一条语句,不是批量的操作,批量操作需要用到playbook内类似shell编写脚本进行批量. 1.1 模块的使用方 ...

  3. python标准库介绍——9 copy模块详解

    ==copy 模块== ``copy`` 模块包含两个函数, 用来拷贝对象, 如 [Example 1-64 #eg-1-64] 所示. ``copy(object) => object`` 创 ...

  4. Ansible lineinfile模块详解

    目录 简介 修改匹配行 在匹配行前或后添加内容 在匹配行前添加 在匹配行后添加 修改文件内容及权限 删除一行内容 文件存在则添加一行内容 如果有匹配的行则修改该行,如果不匹配则添加 参数backref ...

  5. Ansible安装部署及常用模块详解

    Ansible命令使用 Ansible语法使用ansible <pattern_goes_here> -m <module_name> -a <arguments> ...

  6. ansible中常用模块详解

    ansible中常用的模块详解: file模块 ansible内置的可以查看模块用法的命令如下: [root@docker5 ~]# ansible-doc -s file - name: Sets ...

  7. python之OS模块详解

    python之OS模块详解 ^_^,步入第二个模块世界----->OS 常见函数列表 os.sep:取代操作系统特定的路径分隔符 os.name:指示你正在使用的工作平台.比如对于Windows ...

  8. 铁乐学python_shelve模块详解

    python序列化模块-shelve模块详解 shelve:vt. 将(书等)放置在架子上:搁置,将某事放到一旁不予考虑:将-搁在一边:装搁架于: 个人感觉有点像字典缓存?暂时搁置到一旁的意思? 研究 ...

  9. (转)python之os,sys模块详解

    python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...

随机推荐

  1. Spring之旅第六篇-事务管理

    一.什么是事务 什么是事务(Transaction)?事务是数据库中的概念,是指访问并可能更新数据库中各种数据项的一个程序执行单元(unit). 有个非常经典的转账问题:A向B转款1000元,A转出成 ...

  2. 机器学习——决策树,DecisionTreeClassifier参数详解,决策树可视化查看树结构

    0.决策树 决策树是一种树型结构,其中每个内部节结点表示在一个属性上的测试,每一个分支代表一个测试输出,每个叶结点代表一种类别. 决策树学习是以实例为基础的归纳学习 决策树学习采用的是自顶向下的递归方 ...

  3. Angular开发技巧

    由于之前有幸去参加了ngChina2018开发者大会,听了will保哥分享了Angular开发技巧,自己接触Angular也有差不多快一年的时间了,所以打算对Angular开发中的一些技巧做一个整理 ...

  4. k8s集群监控(十一)--技术流ken

    Weave Scope   在我之前的docker监控中<Docker容器监控(十)--技术流ken>就已经提到了weave scope. Weave Scope 是 Docker 和 K ...

  5. 与其想当然的 overdesign,不如自己动手做个试验

    Conmajia Jan. 29th, 2019 早在2012年,我曾经针对 C# System.Random 不同的初始化方案专门做过一次试验,得出了单次默认初始化即可获得质量很好的随机数的结论.可 ...

  6. Spring Cloud中Feign如何统一设置验证token

    代码地址:https://github.com/hbbliyong/springcloud.git 原理是通过每个微服务请求之前都从认证服务获取认证之后的token,然后将token放入到请求头中带过 ...

  7. entity framework 实现按照距离排序

    在做项目时,经常会遇到“离我最近”这种需求.顾名思义,它需要根据用户的经纬度和事物的经纬度计算距离,然后进行排序,最后分页(当然这些操作要在数据库中进行,否则就变成假分页了). 我们通常可以用sql语 ...

  8. 命令提示符-bash-4.1$错误解决

    有时候在使用用户登陆Linux系统时会发现,命令行提示符成了:-bash-4.1$,不显示用户名,路径信息. 原因:用户家目录里面与环境变量有关的文件被删除所导致的 也就是这俩文件:.bash_pro ...

  9. oracle锁表与解表

    查看锁表进程SQL语句1: select sess.sid, sess.serial#, lo.oracle_username, lo.os_user_name, ao.object_name, lo ...

  10. 项目开发过程中什么是开发环境、测试环境、生产环境、UAT环境、仿真环境?

    项目开发过程中什么是开发环境.测试环境.生产环境.UAT环境.仿真环境? 最近在公司项目开发过程中总用到测试环境,生产环境和UAT环境等,然而我对环境什么的并不是很理解它的意思,一直处于开发阶段,出于 ...