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
}

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

  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月前
|
运维 Prometheus 监控
3 年部署经验总结:用自动化工具轻松管理 300+ 服务器开源软件
三年前接手公司IT部门时,我满怀信心,却发现部署效率低下。尽管使用了GitLab、Jenkins、Zabbix等100+开源工具,部署仍耗时费力。文档厚重如百科,却难解实际困境。一次凌晨三点的加班让我下定决心改变现状。偶然看到一篇国外博客,介绍了自动化部署的高效方式,我深受启发。
384 0
|
9月前
|
机器学习/深度学习 人工智能 测试技术
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
EdgeMark是一个面向嵌入式AI的自动化部署与基准测试系统,支持TensorFlow Lite Micro、Edge Impulse等主流工具,通过模块化架构实现模型生成、优化、转换与部署全流程自动化,并提供跨平台性能对比,助力开发者在资源受限设备上高效选择与部署AI模型。
788 9
EdgeMark:嵌入式人工智能工具的自动化与基准测试系统——论文阅读
|
8月前
|
人工智能 搜索推荐 UED
一个牛逼的国产AI自动化工具,开源了 !
AiPy是国产开源AI工具,结合大语言模型与Python,支持本地部署。用户只需用自然语言描述需求,即可自动生成并执行代码,轻松实现数据分析、清洗、可视化等任务,零基础也能玩转编程,被誉为程序员的智能助手。
|
10月前
|
人工智能 数据可视化 数据挖掘
团队日报不用愁!自动化生成工具亲测:任务进度实时同步
本文深入分析了传统手动日报在数据孤岛、格式混乱和时效性差三大痛点,并探讨了自动化日报带来的效率提升、决策优化等四大核心价值。通过对板栗看板、SmartBrief、n8n 等六款主流工具的功能、适用场景及实战效果进行测评,为企业提供科学的选型建议与实施路径。
团队日报不用愁!自动化生成工具亲测:任务进度实时同步
|
9月前
|
Java 测试技术 API
自动化测试工具集成及实践
自动化测试用例的覆盖度及关键点最佳实践、自动化测试工具、集成方法、自动化脚本编写等(兼容多语言(Java、Python、Go、C++、C#等)、多框架(Spring、React、Vue等))
753 6
|
10月前
|
人工智能 供应链 数据可视化
工作流梳理工具实战教程:手把手教你绘制第一张自动化流程图
本文剖析了团队因流程混乱导致重复劳动和效率低下的问题,提出通过工作流梳理提升协作效率的解决方案。总结了流程梳理的六大核心需求,并深度测评了6款主流工具,国内有板栗看板那,国外有kiss flow结合团队规模与需求提供选型建议,助力企业高效落地流程优化。
|
8月前
|
人工智能 缓存 自然语言处理
86_自动化提示:AutoPrompt工具
在当今人工智能领域,提示工程(Prompt Engineering)已成为释放大语言模型(LLM)潜能的关键技术。随着LLM规模和能力的不断增长,如何设计高效、精确的提示词成为研究和应用的焦点。然而,传统的手工提示工程面临着巨大挑战
619 0
|
11月前
|
数据采集 人工智能 API
推荐一款Python开源的AI自动化工具:Browser Use
Browser Use 是一款基于 Python 的开源 AI 自动化工具,融合大型语言模型与浏览器自动化技术,支持网页导航、数据抓取、智能决策等操作,适用于测试、爬虫、信息提取等多种场景。
1516 4
推荐一款Python开源的AI自动化工具:Browser Use
|
9月前
|
安全 搜索推荐 机器人
风险规则引擎-RPA 作为自动化依赖业务决策流程的强大工具
机器人流程自动化(RPA)是一种通过软件“机器人”自动执行重复性任务的技术,能大幅提升工作效率。它适用于财务、电商等领域的标准化流程,如账单处理和退货管理。然而,RPA在复杂决策场景中存在局限,需结合决策模型(DMN)和业务规则管理系统(BRMS)实现流程与决策的协同自动化,从而增强灵活性与业务价值。
|
11月前
|
运维 监控 持续交付
还在为部署开源工具烦恼?自动化部署工具 Websoft9一键部署 300+ 开源应用
在数字化时代,开源工具因免费、灵活、可定制等特性广受欢迎,但其部署过程却常因环境配置复杂、依赖繁琐、耗时长等问题令人头疼。本文介绍了传统部署的三大难点,并提出两种解决方案:传统手动部署与集成化控制台部署。
还在为部署开源工具烦恼?自动化部署工具 Websoft9一键部署 300+ 开源应用