Ansible 中的copy 复制模块应用详解

作者主页:点击! 

Ansible专栏:点击!

创作时间:2024年4月25日13点40分


Ansible 中的 copy 模块用于将文件或目录从本地计算机或远程主机复制到远程主机上的特定位置。它是一个功能强大的模块,可用于各种文件传输任务.

作用

  • 将配置文件复制到远程服务器
  • 将应用程序部署到远程服务器
  • 将日志文件从远程服务器复制到本地计算机
  • 备份和恢复文件和目录

copy 模块的主要特性

  1. 简单高效:轻松复制文件和目录,维护文件系统元信息,例如权限和所有权。
  2. 灵活的源和目标:支持从本地或远程源复制到远程目标,从而实现跨各种机器的文件传输。
  3. 递归复制:有效地处理目录,复制整个目录结构及其内容。
  4. 内容替换:允许用更新的内容替换现有文件,确保最新的配置。
  5. 强制覆盖:提供强制覆盖现有文件的选项,确保无论以前的内容如何都会应用更改。
  6. 条件执行:根据目标文件的存在启用条件执行,防止不必要的复制。
  7. 模板支持:与 Ansible 模板功能集成,允许在文件传输期间插入动态内容。

copy 模块的常见用例

  • 分发配置文件:将 .conf.ini 文件等配置文件部署到远程计算机以获得一致的系统设置。

  • 管理应用程序文件:将应用程序文件、脚本或库复制到远程服务器以进行应用程序部署或更新。

  • 传输日志文件:从远程计算机收集日志文件以进行集中分析或故障排除。

  • 备份关键文件:创建重要文件或目录的备份以确保数据完整性。

实验环境及要求

在三台centos中操作

一台安装ansible的服务器来控制另外两台客户端

1.进行上传文件

2.对于文件给予用户,组权限

3.对于文件做备份防止数据覆盖丢失

服务器操作

1.定义一个组
vim /etc/ansible/host

通过以下配置就是创建一个webServers组 并且加入两个主机 再给组赋予变量 用户名和密码 这样组下的所有主机都可以访问 更加的便捷

[webServers]
host1 host2​
[webServers:vars]
ansible_ssh_user='root'
ansible_ssh_pass='abc-123'

2.复制文件到主机
[root@ansible ~]# ansible webServers -m copy -a 'src=/etc/hosts dest='/mnt/1.txt''
host1 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "567c665328a352fc66fb407c6202846af636f321", 
    "dest": "/mnt/1.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "b6a7bc016a776f6ce50625fc6cffb176", 
    "mode": "0644", 
    "owner": "root", 
    "secontext": "system_u:object_r:mnt_t:s0", 
    "size": 225, 
    "src": "/root/.ansible/tmp/ansible-tmp-1713862721.36-10115-179845013773750/source", 
    "state": "file", 
    "uid": 0
}
host2 | CHANGED => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/bin/python"
    }, 
    "changed": true, 
    "checksum": "567c665328a352fc66fb407c6202846af636f321", 
    "dest": "/mnt/1.txt", 
    "gid": 0, 
    "group": "root", 
    "md5sum": "b6a7bc016a776f6ce50625fc6cffb176", 
    "mode": "0644", 
    "owner": "root", 
    "secontext": "system_u:object_r:mnt_t:s0", 
    "size": 225, 
    "src": "/root/.ansible/tmp/ansible-tmp-1713862721.32-10117-26808343561370/source", 
    "state": "file", 
    "uid": 0
}

