Foreman — веб-платформа для инвентаризации и жизненного цикла серверов: от регистрации «железа» и установки ОС до выдачи конфигурации и вывода машины из эксплуатации. В отличие от простой CMDB, он сам запускает установку по сети, хранит параметры хостов и передаёт их Puppet, Ansible или Salt. Ниже — практический маршрут: установка, группы хостов, шаблоны, развёртывание и обслуживание.
Что закрывает Foreman
Платформа объединяет несколько функций. Каталог хостов хранит имя, IP, MAC, владельца, стойку и операционную систему. Provisioning отвечает за PXE-загрузку, разметку диска и первичную настройку. Smart Proxy — агент на площадке, который выполняет DHCP, DNS, TFTP и Puppet-задачи рядом с машинами, чтобы основной сервер не требовал прямого доступа в каждый сегмент сети. Configuration management подключается как внешний слой: Foreman формирует ENC-данные и отдаёт их Puppet, а для Ansible есть callback-плагин.
Ключевое понятие — host group. Это шаблон хоста: ОС, разметка, среда, домен, подсеть, набор ролей. Новый сервер создаётся не набором флагов, а выбором группы, поэтому одинаковые машины получают одинаковую конфигурацию. Второй важный объект — организация и локация: они разделяют арендаторов и площадки, не смешивая справочники.
Установка и базовая проверка
Foreman ставится пакетом foreman-installer. Репозиторий deb.theforeman.org привязан к кодовому имени дистрибутива и ветке продукта, поэтому берите команды подключения из официальной инструкции для своей версии Debian или Ubuntu: номера веток меняются, и старые заклинания из блогов быстро ломаются. После установки пакета запускается сценарий установки.
sudo apt update
sudo apt install foreman-installer
sudo foreman-installer --scenario foreman \
--foreman-initial-admin-password 'SlozhnyyParol123' \
--enable-foreman-proxy --foreman-proxy-tftp=true
sudo foreman-installer --scenario foreman --help | head -40
Установщик сам поднимает PostgreSQL, Puppet-сервер и Smart Proxy, выпускает сертификаты и создаёт администратора. Проверка идёт по трём точкам: веб-интерфейс, службы systemd и API.
systemctl status foreman foreman-proxy --no-pager
curl -k -u admin:SlozhnyyParol123 https://foreman.example.net/api/v2/status
sudo foreman-tail
foreman-tail показывает журналы всех компонентов в одном потоке — удобно, когда непонятно, ругается ли Rails, прокси или Puppet.
Справочники и группа хостов
Перед первым развёртыванием заполняют операционные системы, установочные медиа и таблицы разметки. Для Debian это preseed, для RHEL-семейства — kickstart. Шаблоны лежат в репозитории и рендерятся с переменными хоста; править их лучше через веб-интерфейс с контролем версий, а не напрямую в базе.
hammer os list
hammer medium list --operatingsystem "Debian 13"
hammer hostgroup create --name web-prod --organization ACME --location DC1
hammer hostgroup set-parameter --hostgroup web-prod --name env --value production
Параметр env дальше доступен в шаблонах как @host.params['env']. Это простой способ передать признак площадки или роли без дублирования шаблонов. После создания группы проверьте, что для неё заданы домен, подсеть, шлюз и шаблон разметки: именно из этих полей Foreman собирает ответ DHCP и файл загрузки.
Развёртывание нового сервера
Хост можно завести вручную или найти сетевым обнаружением. Во втором случае машина загружается по PXE в образ discovery, регистрируется на прокси и появляется в списке нераспределённых. Дальше ей назначают группу и запускают установку.
hammer host create --name web01 --hostgroup web-prod \
--ip 192.0.2.11 --mac 52:54:00:aa:bb:cc --build true
hammer host list --search "hostgroup = web-prod"
hammer host info --name web01
hammer host update --name web01 --hostgroup web-prod
Флаг --build true переводит хост в режим установки: прокси выдаёт ему загрузчик, а после завершения и отчёта Puppet флаг снимается автоматически. Если машина зависла на загрузке, смотрят журнал Smart Proxy, leases DHCP и доступность TFTP. Типичная ошибка — неверный MAC в карточке хоста: DHCP выдаёт адрес, но загрузчик ищет конфигурацию по другому идентификатору.
Конфигурация и повторяемость
После установки ОС в дело вступает слой управления конфигурацией. У Foreman есть родной Puppet-сервер, но многие эксплуатационные команды уже перешли на Ansible: он не требует агента и проще для небольших парков. Callback-плагин отправляет отчёт о прогоне в Foreman, поэтому результат виден в карточке хоста рядом с фактами и отчётами Puppet.
ansible-playbook -i inventory site.yml --limit web01
curl -k -u admin:pass https://foreman.example.net/api/v2/hosts/web01
hammer task list --limit 10
Практическое правило: в Foreman хранится то, что описывает машину снаружи (имя, сеть, площадка, роль), а в ролях Ansible — то, что происходит внутри ОС. Дублировать списки пакетов в двух системах не стоит: рано или поздно они разойдутся.
Обслуживание и диагностика
foreman-debugсобирает архив с конфигами и журналами для разбора инцидента.foreman-rake db:migrateприменяет миграции после обновления пакетов.- Бэкап включает дамп PostgreSQL, каталог
/etc/foreman,/var/lib/puppetи сертификаты прокси. - Обновление делают по шагам: сначала репозиторий и пакеты, затем
foreman-installerс теми же ответами, что при установке.
sudo foreman-debug -q -d /var/tmp
sudo foreman-rake db:migrate
sudo journalctl -u foreman -n 100 --no-pager
sudo tar czf /backup/foreman-$(date +%F).tar.gz /etc/foreman /var/lib/puppet
Ответы установщика сохраняются в /etc/foreman-installer/scenarios.d/foreman-answers.yaml. Если потерять этот файл, повторный запуск может сбросить настройки прокси и пароли. Перед обновлением его копируют отдельно.
Типичные ошибки
Первый запуск часто упирается в сеть: прокси не видит подсеть, DHCP отдаёт адрес из чужого пула, TFTP-каталог пуст. Проверяйте путь целиком — от lease до файла загрузчика. Вторая ошибка — ручные правки в базе вместо API: они ломают кэш и аудит. Третья — общий пароль администратора на всех площадках: у каждой локации должен быть свой доступ и свои права.
curl -k https://proxy.example.net:8443/features
hammer host list --search "build = true"
sudo ss -tulpn | grep -E '67|69|8140'
Итог
Foreman полезен там, где серверов больше десятка и машины появляются регулярно. Он даёт единый каталог, воспроизводимую установку и прозрачную связь между «железом» и конфигурацией. Начните с одной площадки и группы хостов, проверьте полный цикл на тестовой машине, и только потом переносите парк. Такой порядок ловит ошибки шаблонов и DHCP до того, как они затронут рабочие серверы.