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

admin 2025年2月27日22:59:27评论6 views字数 997阅读3分19秒阅读模式

字数 716,阅读大约需 4 分钟

关于如何用ansible批量拉取远端的日志文件,这里分享一个实用的解决方案在工作中,我们经常需要从多台服务器上拉取日志文件。虽然ansiblefetch模块看起来支持通配符,但实际使用中却遇到了问题。这让我有点困惑,但也促使我找到了更好的解决办法。

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

问题复现

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

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

但结果却是失败:

the remote file does not exist, not transferring, ignored

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

分步解决办法

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

  1. 1. 先把远端的文件找出来

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

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

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

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

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

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

怎么做呢?很简单!

  1. 1. 把这些内容保存成一个文件,比如叫fetch_csv.yml
  2. 2. 在电脑上运行:
ansible-playbook fetch_csv.yml

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

别让通配符限制你的Ansible Fetch操作,这里有破解之道!
  • • 权限问题:确保ansible账号在远程服务器上有权限访问这些文件
  • • 路径问题:确认文件路径和文件名是正确的,避免小错误导致失败

小结

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

原文始发于微信公众号(攻城狮成长日记):别让通配符限制你的Ansible Fetch操作,这里有破解之道!

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月27日22:59:27
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   别让通配符限制你的Ansible Fetch操作,这里有破解之道!https://cn-sec.com/archives/3778613.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息