当前位置: 首页 > article >正文

Ansible fetch模块详解:轻松从远程主机抓取文件

在自动化运维的过程中,我们经常需要从远程主机下载文件到本地,以便进行分析或备份。Ansiblefetch模块正是为了满足这一需求而设计的,它可以帮助我们轻松地从远程主机获取文件,并将其保存到本地指定的位置。在这篇文章中,我们将详细探讨如何使用fetch模块,以及它在实际工作中的常见应用场景。

目录

    • 📝fetch模块的功能
    • 📝fetch模块的常用参数
    • 📝`fetch`模块的基本用法
      • ✍️从远程主机抓取文件
      • ✍️抓取多个文件
      • ✍️保留原有目录结构
      • ✍️文件不存在时的错误处理
        • ✍️使用checksum验证文件
    • 📝fetch模块的高级用法
      • ✍️下载目录
        • ✍️使用`register`和`debug`输出文件信息
    • 📝总结
    • 推荐阅读

📝fetch模块的功能

fetch模块的主要功能是从目标主机(被管理主机)中抓取指定的文件或目录,并将其下载到控制主机的指定路径下。常见的应用场景包括:

  1. 从远程主机抓取日志文件进行分析。

  2. 从远程主机下载配置文件进行备份。

  3. 抓取诊断数据或错误信息供后续处理。

📝fetch模块的常用参数

参数描述类型必填
src远程主机上的文件或目录路径字符串
dest本地控制主机保存文件的路径字符串
flat是否保留目录结构,yes保留,no不保留布尔值
fail_on_missing如果远程文件不存在,是否报错,yesno布尔值
validate_checksum是否验证文件的checksum,默认yes布尔值

📝fetch模块的基本用法

✍️从远程主机抓取文件

最简单的用法是从远程主机上抓取一个文件并保存到本地控制主机上。

ansible node1 -m fetch \
-a "src=/var/log/auth.log dest=/tmp/"

在这个例子中,我们从 node1 组中的主机上指定要下载的文件路径(通过 src 参数),然后指定这些文件在本地控制主机上的保存位置(通过 dest 参数)。文件将会被下载并保存到你指定的目录中。

执行完上述的命令后,输出如下图的结果:

✍️抓取多个文件

如果需要抓取多个文件,建议采用playbook的方式,并利用with_items循环来轻松实现对多个文件的处理。这种方式既灵活又高效。

- name: 从远程主机抓取多个日志文件
  hosts: node1
  tasks:
  - name: 从远程主机抓取多个日志文件
    ansible.builtin.fetch:
      src: "{{ item }}"
      dest: /tmp/logs/
    with_items:
      - /var/log/mail.log
      - /var/log/syslog.2.gz

然后你只需要运行下面的命令:

ansible-playbook download.yml

执行完上述命令后,输出如下结果:

✍️保留原有目录结构

默认情况下,fetch模块会将远程文件下载到目标路径下,是保留原有的目录结构。如果需要不保留远程主机的目录结构,可以使用flat: yes参数。

ansible node1 -m fetch \
-a "src=/var/log/syslog dest=/tmp/ flat=yes"

此时,文件syslog将不被保留原有的目录结构,并下载到/tmp/syslog。如下图所示:

✍️文件不存在时的错误处理

如果远程文件不存在,fetch模块会报错。可以通过fail_on_missing: no来防止错误抛出,控制任务继续执行。


ansible node1 -m fetch \
-a "src=/var/log/nonexistent.log dest=/tmp/logs/ fail_on_missing=no"
✍️使用checksum验证文件

在抓取文件时,可以启用validate_checksum来验证文件的checksum,确保文件的完整性。


ansible node1 -m fetch \
-a "src=/var/log/syslog dest=/tmp/logs/ validate_checksum=yes"

📝fetch模块的高级用法

✍️下载目录

fetch模块不仅支持下载单个文件,还支持下载整个目录。

ansible node1 -m fetch \
-a "src=/home/user/data/ dest=/tmp/data_backup/"

此命令会将远程主机上的/home/user/data/目录及其内容递归下载到本地控制主机的/tmp/data_backup/目录中,保留目录结构。

✍️使用registerdebug输出文件信息

可以使用register来保存抓取的文件信息,并通过debug模块查看抓取的文件路径等详细信息。

- name: 从远程主机抓取文件并保存结果
  hosts: node1
  tasks:
  - name: 从远程主机抓取文件并保存结果
    ansible.builtin.fetch:
      src: /var/log/syslog
      dest: /tmp/log/
    register: fetched_file
  
  - name: 输出抓取的文件信息
    ansible.builtin.debug:
      var: fetched_file

📝总结

Ansible的fetch模块为我们提供了简单高效的远程文件下载解决方案。无论是抓取单个文件、多个文件,还是整个目录,它都能轻松完成任务。通过结合使用flatfail_on_missing等参数,我们可以灵活应对各种场景。掌握fetch模块,将极大提高我们的自动化运维效率。

推荐阅读


  • 告别手动编辑:如何用Python快速创建Ansible hosts文件?
  • 一分钟学会Ansible cron模块,高效管理你的定时任务
  • 打造更安全的Linux系统:玩转PAM配置文件
  • Ansible实战:如何正确选择command和shell模块?
  • 运维效率倍增!Ansible Copy 模块必知必会操作
  • 如何在Ansible中轻松实现复杂SSH跳转?这个参数搞定


http://www.kler.cn/a/515772.html

相关文章:

  • K8S中Service详解(一)
  • LabVIEW滤波器选择与参数设置
  • 逐笔成交逐笔委托Level2高频数据下载和分析:20250122
  • 【玩转全栈】----Django基本配置和介绍
  • 深入探究 YOLOv5:从优势到模型导出全方位解析
  • MyBatis最佳实践:提升数据库交互效率的秘密武器
  • git如何设置pull的时候有些文件不pull
  • GitCode 助力 AutoTable:共创 MyBatis 生态的自动表格管理新篇章
  • 常见的RocketMQ面试题及其简要答案
  • Ubuntu系统更改IP,保姆级教程
  • 【Redis】在Java中以及Spring环境下操作Redis
  • 快速搭建深度学习环境(Linux:miniconda+pytorch+jupyter notebook)
  • java开发之文件上传
  • 202112 青少年软件编程等级考试C/C++ 二级真题答案及解析(电子学会)
  • uiautomator2教程
  • Flink Gauss CDC:深度剖析存量与增量同步的创新设计
  • 自定义UITableViewCell
  • 小米Vela操作系统开源:AIoT时代的全新引擎
  • 《安富莱嵌入式周报》第349期:VSCode正式支持Matlab调试,DIY录音室级麦克风,开源流体吊坠,物联网在军工领域的应用,Unicode字符压缩解压
  • 网络协议入门:OSI模型与TCP/IP栈
  • 深度学习系列75:sql大模型工具vanna
  • linux网络 | 传输层TCP | 认识tcp报头字段与分离
  • 心法利器[127] | 24年算法思考-特征工程和经典深度学习
  • 【计算机网络】- 应用层HTTP协议
  • JavaScript —— 输入与输出
  • Java TCP可靠传输(1)