别让通配符限制你的 Ansible Fetch 操作,这里有破解之道!

开发 系统
​关于如何用 ansible​ 批量拉取远端的日志文件,这里分享一个实用的解决方案。

在工作中,我们经常需要从多台服务器上拉取日志文件。虽然ansible的fetch模块看起来支持通配符,但实际使用中却遇到了问题。这让我有点困惑,但也促使我找到了更好的解决办法。

问题复现

比如,我要在node1节点上拉取多个csv文件。按照直觉,我直接用了通配符:

ansible node1  -m fetch -a "src=/root/*.csv dest=./ flat=yes"

但结果却是失败:

the remote file does not exist, not transferring, ignored

这让我很疑惑:明明文件是存在的啊!

分步解决办法

其实,ansible的fetch模块对通配符的支持并不友好。通过实践,我找到了一个更可靠的方法,分两步就能解决问题:

(1) 先把远端的文件找出来

先用find模块在远端主机上搜索所有符合条件的文件。比如,我可以这样写:

- name: 查找所有CSV文件
  find:
    paths: /root/
    patterns: "*.csv"
    recurse: yes
  register: csv_files

这就像是让ansible机器人帮我把所有符合条件的文件列出来。

(2) 一个一个拉回来

找到文件后,再把这些文件一个一个拉回来:

- name:拉取找到的CSV文件
fetch:
    src:"{{ item.path }}"
    dest:"./"
    flat:yes
loop:"{{ csv_files.files }}"
when:csv_filesisdefinedandcsv_files.files|length> 0

这样,ansible就会按顺序把所有找到的文件都拉到本地了。

怎么做呢?很简单!

(1) 把这些内容保存成一个文件,比如叫fetch_csv.yml

(2) 在电脑上运行:

ansible-playbook fetch_csv.yml

这样就搞定了!如下图所示:

  • 权限问题:确保ansible账号在远程服务器上有权限访问这些文件
  • 路径问题:确认文件路径和文件名是正确的,避免小错误导致失败

小结

其实,这个方法不仅适用于csv文件,任何类型的文件都可以用同样的方法批量拉取。希望这个方法能帮到你,解决批量拉取文件的困扰!

责任编辑:赵宁宁 来源: 攻城狮成长日记
相关推荐

2020-06-12 07:36:33

Redis

2020-11-02 15:49:35

机器学习技术云计算

2020-11-30 10:58:52

Linux操作系统Windows

2022-12-27 14:52:31

Kubernetes云原生开发

2016-07-12 10:03:37

2019-05-23 10:18:19

监控组件cpu

2023-11-21 08:45:10

JSON性能程序

2020-05-12 10:43:24

物联网数据技术

2020-04-21 14:49:35

物联网数据技术

2022-12-21 14:21:19

云计算供应商IT

2018-03-25 09:11:31

大数据机器学习分析软件

2017-04-11 12:37:56

人工智能深度学习互联网

2018-03-20 13:28:16

数据结构堆栈算法

2018-04-02 11:22:31

大数据Hadoop数据处理

2015-09-20 15:50:46

2017-10-20 13:17:21

2021-10-13 17:58:57

模型人工智能函数

2023-11-27 17:24:43

2019-04-29 08:30:20

Python可视化工具数据可视化

2016-08-23 00:39:25

点赞
收藏

51CTO技术栈公众号