Goss — инструмент, с помощью которого можно очень быстро выполнить проверку конфигурации того или иного сервера, либо контейнера. Разработчики отмечают, что проект является альтернативой serverspec, однако нужно сказать, что альтернатива получается достойная.
Что умеет проверять goss:
- Доступность адреса и порта на сервере.
- Файл на сервере, его атрибуты.
- Сетевые интерфейсы.
- Параметры ядра.
- Точки монтирования партаций.
- Резольв домена и отдаваемые DNS записи.
- Ответ веб-сервера, статус, наличие ключевого слова.
Установка и простой тест.
Ставим goss выполнив команду:
# curl -fsSL https://goss.rocks/install | sh
Сгенерируем goss.yaml файл, в котором будут описаны sshd и postfix сервисы. Удобство утилиты заключается в том, что с помощью инструмента autoadd, goss на уже запущенной системе умеет генерировать тесты автоматически. С помощью autoadd мы можем создать наборы правил для пользователя, группы, пакета, файла, процесса или сервиса.
# goss autoadd sshd # goss autoadd postfix
Затем выполним проверку конфигурации сервера, сравнив её с полученным файлом:
# goss validate ........................... Total Duration: 0.041s Count: 27, Failed: 0, Skipped: 0
Как видим, конфигурация сервера соответствует тому, что описано в файле. Теперь откроем файл и намеренно внесём правки (сменим шелл, изменим gid, например). Сохраним изменения и попробуем выполнить проверку ещё раз:
# goss validate .F.........F............... Failures/Skipped: User: postfix: uid: Expected <int>: 89 to equal <int>: 99 User: sshd: shell: Expected <string>: /sbin/nologin to equal <string>: /bin/bash Total Duration: 0.027s Count: 27, Failed: 2, Skipped: 0
Таким образом, имея на руках файл для тестирования, администратор может выполнять проверку своих серверов на соответствие требуемой конфигурации. К слову, сами результаты, имеется возможность отдавать по http (в том числе и в JSON формате):
# goss serve & [1] 2293 2017/10/23 11:10:34 Starting to listen on: :8080 # curl localhost:8080/healthz 2017/10/23 11:11:09 [::1]:48410: requesting health probe 2017/10/23 11:11:09 [::1]:48410: Stale cache, running tests .F.........F............... Failures/Skipped: User: postfix: uid: Expected <int>: 89 to equal <int>: 99 User: sshd: shell: Expected <string>: /sbin/nologin to equal <string>: /bin/bash Total Duration: 0.034s Count: 27, Failed: 2, Skipped: 0
Для goss написана очень подробная документация, перед созданием ручных тестов обязательно стоит заглянуть на сайт проекта, возможно в приведённых там примерах уже есть всё необходимое для решения требуемой задачи.
Вместе с goss, администраторам доступен dgoss — утилита для работы с контейнерами. О ней поговорим в отдельной заметке.