Формула 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-файла.
Поддерживаемые параметры:
| Параметр | Тип | Описание | Пример |
|---|---|---|---|
|
Строка |
Корневой путь в файловой системе для поиска (обязательный) |
|
Критерии поиска |
|||
|
Строка |
Шаблон имени файла (регистрозависимый, glob-синтаксис). Примеры использования специальных символов:
|
|
|
Строка |
Шаблон имени файла (регистронезависимый, glob-синтаксис) |
|
|
Строка |
Регулярное выражение для имени файла (регистрозависимое) |
|
|
Строка |
Регулярное выражение для имени файла (регистронезависимое) |
|
|
Строка |
Тип файла. Несколько значений указываются через пробел или запятую. Допустимые значения:
|
|
|
Строка |
Имя или ID пользователя-владельца. Несколько значений указываются через пробел или запятую |
|
|
Строка |
Имя или ID группы. Несколько значений указываются через пробел или запятую |
|
|
Строка |
Размер файла в формате |
|
|
Строка |
Время модификации в формате |
|
Критерии глубины поиска |
|||
|
Целое число |
Максимальная глубина рекурсии (от |
|
mindepth |
Целое число |
Минимальная глубина рекурсии (от |
|
Дополнительные параметры |
|||
|
Логическое значение |
Если |
|
Особенности использования параметров:
-
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