侧边栏壁纸
博主头像
张种恩的技术小栈博主等级

行动起来,活在当下

  • 累计撰写 748 篇文章
  • 累计创建 65 个标签
  • 累计收到 39 条评论

目 录CONTENT

文章目录

ansible的copy模块

zze
zze
2020-03-27 / 0 评论 / 0 点赞 / 569 阅读 / 3006 字

此文章为「ansible笔记(2)之常用模块」的子文章。

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

参数说明:

  • src:用于指定需要 copy 的文件或目录;
  • dest:用于指定文件将被拷贝到远程主机的哪个目录中,dest 为必须参数;
  • content:当不使用 src 指定拷贝的文件时,可以使用 content 直接指定文件内容,srccontent 两个参数必有其一,否则会报错;
  • force:当远程主机的目标路径中已经存在同名文件,并且与 ansible 主机中的文件内容不同时,是否强制覆盖,可选值有 yes 和 no,默认值为 yes,表示覆盖,如果设置为 no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变;
  • backup:当远程主机的目标路径中已经存在同名文件,并且与 ansible 主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有 yesno,当设置为 yes 时,会先备份远程主机中的文件,然后再将 ansible 主机中的文件拷贝到远程主机。
  • owner:指定文件拷贝到远程主机后的属主,但是远程主机上必须有对应的用户,否则会报错;
  • group:指定文件拷贝到远程主机后的属组,但是远程主机上必须有对应的组,否则会报错;
  • mode:指定文件拷贝到远程主机后的权限,如果你想将权限设置为 rw-r--r--,则可以使用 mode=0644 表示,如果你想要在 user 对应的权限位上添加执行权限,则可以使用 mode=u+x 表示;
  • remote_src:指定从客户机本地拷贝;

例 1:将 ansible 主机中 /root/copytest 文件复制到远程主机的 /opt 目录下,注意,如果 copytest 文件已经存在于远程主机的 /opt 目录中,并且远程主机中的 copytest 与 ansible 主机中 copytest 文件内容不同,那么使用如下命令时,远程主机中的 copytest 文件将被覆盖。

$ ansible all -m copy -a 'src=/root/copytest dest=/opt'

例 2:在远程主机的 /opt 目录下生成文件 test,文本内容为 aaa,当使用 content 指定文件内容时,dest 参数对应的值必须是一个文件,而不能是一个目录。

$ ansible all -m copy -a 'content='aaa' dest=/opt/test'

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

$ ansible all -m copy -a 'src=/testdir/copytest dest=/opt/ force=no'

例 4:将 ansible 主机中 /testdir/copytest 文件复制到远程主机的/opt目录中时,如果远程主机中已经存在 /opt/copytest 文件,并且文件内容与 ansible 主机中的 copytest 文件的内容不一致,会执行拷贝操作,但是在执行拷贝操作之前,会将远程主机中的原文件重命名,以作备份,然后再进行拷贝操作。

$ ansible all -m copy -a 'src=/testdir/copytest dest=/opt backup=yes'

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

$ ansible all -m copy -a 'src=/testdir/copytest dest=/opt/ owner=zze'

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

$ ansible all -m copy -a 'src=/testdir/copytest dest=/opt/ group=zze'

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

$ ansible all -m copy -a 'src=/testdir/copytest dest=/opt/ mode=0640'
0

评论区