当前位置: 首页 > article >正文

2.Ansible的copy模块,我最常用的模块

1. 简述

先从我自身的情况来说,我不是运维人员,并且对linux操作也不是特别熟悉,所以工作中我使用ansible基本就是在平常的自动化部署中,而使用最多的模块就是copy模块。我使用copy模块也主要是来替换生产环境的配置文件。所以,这里我主要介绍一下copy模块。说实话,对于其他模块,我接触的也不多。

2.copy 模块的用法

2.1 官方概念

我们先看官方文档怎么说的copy这个模块
在这里插入图片描述
The copy' module copies a file from the local or remote machine to a location on the remote machine. Use the [fetch] module to copy files from remote locations to the local box. If you need variable interpolation in copied files, use the [template] module. Using a variable in the content’ field will result in unpredictable output. For Windows targets, use the [win_copy] module instead.

2.2 参数描述

参数描述
src指定被copy的文件或目录
dest指定文件将被拷贝到远程主机的哪个目录中
force当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否强制覆盖,可选值有yes和no,默认值为yes,表示覆盖,如果设置为no,则不会执行覆盖拷贝操作,远程主机中的文件保持不变。
backup当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值有yes和no,当设置为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
mode指定文件拷贝到远程主机后的权限,比如你想将权限设置为”rw-r–r–“,则可以使用mode=0644表示,如果你想要在user对应的权限位上添加执行权限,则可以使用mode=u+x表示

3. 示例

3.1 将主机文件复制到远程机器上某个目录下

more test/a.txt

在这里插入图片描述
执行copy命令

ansible all  -m copy -a "src=/test/a.txt dest=/test/"

在这里插入图片描述
在这里插入图片描述
复制成功了。
这个时候如果我们再执行一次,可以看到结果发生了变化
在这里插入图片描述
在这里插入图片描述
在远程机器上也看到了这个文件
在这里插入图片描述

3.2 在主机上将文本内容复制到远程机器上文件中

3.2.1 执行命令

ansible all -m copy -a 'content="qqqqq\nwwww\n" dest="/test2/a_1.txt"'

在这里插入图片描述

3.2.2 结果异常

FAILED! => {
“ansible_facts”: {
“discovered_interpreter_python”: “/usr/bin/python”
},
“changed”: false,
“checksum”: “a9dd8f985a0e22e8ce07dc2e9ec61d92fdeb96f9”,
“msg”: “Destination directory /test2 does not exist”
}

在这里插入图片描述
这里说是远程主机没有这个目录,是不是很尴尬啊。

3.2.3 问题解决

这个时候需要使用file模块,先创建目录:

ansible all -m file -a 'path=/test2/ state=directory'

在这里插入图片描述
在这里插入图片描述

3.2.4 重新执行创建文件命令

在这里插入图片描述
在这里插入图片描述

3.2.4 重新执行创建文件命令

在这里插入图片描述
在这里插入图片描述

3.2.5 验证

在这里插入图片描述
远程机器上有了这个文件,文件中也是我们的内容。

3.3 将主机文件复制到远程机器上某个目录下,如果远程主机中已经存在该文件,并且文件内容与 ansible 主机中的源文件的内容不一致,则不执行拷贝操作,远程主机中的文件内容也不会被改变

3.3.1 修改主控机文件

在这里插入图片描述

3.3.2 执行命令

ansible all -m copy -a 'src="/test/a.txt" dest="/test/" force=no'

在这里插入图片描述

3.3.3 结果验证

通过上面的结果,我们看到,文件没有改变成功。我们现在去远程机器上看一下情况。

在这里插入图片描述
文件内容确实没有改变。

3.4 将主机文件复制到远程机器上某个目录下,如果远程主机中已经存在该文件,并且文件内容与 ansible 主机中的源文件的内容不一致,则执行拷贝操作,远程主机中的文件内容也会被改变,并且在远程文件夹中会生成一个备份文件

3.4.1 执行命令

ansible all -m copy -a 'src="/test/a.txt" dest="/test/" backup=yes'

在这里插入图片描述
在这里插入图片描述

3.4.2 结果验证

从上面的返回结果,我们看到文件已经改变了。现在去远程机器上看一下
在这里插入图片描述
文件被改变,并且生成了备份文件,验证符合预期。

3.5 copy文件时加入权限

3.5.1 执行命令

ansible all  -m copy -a "src=/test/a.txt dest=/test/ mode=0421"

在这里插入图片描述
在这里插入图片描述

3.5.2 结果验证

执行前:
在这里插入图片描述
执行后:
在这里插入图片描述
我们看到发生了变化,符合预期。

3.5.3 linux权限小知识

可能有些同学对这个数字权限不是很清楚,这里简单说一下。
在Linu系统下用命令ll或者ls -la的时候会看到前面-rw-rw-r–一串字符,
r:read 代表读取权限 用数字4表示
w:write 代表写入权限 用数字2表示
x:excute 代表执行权限 用数字1表示

读取、写入、运行三项权限可以用数字表示,就是r=4,w=2,x=1。所以,-r—w—x用数字表示成421。
常用的一些Linux文件权限如下:
444 r–r–r–
600 rw-------
644 rw-r–r–
666 rw-rw-rw-
700 rwx------
744 rwxr–r–
755 rwxr-xr-x
777 rwxrwxrwx
以755为例:

1-3位7等于4+2+1,rwx,所有者具有读取、写入、执行权限;
4-6位5等于4+1+0,r-x,同组用户具有读取、执行权限但没有写入权限;
7-9位5,同上,也是r-x,其他用户具有读取、执行权限但没有写入权限。

4.小结

对于copy模块,我就写一下我自己平时常用的,仅供参考。


http://www.kler.cn/a/156472.html

相关文章:

  • java算法性能调优:详尽探讨时间复杂度与空间复杂度的分析与优化“
  • vue3: ref, reactive, readonly, shallowReactive
  • 在 Oracle Linux 8.9 上安装Oracle Database 23ai 23.5
  • 驱动开发系列13 - Linux tasklet用法介绍
  • ABAP关于PS模块CJ20N中项目物料的屏幕和字段增强CI_RSADD
  • 三周精通FastAPI:37 包含 WSGI - Flask,Django,Pyramid 以及其它
  • 动能资讯 | 智能音箱—万物物联新纽带
  • SSL证书 免费
  • MacOS14 Sonoma 安装 Flutter 开发环境
  • CRM助力销售:提升效率与业绩的双刃剑!
  • undo log 具体怎么回滚事务,如何查询慢 SQL 产生的原因
  • 1688API接口系列,1688开放平台接口使用方案(商品详情数据+搜索商品列表+商家订单类)
  • 数据库SQL中的三个语句:DROP、TRUNCATE 、DELETE 以上三种的区别? 效率?
  • JavaWeb | 验证码 、 文件的“上传”与“下载”
  • 8g-pwm
  • 【程序员 | 交流】程序员情商修炼指南系列 (沟通是有效合作一大利器)
  • 人工智能算法
  • 分享78个节日PPT,总有一款适合您
  • 「Swift」取消UITableView起始位置在状态栏下方开始
  • [足式机器人]Part2 Dr. CAN学习笔记-Ch0-1矩阵的导数运算
  • SAP ABAP ALV创建动态树形菜单
  • harmonyOS学习笔记之stateStyles
  • Python工具类函数—时间转换处理 进阶版
  • qnx learning
  • 轻量级网络结构的目标检测算法——Yolov8介绍
  • 深入理解和使用volatile关键字