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

简介: 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
}

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

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

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

[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查看 可以发现上传的文件并没有被覆盖掉 而是形成一个备份存放

查看数据是否丢失

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


opy常用的参数

参数 描述 数据类型 默认值
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
相关文章
|
2月前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible实战应用
【9月更文挑战第33天】本文将带你深入理解Ansible,一个强大的自动化运维工具。我们将从基础概念开始,逐步探索其配置管理、任务调度等功能,并通过实际案例演示其在自动化部署和批量操作中的应用。文章旨在通过浅显易懂的语言和实例,为读者揭开Ansible的神秘面纱,展示其在简化运维工作中的强大能力。
184 64
|
1月前
|
运维 应用服务中间件 Linux
自动化运维的利器:Ansible在配置管理中的应用
【10月更文挑战第39天】本文旨在通过深入浅出的方式,向读者展示如何利用Ansible这一强大的自动化工具来优化日常的运维工作。我们将从基础概念讲起,逐步深入到实战操作,不仅涵盖Ansible的核心功能,还会分享一些高级技巧和最佳实践。无论你是初学者还是有经验的运维人员,这篇文章都会为你提供有价值的信息,帮助你提升工作效率。
|
3月前
|
运维 安全 应用服务中间件
自动化运维的利剑:Ansible实战应用
【9月更文挑战第24天】在现代IT基础设施的快速迭代与扩展中,自动化运维成为提升效率、保障稳定性的关键。本文将深入探讨Ansible这一流行的自动化工具,通过实际案例分析其如何简化日常运维任务,优化工作流程,并提高系统的可靠性和安全性。我们将从Ansible的基础概念入手,逐步深入到高级应用技巧,旨在为读者提供一套完整的Ansible应用解决方案。
|
4月前
|
运维 Ubuntu 测试技术
自动化运维的利剑:Ansible在配置管理中的应用软件测试的艺术:探索性测试的深度与广度
【8月更文挑战第27天】 在数字化浪潮中,高效的运维工作是支撑企业IT系统稳定运行的关键。Ansible,作为一款简易而强大的自动化运维工具,正逐渐成为IT专业人士的新宠。本文将通过浅显易懂的语言和生动的案例,带你了解Ansible的核心概念、安装步骤、基础命令以及它在配置管理中的实际应用。我们的目标是让初学者能够轻松上手Ansible,同时为有经验的运维工程师提供一些实用的技巧和思路。
|
4月前
|
运维 应用服务中间件 网络安全
自动化运维的利器:Ansible在服务器管理中的应用
【8月更文挑战第28天】本文深入探讨了Ansible在简化和自动化服务器管理工作中的强大功能及其实际应用。通过浅显易懂的语言和具体示例,展示了如何利用Ansible进行批量配置、部署应用以及执行系统管理任务,旨在为读者提供一套完整的解决方案,以便更好地理解和应用Ansible,从而提高工作效率和减轻运维负担。
|
4月前
|
存储 运维 网络安全
自动化运维的利剑:Ansible在配置管理中的应用
【8月更文挑战第24天】随着云计算和微服务架构的兴起,传统运维方式已不能满足现代IT环境的需求。自动化运维成为提升效率、减少错误的关键。本文将深入探讨Ansible——一种流行的开源自动化工具,它如何通过简化配置管理和部署流程,帮助运维人员高效地管理服务器和应用。我们将从Ansible的基础概念出发,逐步介绍其在实际工作中的应用案例,并展示一些基础的代码示例,以助于理解其工作原理和使用方法。
|
1月前
|
运维 监控 安全
自动化运维的利剑:Ansible在现代IT架构中的应用
在数字化浪潮中,企业对IT系统的敏捷性和可靠性要求日益提高。Ansible,一种简单但强大的自动化运维工具,正成为现代IT架构中不可或缺的一部分。它通过声明式编程语言YAM,简化了系统配置、应用部署和任务自动化的过程,显著提升了运维效率和准确性。本文将深入探讨Ansible的核心特性、应用场景以及如何有效整合进现有IT环境,为读者揭示其在自动化运维中的实用价值和未来发展潜力。
|
1月前
|
运维 Devops 应用服务中间件
自动化运维的利剑:Ansible在现代IT架构中的应用
【10月更文挑战第42天】本文旨在揭示自动化运维工具Ansible如何革新现代IT架构,通过简化配置管理和部署流程,提升效率和可靠性。我们将探索Ansible的核心功能、语言特性以及其在DevOps文化中的角色。文章还将展示如何借助Ansible构建模块化和可重用的配置代码,实现快速迭代与部署,并确保系统一致性。通过阅读本文,运维人员将了解如何利用Ansible优化日常任务,加速产品上线速度,同时提高系统的稳健性。
40 5
|
1月前
|
运维 监控 应用服务中间件
自动化运维的利器:Ansible实战应用
【10月更文挑战第41天】在现代IT运维领域,自动化已成为提高效率、减少错误的关键。Ansible作为一种简单而强大的自动化工具,正被越来越多的企业采纳。本文将通过实际案例,展示如何使用Ansible简化日常运维任务,包括配置管理和批量部署等,旨在为读者提供一种清晰、易懂的自动化解决方案。
28 1
|
1月前
|
运维 Ubuntu 应用服务中间件
自动化运维工具Ansible的实战应用
【10月更文挑战第36天】在现代IT基础设施管理中,自动化运维已成为提升效率、减少人为错误的关键手段。本文通过介绍Ansible这一流行的自动化工具,旨在揭示其在简化日常运维任务中的实际应用价值。文章将围绕Ansible的核心概念、安装配置以及具体使用案例展开,帮助读者构建起自动化运维的初步认识,并激发对更深入内容的学习兴趣。
58 4