先来大致分析一下每行的内容

  • "ansible_facts": { ... } :此部分包含 Ansible 发现的有关远程计算机的信息。在本例中,它显示发现的 Python 解释器路径 ( /usr/bin/python )。
  • "changed": true :这表示复制操作导致远程计算机发生更改。这意味着该文件以前不存在或内容不同。
  • "checksum""md5sum" :它们提供复制文件的校验和,可用于验证目的。
  • "dest": "/mnt/1.txt" :这会确认远程计算机上复制文件的目标路径。
  • "owner": "root""group": "root""mode": "0644" :这显示复制文件的所有权、组所有权和权限。在这里,它表示该文件由 root 用户和组拥有,并且对所有者(root)具有读/写权限,对其他人具有只读权限。
  • "secontext" :这提供有关文件的安全增强型 Linux (SELinux) 上下文的信息。
  • "size": 225 :这显示复制文件的大小(以字节为单位)。
  • "src": "/root/.ansible/tmp/ansible-tmp-1713862721.36-10115-179845013773750/source" :这会显示 Ansible 在将源文件复制到远程计算机之前暂存源文件的临时位置。 Ansible 通常会出于处理目的创建临时文件。
  • "state": "file" :表示对文件进行操作的模块。

总之,输出确认 /etc/hosts 文件(或任何源文件)已成功复制到 webServers 组中所有目标计算机上的 /mnt/1.txt

客户端检测是否成功

[root@localhost ~]# ls /mnt
[root@localhost ~]# ls
anaconda-ks.cfg
[root@localhost ~]# cd /mnt
[root@localhost mnt]# ls
[root@localhost mnt]# ls
1.txt
[root@localhost mnt]# cat 1.txt 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.93.111 ansible

192.168.93.112 host1
192.168.93.113 host2

3.复制用户组权限文件

再次传输分发一个文件 这次附带用户和组以及权限

[root@ansible ~]# ansible webServers -m copy -a 'src=/etc/hosts dest=/mnt/2.txt owner=root group=bin mode=770'

  • src=/etc/hosts : 此选项指定源文件,在本例中为位于控制机上的 /etc/hosts 。该文件包含重要的网络配置信息。

  • dest=/mnt/2.txt : 此选项定义远程计算机上的目标路径和文件名。此处,该文件将被复制到所有目标主机上的 /mnt 目录并重命名为 2.txt

  • owner=root : 此选项将复制文件的所有权设置为远程计算机上的 root 用户。这意味着只有 root 用户才拥有该文件的完全读取、写入和执行权限。

  • group=bin : 此选项将复制文件的组所有权设置为远程计算机上的 bin 组。 bin 组的成员将具有与 mode 选项指定的相同权限。

  • mode=770 : 此选项确定复制文件的文件权限。 770 值表示二进制数字的组合,用于定义所有者、组和其他人的权限。

客户端查看

可以看出权限确实改变了

[root@localhost mnt]# ll
总用量 8
-rw-r--r--. 1 root root 225 4月  23 16:58 1.txt
-rwxrwx---. 1 root bin  227 4月  23 17:14 2.txt

如果文件未更改任何数据的时候再次执行命令上传

[root@ansible ~]# ansible webServers -m copy -a 'src=/etc/hosts dest=/mnt/2.txt owner=root group=bin 

修改一下复制的源文件 再里边随便添加内容我们再次上传查看是否成功

[root@ansible ~]# vim /etc/hosts
[root@ansible ~]# ansible webServers -m copy -a 'src=/etc/hosts dest=/mnt/2.txt owner=root group=bin mode=770'

客户端查看

这样的操作数据会被覆盖 文件名重复的时候也会覆盖掉 文件 造成数据丢失

这时候我们需要使用copy模块的一个选项

backup=yes (重要补充):在复制新内容之前在远程计算机上创建原始文件的备份。

[root@ansible ~]# ansible webServers -m copy -a 'src=/etc/hosts dest=/mnt/2.txt owner=root group=bin mode=770 backup=yes'

客户端查看

使用ls -la查看 可以发现上传的文件并没有被覆盖掉 而是形成一个备份存放

查看数据是否丢失

现在就有了两个文件数据测试成功

copy常用的参数

