Ansible自动化工具copy复制用法

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: Ansible 中的 copy 模块用于将文件或目录从本地计算机或远程主机复制到远程主机上的特定位置。它是一个功能强大的模块,可用于各种文件传输任务.### 作用将配置文件复制到远程服务器将应用程序部署到远程服务器将日志文件从远程服务器复制到本地计算机备份和恢复文件和目录

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

作用

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

copy 模块的主要特性

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

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

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

  1. 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

相关文章
|
9天前
|
机器人 测试技术 持续交付
现代软件测试中的自动化工具与策略
随着软件开发的快速发展,自动化测试成为提高软件质量和加快发布速度的关键。本文探讨了现代软件测试中自动化工具和策略的重要性及其应用,旨在帮助开发团队更有效地实施自动化测试,提升整体开发效率和产品质量。
|
28天前
|
运维 监控 Docker
构建高效微服务架构:从理论到实践构建高效自动化运维体系:Ansible与Docker的完美融合
【5月更文挑战第31天】 在当今软件开发的世界中,微服务架构已经成为了实现可伸缩、灵活且容错的系统的关键策略。本文将深入探讨如何从零开始构建一个高效的微服务系统,涵盖从概念理解、设计原则到具体实施步骤。我们将重点讨论微服务设计的最佳实践、常用的技术栈选择、以及如何克服常见的挑战,包括服务划分、数据一致性、服务发现和网络通信等。通过实际案例分析,本文旨在为开发者提供一套实用的指南,帮助他们构建出既健壮又易于维护的微服务系统。
|
14天前
|
人工智能 搜索推荐 API
开源2.0|从事视频剪辑的“熬者们”,自动化剪辑工具 FunClip请收好
开源2.0|从事视频剪辑的“熬者们”,自动化剪辑工具 FunClip请收好
开源2.0|从事视频剪辑的“熬者们”,自动化剪辑工具 FunClip请收好
|
8天前
|
jenkins 测试技术 持续交付
软件测试的自动化:工具与策略的探索
【6月更文挑战第20天】探索软件测试自动化:强调效率、一致性与持续集成。Selenium、Appium、Postman和Jenkins等工具助力自动化测试,策略包括明确测试目标、选对工具、编写优质用例和持续集成。自动化测试优化软件质量,提升团队能力,适应快速发展的行业需求。
|
8天前
|
机器学习/深度学习 人工智能 机器人
现代软件测试中的自动化工具与技术
随着软件开发复杂性的增加,自动化测试在现代软件开发中变得至关重要。本文探讨了当前流行的自动化测试工具和技术,以及它们如何提高软件质量、加快发布速度和降低成本。
22 1
|
19天前
|
数据采集 Web App开发 前端开发
Selenium:自动化Web浏览器操作的强大工具
**Selenium** 是一款用于自动化Web应用测试和模拟用户行为的工具,支持多种浏览器和编程语言。安装包括安装Selenium库和对应浏览器的WebDriver。基本用法包括导入库、启动浏览器、查找与操作页面元素、等待元素加载及关闭浏览器。在实际项目中,Selenium常用于Web测试、爬虫、自动化表单填写等,优点是跨平台、模拟真实用户行为,但性能较低且依赖浏览器。
43 9
|
22天前
|
测试技术 持续交付
软件测试中的自动化工具及其应用
本文将探讨软件测试中自动化工具的特点、优势以及常见应用场景,重点介绍了自动化测试工具在提高测试效率、减少人力成本以及保证软件质量方面的重要作用。通过深入分析自动化测试工具的应用实例,帮助读者更好地理解和运用现代软件测试工具。
46 1
|
28天前
|
运维 关系型数据库 Shell
运维自动化之 ansible
运维自动化之 ansible
|
29天前
|
运维 Devops 测试技术
构建高效自动化运维体系:基于Ansible的实践指南
【5月更文挑战第30天】 在当今IT基础设施管理领域,自动化已成为提高效率、确保一致性和减少人为错误的关键。本文将探讨如何利用Ansible这一强大的自动化工具来构建一个高效的运维自动化体系。文章不仅介绍了Ansible的基本原理和组件,还通过实际案例展示了如何集成Ansible到现有的运维流程中,以及如何处理常见的自动化挑战。读者将获得一套实用的策略和最佳实践,以优化其自动化运维工作。
|
30天前
|
弹性计算 运维 监控
【阿里云弹性计算】ECS实例的生命周期管理:阿里云自动化工具与策略介绍
【5月更文挑战第29天】阿里云提供自动化工具和策略管理ECS实例生命周期,如资源编排服务(ROS)实现一键部署,通过模板定义实例配置;自动化运维服务(OOS)执行自动化运维任务;弹性伸缩策略动态调整实例数量;定时启动/停止策略节省成本;监控告警策略确保业务连续性。通过这些工具和策略,企业可实现ECS实例的高效管理。
63 2