Назад | Перейти на главную страницу

Kickstart: обслуживать динамические изображения кикстарта через скрипт CGI или PHP?

Я бы хотел Кикстарт пара десятков серверов RHEL6 / SL6. Однако некоторые из этих серверов отличаются, и я не хочу создавать новый файл ks.cfg для каждого класса серверов.

Есть ли способ динамически генерировать файл кикстарта на лету из шаблона?

Например, если я добавлю в ядро ​​такую ​​строку:

APPEND ks=http://192.168.1.100/cgi-bin/ks.cgi ip=dhcp

Затем сценарий ks.cgi может определить, что это за хост (через MAC-адрес), и распечатать параметры кикстарта, подходящие для этого хоста. При желании я мог бы переопределить некоторые параметры, передав параметры скрипту, например:

APPEND ks=http://192.168.1.100/cgi-bin/ks.cgi?NODETYPE=production&IP=192.168.2.80

После кикстарта сервера мы активируем Cfengine / Puppet в этой системе и управляем системой с помощью нашего любимого продукта управления конфигурацией.

Мы экспериментируем с xCAT но это оказывается слишком громоздким. Я заглянул в Сапожник, но я не уверен, что это так.

Обновить:

Самостоятельное решение обсуждается в книге О'Рейли: Управление системами на основе RPM с помощью Kickstart и Yum, Глава 3. Настройка установки Kickstart> Dynamic ks.cfg, который перекликается с некоторыми комментариями в этой ветке:

Реализация такого инструмента выходит за рамки этого Краткого обзора, но я могу пройтись по высокоуровневому дизайну. Любое такое решение будет смешивать хранилище данных (то, что меняется) с решением для создания шаблонов (то, что не меняется). Хранилище данных будет содержать данные для каждой машины, такие как IP-адрес и имя хоста. Вам также понадобится уникальный идентификатор, например имя хоста, чтобы вы могли получать данные с данной машины. Хранилище данных может быть плоским файлом, данными XML или реляционной базой данных, такой как PostgreSQL или MySQL.

В свою очередь, чтобы вызвать систему, вы передаете уникальный идентификатор машины в качестве параметра URL. Например:

загрузка: linux ks =http: //ваш.kickstart.server/gen_config? хост-сервер25

В этом примере CGI (или сервлет, или что-то еще) генерирует ks.cfg для машины server25.

Но где, ой, где код для ks.cgi?

Поскольку вы уже используете марионетку, вы также можете взглянуть на мастер для расширенного создания шаблонов кикстарта.

Foreman использует шаблоны Ruby, что позволяет гибко кикстарт шаблон.

У меня развернуто простое проприетарное решение, в котором я использую PHP в качестве языка шаблонов, а файл кикстарта создается на лету с помощью сценария PHP на локальном сервере.

Процесс создания такой штуки очень прост, если вы знаете, как писать файлы кикстарта (см. Документация Red Hat если хотите узнать как):

  1. Создайте базовый файл кикстарта (с некоторыми значениями по умолчанию для параметров, которые вы хотите «шаблонизировать»).
  2. Сохраните кикстарт в файл на своем веб-сервере с расширением .php. Я использую -kickstart.php
  3. Добавьте код PHP в файл кикстарта для чтения параметров URL и настройки правильных данных, затем замените значения по умолчанию из шага 1 выходными данными переменных PHP.

например, заменить

network --device eth0 --bootproto dhcp --hostname SOME_STATIC_HOSTNAME

с участием

network --device eth0 --bootproto dhcp --hostname <?php echo $hostname;?>

Вот в основном это.

Я хотел иметь красивые URL-адреса, чтобы загрузчик говорил что-то вроде:

linux ksdevice=eth0 ks=http://myserver/kickstart/rhel6/networkname/servername/ks.cfg

со всеми параметрами, указанными как элементы пути. Для этого я создал .htaccess файл для веб-сервера Apache, который выглядит так:

RewriteEngine On
RewriteBase /kickstart
RewriteRule kickstart/(.*) /company-kickstart.php/$1

Затем сценарий PHP делает что-то вроде этого:

<?php
list($empty,$os,$envtype,$hostname,$notimportant) = 
    explode("/",$_SERVER['PATH_INFO']);
header("Content-Type: text/plain"); # important, otherwise kickstart fails
?>
# Kickstart file automatically generated by my script.
#version=<?php echo $os;?>
install
url --url=http://my.local.mirror/<?php echo $os;?>/os/x86_64
lang en_US.UTF-8
keyboard us
network --device eth0 --bootproto dhcp --hostname <?php echo $hostname;?>
# ... rest of kickstart parameters

Cobbler поддерживает профили кикстарта, но кикстарт очень хорошо работает с PHP, поэтому вы можете передавать параметры в свой ks=... линия. Вы можете написать это самостоятельно.