参数描述数据类型默认值
src指定要复制的文件或目录的源路径。字符串
dest指定远程主机上要复制到的目标路径。字符串
force强制覆盖目标文件或目录,即使它已经存在。布尔值yes
content指定要写入目标文件的内容(用于创建新文件或覆盖现有文件)。字符串
remote_src指定远程主机上的源路径(用于从远程主机复制文件)。字符串
delimiter指定要用于分隔 content 参数中的键值对的字符。字符串=
directory_mode指定要应用于目标目录的权限。字符串0755
file_mode指定要应用于目标文件的权限。字符串0644
owner指定目标文件的用户所有者。字符串源文件所有者
group指定目标文件的组所有者。字符串源文件组所有者
preserve_timestamps保留源文件或目录的时间戳。布尔值yes
backup创建目标文件或目录的备份。布尔值no
checksum使用指定算法计算源文件或目录的校验和。字符串md5
validate_checksum验证目标文件或目录的校验和是否与源文件或目录的校验和匹配。布尔值no

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/572800.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

prometheus helm install 如何配置告警模版

对接企业微信 获取企业id 注册完成之后,通过企业微信官网登录后台管理,在【我的企业】的企业信息里面,获取到Alertmanager服务配置需用到的第一个配置:企业ID 获取部门id 部门ID 在【通讯录】中,添加一个子部门&a…

无人机+自组网:2U机架车载式自组网电台技术详解

自组网的特点包括自发现、自动配置、自组织和自愈等。由于网络中的节点可以随时加入或离开,自组网需要能够自动感知拓扑结构的变化,并快速调整路由策略以适应新的网络环境。此外,自组网中的节点还需要具备节能、安全和分布式管理等特性&#…

maixcam如何无脑运行运行别人的模型(以安全帽模型为例)

maixcam如何无脑运行运行别人的模型(以安全帽模型为例) 本文章主要讲如何部署上传的模型文件,以及如果你要把你模型按照该流程应该怎么修改,你可以通过该文章得到你想要的应该,该应用也包含的退出按钮,是屏…

质量管理系统( QMS):一文扫盲,质量重于泰山。

一、什么是QMS系统 QMS系统是质量管理系统(Quality Management System)的缩写。它是一种组织内部用于管理和控制质量相关活动的体系,旨在确保产品或服务符合质量标准和客户要求。 QMS系统通常包括一系列文件、程序和流程,用于规…

Linux常用命令总结(四):文件权限及相关命令介绍

1. 文件属性信息解读 1. 文件类型和权限的表示 0首位表示类型。在Linux中第一个字符代表这个文件是目录、文件或链接文件 符号对应文件类型-代表文件dd 代表目录l链接文档(link file); 1-3位确定属主(该文件的所有者)拥有该文件的权限。 4-6…

【信息收集】端口扫描masscan负载均衡识别lbd

★★免责声明★★ 文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与学习之用,读者将信息做其他用途,由Ta承担全部法律及连带责任,文章作者不承担任何法律及连带责任。 1、什么是masscan masscan在kali系统上是自带的端口扫描…

【golang学习之旅】报错:a declared but not used

目录 报错原因解决方法参考 报错 代码很简单,如下所示。可以发现a和b都飙红了: 运行后就会出现报错: 报错翻译过来就是a已经声明但未使用。当时我很疑惑,在其他语言中从来没有这种情况。况且这里的b不是赋值了吗,怎…

SSL证书一年要多少钱

经常会被人问道:“安装SSL证书一年得要多少钱?”其实证书的类型不同、功能不同、品牌不同,证书的价格也会不一样。SSL证书的价格因其类型、品牌、购买渠道以及所包含的服务和支持等因素而有所不同。通常一年的费用从几十元到几万元不等。 一…

[Swift]单元测试

编写单元测试是确保你的代码质量和功能正确性的重要步骤 一、编写单元测试的详细流程 1. 创建一个新的Xcode项目 如果你尚未创建一个项目,首先你需要在Xcode中创建一个新的iOS项目: 打开Xcode,选择“File” > “New” > “Project”…

