ansible生產環境使用場景(三):find查找指定內容

前言:html

   生產上有時須要根據指定內容查找相關文件,好比FastJson反序列化漏洞,經過'FastJson'關鍵字查找有無對應文件,若是有則進行整改。web

環境說明:bash

主機名 操做系統版本 ip ansible version 備註
ansible Centos 7.6.1810 172.27.34.51 2.9.9 ansible管理服務器
ansible-awx Centos 7.6.1810 172.27.34.50 / 被管服務器

1、文件列表

[root@ansible-awx ~]# cd /opt
[root@ansible-awx opt]# ls -alrt
總用量 12
drwx--x--x   4 root root  28 5月  21 13:50 containerd
dr-xr-xr-x. 19 root root 250 7月  14 11:07 ..
drwxr-xr-x   2 root root  38 8月   6 15:34 find1
drwxr-xr-x   2 root root  38 8月   6 15:35 find2
drwxr-xr-x   2 root root  38 8月   6 15:35 find3
-rw-r--r--   1 root root  12 8月   6 15:37 test1.txt
-rw-r--r--   1 root root  12 8月   6 15:37 test2.txt
-rw-r--r--   1 root root  12 8月   6 15:37 .test3.txt
drwxr-xr-x.  6 root root 115 8月   6 15:40 .
[root@ansible-awx opt]# find . -path ./containerd -prune -o -type f |xargs grep error
grep: ./containerd: 是一個目錄
./find1/find1.txt:aaaerrorbbb
./find1/.a1.txt:aaaerrorbbb
匹配到二進制文件 ./find2/find2.txt
./find2/.a2.txt:aaaerrorbbb
./find3/find3.txt:aaaerrorbbb
./find3/.a3.txt:aaaerrorbbb
./test1.txt:aaaerrorbbb
./.test3.txt:aaaerrorbbb
./test2.txt:aaaerrorbbb
[root@ansible-awx opt]# tail -n2 find2/find2.txt
aaaerrorbbb
[root@ansible-awx opt]# du -sm find2/*
201     find2/find2.txt
[root@ansible-awx opt]# tree -a
.
├── containerd
│   ├── bin
│   └── lib
├── find1
│   ├── .a1.txt
│   └── find1.txt
├── find2
│   ├── .a2.txt
│   └── find2.txt
├── find3
│   ├── .a3.txt
│   └── find3.txt
├── test1.txt
├── test2.txt
└── .test3.txt

6 directories, 9 files

在被管服務器test50的/opt目錄下構造測試數據,find一、find二、find3爲目錄,test1.txt、test2.txt爲文件,.test3.txt爲隱藏文件,3個find目錄都有兩個文件,一個txt文件和一個隱藏文件,這些文件都包含字符串'aaaerrorbbb',其中find2目錄的find2.txt大小爲201M。
服務器

2、role總覽

1.初始化role

[root@ansible roles]# ansible-galaxy init find
- Role find was created successfully

2.執行文件

[root@ansible ~]# cd /etc/ansible
[root@ansible ansible]# more find.yaml
---
- hosts: "{{ hostlist }}"
gather_facts: no
roles:
 - role: find

role名爲find,hosts列表需執行的時候指定。微信

3.task文件

[root@ansible ansible]# more roles/find/tasks/main.yml
---
# tasks file for find
# author: loong576

- name: choose the directory
 find:
  paths: "{{ directory_path }}"
  recurse: no
  file_type: directory
  excludes: "{{ exclude_directory }}"
register: find_directory

- name: find in directory
 find:
  paths: "{{item.path}}"
  recurse: yes
  contains: "{{ file_contains }}"
  hidden: yes
  size: "{{ file_size }}"
with_list: "{{find_directory.files}}"
register: find_contains_in_directory


- name: echo find file in directories
debug:
  msg:
     "{% for i in item.files %}
        {{ i.path }}
      {% endfor %}"
with_list: "{{find_contains_in_directory.results}}"
when: item.matched != 0

- name: find in files
 find:
  path: "{{ file_path }}"
  file_type: file
  excludes: "{{ exclude_file }}"
  hidden: yes
  contains: "{{ file_contains }}"
register: find_only_file

- name: echo find file in files
debug:
  msg: "{{item.path}}"
with_list: "{{find_only_file.files}}"

執行邏輯

指定路徑下目錄查找app

首先選擇須要查找的指定路徑{{ directory_path }},這裏爲/opt,選擇的時候排除掉不須要的目錄{{ exclude_directory }};而後經過循環方式在選擇的目錄裏查找指定內容{{ file_contains }}並輸出查到的文件列表。運維

這裏的目錄指/opt下的find1和find2,find3被排除在外。ide

指定路徑下文件查找測試

查找指定路徑{{ directory_path }}下全部文件是否包含指定內容{{ file_contains }}並輸出文件列表,{{ exclude_file }}文件被排除在外。spa

這裏的文件指test1.txt、.test3.txt,test2.txt被排除在外。

全部的隱藏文件默認被查找'hidden: yes'且找到的文件大小不能超過{{ file_size }}即100M

4.default文件

[root@ansible ansible]# more roles/find/defaults/main.yml
---
# defaults file for find
directory_path: /opt
exclude_directory: find3
file_path: /opt
file_contains: .*error.*
exclude_file: test2.txt
file_size: -100m

指定查找的內容爲帶有'error'的文件,指定的路徑爲/opt,排查的目錄爲find3,排除的文件爲test2.txt,全部查找的文件大小小於100m。

3、運行role

1.預期

/opt下的目錄find1的文件find1.txt和隱藏文件.a1.txt被輸出;目錄find2的隱藏文件.a2.txt被輸出;/opt下的文件test1.txt和隱藏文件.test3.txt被輸出;被排除的目錄find3和被排除的文件test2.txt將不會被輸出;不知足大小要求的find2.txt也不會被輸出。

2.執行role

[root@ansible ~]# cd /etc/ansible/
[root@ansible ansible]# ansible-playbook find.yaml -e hostlist=test50

指定主機列表爲test50

結果符合預期

 

 

點擊‘閱讀原文’下載本文全部文件。


更多內容請關注公衆號:Linux運維實踐

本文分享自微信公衆號 - Linux運維實踐(gh_11cec8ef4c61)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索