Ansible自动化工具copy复制用法

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
容器镜像服务 ACR,镜像仓库100个 不限时长
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介: 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

相关文章
|
10天前
|
运维 自然语言处理 安全
自动化运维的利器:Ansible入门与实践
【8月更文挑战第33天】在现代IT基础设施的管理中,自动化运维已成为提高效率、减少错误的关键技术。Ansible作为一款开源的自动化配置管理和应用部署工具,以其简洁性、易用性和强大的功能受到广泛欢迎。本文将介绍Ansible的基本概念、安装步骤和简单使用,通过实际案例展示其在自动化运维中的应用。
|
5天前
|
运维 Ubuntu Devops
自动化运维工具的魅力:Ansible入门
【9月更文挑战第5天】在快速变化的IT世界里,自动化运维不再是可选项,而是必需品。Ansible,一款简单却强大的自动化工具,正成为众多DevOps工程师的首选。本文将带你了解Ansible的基本概念、安装步骤以及如何编写简单的Playbook,从而开启你的自动化之旅。
54 35
|
6天前
|
运维 Ubuntu Linux
掌握自动化运维:使用Ansible进行服务器配置管理
【9月更文挑战第5天】本文旨在通过深入浅出的方式,介绍如何利用Ansible这一强大的自动化工具来简化和加速日常的服务器配置管理工作。文章将首先概述自动化运维的重要性,接着详细讲解Ansible的基本概念、安装过程及其在服务器配置中的应用实例。我们将通过具体的操作步骤和代码示例,展示如何使用Ansible编写任务,以及如何执行这些任务以实现批量的服务器配置。最后,文章将探讨一些高级用法,帮助读者进一步提升自动化运维的能力。
|
6天前
|
运维 应用服务中间件 持续交付
自动化运维的利器:Ansible在配置管理中的应用
【9月更文挑战第4天】在现代企业中,随着服务器数量的增加和业务的复杂性提高,传统的手动运维方式已经无法满足快速、高效、稳定的业务需求。自动化运维应运而生,成为提升工作效率、减少人为错误的关键技术。本文将介绍Ansible这一自动化运维工具,通过实例展示其在配置管理中的应用,帮助读者理解如何借助Ansible简化日常运维工作,实现服务器的批量管理与自动化部署。
28 4
|
4天前
|
缓存 数据可视化 jenkins
推荐2款实用的持续集成与部署(CI&CD)自动化工具
推荐2款实用的持续集成与部署(CI&CD)自动化工具
|
9天前
|
运维 应用服务中间件 nginx
自动化运维:使用Ansible简化日常任务
【9月更文挑战第2天】在快速迭代的软件开发周期中,高效可靠的运维成为项目成功的关键。本文将介绍如何使用Ansible这一强大的自动化工具来简化日常运维任务,从基础概念到实战应用,带你一步步构建自动化运维流程,解锁更高效的工作方式。
|
10天前
|
运维 监控 应用服务中间件
自动化运维的新篇章:Ansible Playbooks入门与实战
【9月更文挑战第1天】在追求效率和稳定性的今天,自动化运维已经成为IT行业的必修课。本文将带你走进自动化工具Ansible的世界,通过实战案例深入理解Ansible Playbooks的编写和应用。文章不仅介绍基础概念,更通过具体代码示例,展示如何利用Ansible简化日常运维任务,提升工作效率。无论你是运维新手还是希望深化自动化技能的资深人士,本指南都将为你开启一段新的学习旅程。
|
9天前
|
安全 Linux 测试技术
Kali Linux预装的自动化渗透测试工具
Kali Linux预装的自动化渗透测试工具
20 2
|
11天前
|
运维 监控 开发工具
自动化运维工具的设计与实现
【8月更文挑战第31天】在现代软件开发和运维领域,自动化工具已成为提升效率、减少人为错误的关键。本文将介绍如何设计并实现一个自动化运维工具,旨在帮助团队简化日常任务,确保部署流程的顺畅与一致性。通过具体案例,我们将探讨工具的架构、功能模块以及如何集成到现有的运维流程中。
|
6天前
|
运维 应用服务中间件 持续交付
自动化运维之路:使用Ansible进行服务器配置管理
【9月更文挑战第5天】本文将引导您了解如何利用Ansible这一强大的自动化工具,来简化和加速您的服务器配置管理工作。我们将通过实际代码示例,展示如何使用Ansible编写Playbook,实现自动化部署、配置更新和任务执行。通过阅读本文,您不仅能够掌握Ansible的基本用法,还将学会如何构建可重复使用的自动化脚本,以提升运维效率和减少人为错误。