【黑马点评Redis——004达人探店】

1.发布探店笔记 2.点赞 利用Redis中的Set集合来判断是否点赞过。 3.点赞排行榜 可以通过SortedSet来按点赞时间进行排序。 4.好友关注 4.1.关注和取关 4.2.共同关注 可以通过set实现交集的功能 4.3.关注推送 4.3.1 拉模式 拉模式(Pull)&#x…

Android 13 Layer数据结构

Layer::State state的定义 State mDrawingState; 一个mDrawingState的变量struct State {Geometry active_legacy;Geometry requested_legacy;int32_t z;ui::LayerStack layerStack;#endifuint32_t flags;uint8_t reserved[2];int32_t sequence; // changes when visible regi…

解决Oracle锁表的方法

在实际工作中,并发量比较大的项目,经常会出现锁表的问题,下面我将复现这个问题,并给出解决方法。 一、问题复现 1、session1修改aabb表的B字段为迪迦奥特曼,但是不提交该事务。 2、session2也修改这行的这个字段。 发…

基于Springboot的网上商城购物系统

基于SpringbootVue的网上商城购物系统的设计与实现 开发语言:Java数据库:MySQL技术:SpringbootMybatis工具:IDEA、Maven、Navicat 系统展示 用户登录 首页 商品信息 商品资讯 后台登录页面 后台管理首页 用户管理 商品分类管…

SVG 绘制微信订阅号icon

效果 代码 <!DOCTYPE html> <html> <body><svg xmlns"http://www.w3.org/2000/svg" version"1.1" width"600" height"600"><rect x"0" y"0" rx"0" ry"0" width&…

【C++】5.C语言/C++内存管理

一、C/C内存分布 栈中存储的是局部变量&#xff0c;函数参数&#xff0c;返回值等 堆主要用于动态内存分配 数据段用以存储全局数据和静态数据 代码段存储可执行代码和常量 二、C语言和C中的内存管理方式 在C语言中&#xff0c;我们使用 malloc、calloc、realloc、free来进…

AI-数学-高中-43常见函数的导数

原作者视频&#xff1a;【导数】【一数辞典】2常见函数的导数_哔哩哔哩_bilibili

【C++】——类和对象(构造函数,析构函数,拷贝构造函数,赋值运算符重载)

创作不易&#xff0c;多多支持&#xff01; 前言 相信你对这几个知识点有点混淆&#xff0c;相信看完以后&#xff0c;你会对此有一个清晰的认识。 一 类的6个默认成员函数 如果我们写一个类&#xff0c;但是类里面什么都没有&#xff0c;我们称之为空类。 其实这个类也不…

AWS SES发送邮件如何正确配置?操作指南?

AWS SES发送邮件有哪些限制&#xff1f;AWS SES发信的注意事项&#xff1f; AWS SES作为亚马逊云服务提供的一项高效、可靠的电子邮件发送服务&#xff0c;受到了众多企业的青睐。然而&#xff0c;如何正确配置AWS SES发送邮件。AokSend将详细解析AWS SES发送邮件的配置过程&a…

《苍穹外卖》Day07部分知识点记录

一、菜品缓存 减少查询数据库的次数&#xff0c;优化性能 客户端&#xff1a; package com.sky.controller.user;import com.sky.constant.StatusConstant; import com.sky.entity.Dish; import com.sky.result.Result; import com.sky.service.DishService; import com.sky…

搜维尔科技:如何选择最佳的xsens动作捕捉设备

xsens介绍 如何选择最佳的xsens动作捕捉设备 选择最佳的 Xsens 动作捕捉设置并不总是像我们希望的那样简单。根据每个人的情况&#xff0c;会有不同的选择、要求和挑战。 这就是我们创建此博客的原因&#xff1a;帮助您做出最适合您的决定。 您已经决定继续使用 Xsens 了吗…