Формула file-find-formula

Формула для выполнения файловой инвентаризации на базе модуля file.find (сбор файловых данных на устройствах).

Доступные состояния

Состояние file-find.run

Инициирует выполнение поисковых запросов, заданных в pillar-файле под ключом lookup.

Для каждого правила в объекте lookup создается отдельное состояние module.run, вызывающее функцию file_find.find_formatted — она использует параметры каждого правила (path, name, size, mtime и т. д.) для выполнения поиска на устройстве через стандартный модуль file.find.

Параметры поиска

Параметры поиска задаются в pillar-файле формулы в объекте lookup.

Каждое правило в lookup — это набор параметров, передаваемых напрямую в модуль file.find.

Имя правила (ключ) произвольно, но должно быть уникальным в рамках одного pillar-файла.

Поддерживаемые параметры:

Параметр Тип Описание Пример

path

Строка

Корневой путь в файловой системе для поиска (обязательный)

/var/log

Критерии поиска

name

Строка

Шаблон имени файла (регистрозависимый, glob-синтаксис).

Примеры использования специальных символов:

  • * соответствует нулю или большему количеству любых символов;

  • ? соответствует одному любому символу;

  • [abc] соответствует символу из набора a, b, c;

  • [!abc] или [^abc] соответствует любому символу, не входящему в набор a, b, c;

  • [x-y] соответствует любому символу в диапазоне от x до y (включительно);

  • [!x-y] или [^x-y] соответствует любому символу вне диапазона от x до y

*.log
id_*
config-[0-9].txt

iname

Строка

Шаблон имени файла (регистронезависимый, glob-синтаксис)

*.LOG
ID_*.PUB

regex

Строка

Регулярное выражение для имени файла (регистрозависимое)

^access\.log\.\d+$

iregex

Строка

Регулярное выражение для имени файла (регистронезависимое)

^access\.log\.\d+$

type

Строка

Тип файла. Несколько значений указываются через пробел или запятую. Допустимые значения:

  • a — все типы файлов (если не указан определенный тип);

  • b — файлы блочных устройств;

  • c — файлы символьных устройств;

  • d — каталоги;

  • f — простые файлы;

  • l — символические ссылки;

  • p — именованные каналы;

  • s — сокеты

f
f l
f,p

user, owner

Строка

Имя или ID пользователя-владельца. Несколько значений указываются через пробел или запятую

root
1000
root,daemon

group

Строка

Имя или ID группы. Несколько значений указываются через пробел или запятую

adm
100
adm,root

size

Строка

Размер файла в формате [+-]number[size-unit]

+10k
-50M
+2G

mtime

Строка

Время модификации в формате [+-][number][w|d|h|m|s]

+7d
-1h
-30m

Критерии глубины поиска

maxdepth

Целое число

Максимальная глубина рекурсии (от path)

1
3

mindepth

Целое число

Минимальная глубина рекурсии (от path)

1
2

Дополнительные параметры

md5

Логическое значение

Если true — вычислить и вернуть MD5-хеш содержимого файла

true

Особенности использования параметров:

  • path — единственный обязательный параметр для каждого правила;

  • type — если не указан, поиск по всем типам (a);

  • size и mtime поддерживают + (больше) и - (меньше);

  • все параметры чувствительны к регистру в YAML/JSON, кроме iname и iregex.

Пример файла pillar.example

# Формула file_find — предустановленная формула для файловой инвентаризации
# Все параметры передаются через ключ file_find в Pillar
file_find:
  # Версия конфигурации. Автоматически генерируется при сохранении версии
  version_id: 20241128

  # lookup — объект, содержащий одно или несколько независимых правил поиска
  # Каждое правило — это отдельный вызов модуля file.find
  # Имя правила (ключ) — произвольное, используется только для локальной идентификации
  lookup:

    # Правило: поиск свежих лог-файлов в /var/log
    logs_recent:
      # Корневой путь для поиска — обязательный параметр
      path: /var/log
      # Имя: шаблон glob, регистрозависимый — ищет файлы, заканчивающиеся на '.log'
      name: "*.log"
      # Тип: только обычные файлы (не директории, не симлинки и т.д.)
      type: f
      # Время изменения: файлы, измененные менее 1 дня назад (отрицательное — "позднее")
      mtime: -1d
      # Размер: файлы больше 10 килобайт
      size: +10k
      # Вычислить и вернуть MD5-хеш содержимого файла — включает хеш в результаты
      md5: true

    # Правило: поиск конфигурационных файлов в /etc, принадлежащих 'root'
    configs_root:
      # Корневой путь: /etc, стандартное место для системных конфигураций
      path: /etc
      # Владелец: только файлы, принадлежащие пользователю 'root'
      owner: root
      # Тип: только обычные файлы
      type: f
      # Имя: файлы с расширением .conf
      name: "*.conf"
      # Максимальная глубина поиска: только файлы в /etc, без поддиректорий
      maxdepth: 1

    # Правило: поиск старых и крупных файлов в /var
    old_large:
      # Корневой путь: /var, где часто хранятся логи, кэши, временные файлы
      path: /var
      # Тип: только обычные файлы
      type: f
      # Размер: файлы больше 50 мегабайт
      size: +50M
      # Время изменения: файлы, измененные более 30 дней назад (положительное — "ранее")
      mtime: +30d

    # Правило: поиск SSH-ключей в домашних директориях пользователей
    ssh_find:
      # Корневой путь: /home, где находятся домашние директории пользователей
      path: /home
      # Имя: регистрозависимый шаблон — ищет файлы, начинающиеся с 'id_'
      name: "id_*"
      # Тип: только обычные файлы (не директории)
      type: f
      # Имя файла: регистронезависимый шаблон — ищет файлы, заканчивающиеся на '.pub' (в любом регистре)
      iname: "*.pub"
      # Минимальная глубина: не искать в самой директории /home, только в поддиректориях
      mindepth: 1
      # Максимальная глубина: ограничить поиск 3 уровнями вложенности (например: /home/user/.ssh/)
      maxdepth: 3