用Ansible查找文件并记录文件名的playbook

这篇是几年前写的文章,之前一直纠结按照知识的学习顺序去发布文章,所以有些文章写了但没有发出来,最近准备把之前写的文章发一发,不纠结这个问题了,不然好多文章可能因为软件版本过时等问题写了都过期了,帮助不到大家了。

本篇文章看标题便可以得知大概内容是与Ansible有关,我们需要用到的就是Ansible的find模块,find模块给了我们很多参数,但是不涉及查找文件的返回值,所以我们需要自己去定义。

如下面playbook所示,我们的需求是查找在test主机组下面的主机是否有后缀名为locked的文件,有的话,我们需要将其文件名输出到屏幕上并且记录到ansible的指定目录下面,方面我们后续去查找。

1、定义hosts主机清单

复制代码
[root@template ansible]# cat hosts 
[test]
192.168.101.113
192.168.11.112
192.168.100.45                                            
192.168.66.61                            
192.168.66.67                            
192.168.66.68                            
192.168.66.253                           
192.168.88.19                            
192.168.88.20                            
192.168.88.21                            
192.168.88.30                            
192.168.88.31                         

2、编辑playbook

复制代码
[root@template ansible]# cat find_locked.yaml 
---
- name: Find locked files
  hosts: test
  tasks:
  - name: Find files with locked extension
    find:
      paths: /
      recurse: yes
      patterns: "*.locked"
    register: locked_files				                            # 将内容注册为变量,方便后续输出与写入

  - name: Print locked file paths
    debug:
      var: locked_files.files|map(attribute='path')|list		    # 输出定义的变量内容

  - name: Write locked file paths to a file
    local_action:												    # 本地的动作字段
      module: copy
      content: "{{ locked_files.files|map(attribute='path')|list|join('\n') }}"
      dest: /koten/find_result_{{ inventory_hostname }}.txt
    when: locked_files.files|length > 0								# 加条件,如果找到文件才会写入,否则会所有主机写入一遍文本,但是有的没有内容

3、检查并执行playbook

如果要操作的主机没有做免密钥的话需要先做免密钥

复制代码
[root@template ansible]# ansible-playbook --syntax-check find_locked.yaml 

playbook: find_locked.yaml
[root@template ansible]# ansible-playbook -i hosts find_locked.yaml 

4、执行后在当前目录显示了最终的目录结构如下

复制代码
[root@template ansible]# ls
find_locked.yaml  find_result_192.168.11.112.txt  find_result_192.168.101.113.txt  hosts

5、内容为主机中后缀名为locked的文件路径

复制代码
[root@template ansible]# cat find_result_192.168.11.112.txt 
/data/logs/error.log.locked
/data/logs/info.log.locked
/data/logs/warn.log.locked
/data/logs/base.log.locked
/data/logs/httpLog.log.locked
/data/logs/sql.log.locked
...

我是koten,10年运维经验,持续分享运维干货,感谢大家的阅读和关注!

相关推荐
摸鱼仙人~4 小时前
大模型文章生成的风格个性化与多文体写作:一套可落地的方法论
linux·运维·服务器
xybDIY4 小时前
亚马逊云 Organizations 组织 Link 账号关联与解绑自动化解决方案
运维·自动化·云计算·aws
煤球王子4 小时前
浅学文件系统4(页面缓存)
linux
peixiuhui4 小时前
Iotgateway技术手册-1. 项目概述
linux·网关·iot·modbus·数据采集网关·iotgateway·采集软件
wdfk_prog4 小时前
[Linux]学习笔记系列 -- [fs]sysfs
linux·笔记·学习
慕容雪_4 小时前
运维笔记-网络【属性】-【共享】中没有【家庭网络连接(H)】的选项
运维·网络·共享
AllFiles5 小时前
Linux 网络故障排查:如何诊断与解决 ARP 缓存溢出问题
linux·后端
菜的不敢吱声5 小时前
swift学习第5天
学习·ssh·swift
AC赳赳老秦5 小时前
Shell 脚本批量生成:DeepSeek 辅助编写服务器运维自动化指令
运维·服务器·前端·vue.js·数据分析·自动化·deepseek
pps-key5 小时前
Afrog漏洞扫描器:从入门到入狱......边缘的摇摆记录(pps-key黑化版)
linux·计算机网络·安全·网络安全