Kickstart: Sirva imagens de kickstart dinâmicas através de um script CGI ou PHP?

5

Eu gostaria de Kickstart algumas dúzias de servidores RHEL6 / SL6. No entanto, alguns desses servidores são diferentes e eu não quero criar um novo arquivo ks.cfg para cada classe de servidor.

Existe alguma maneira de gerar um arquivo do Kickstart dinamicamente, de um modelo?

Por exemplo, se eu acrescentar uma linha como esta no Kernel:

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

Em seguida, o script ks.cgi pode determinar qual host é esse (através do endereço MAC) e imprimir as opções do Kickstart apropriadas para esse host. Eu poderia, opcionalmente, substituir algumas opções passando parâmetros para o script, assim:

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

Depois de iniciarmos o servidor, ativamos o Cfengine / Puppet nesse sistema e gerenciamos o sistema usando nosso produto de gerenciamento de configurações favorito.

Estamos experimentando o xCAT , mas está sendo complicado demais. Eu procurei no Cobbler , mas não tenho certeza se ele faz isso.

Atualização:

Uma solução roll-your-own é discutida no livro da O'Reilly: Gerenciando sistemas baseados em RPM com o Kickstart e o Yum, Capítulo 3. Personalizando seu Kickstart Instale > Ks.cfg dinâmico , que ecoa alguns dos comentários neste tópico:

To implement such a tool is beyond the scope of this Short Cut, but I can walk through the high-level design. Any such solution would mix a data store (the things that change) with a templating solution (the things that don’t change). The data store would hold the per-machine data, such as the IP address and hostname. You would also need a unique identifier, perhaps the hostname, such that you could pick up a given machine’s data. The data store could be a flat file, XML data, or a relational database such as PostgreSQL or MySQL.

In turn, to invoke the system, you pass a machine’s unique identifier as a URL parameter. For example:

boot: linux ks=http://your.kickstart.server/gen_config?host-server25

In this example, the CGI (or servlet, or whatever) generates a ks.cfg for the machine server25.

Mas onde, oh onde, é o código para ks.cgi?

    
por Stefan Lasiewski 19.10.2011 / 01:58

3 respostas

4

Já que você já está usando o boneco, você também pode dar uma olhada em Foreman para obter modelos avançados de kickstart.

O Foreman usa modelos de rubi, permitindo modelos flexíveis de kickstart .

    
por 16.11.2011 / 21:02
3

Eu tenho uma solução proprietária simples implantada onde eu uso PHP como a linguagem de templates e o arquivo de kickstart é gerado dinamicamente por um script PHP em um servidor local.

O processo para criar tal coisa é muito simples se você souber como escrever arquivos de kickstart (veja isto Red Hat documentação se você quiser saber como):

  1. Crie seu arquivo kickstart básico (com alguns valores padrão para os parâmetros que você deseja "modelar").
  2. Salve o kickstart em um arquivo no seu servidor da Web com uma extensão .php. Eu uso o -kickstart.php
  3. Adicione o código PHP no arquivo de kickstart para ler os parâmetros de URL e configurar os dados corretos, em seguida, substitua os valores padrão da etapa 1 pela saída das variáveis PHP

por exemplo, substitua

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

com

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

É basicamente isso.

Eu queria ter URLs bonitas para que o gerenciador de inicialização dissesse algo como:

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

com todos os parâmetros especificados como elementos de caminho. Para isso eu criei um arquivo .htaccess para o servidor Apache que se parece com isso:

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

Então o script PHP faz algo assim:

<?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
    
por 22.12.2011 / 16:37
2

Cobbler suporta perfis de kickstart , mas o kickstart funciona muito bem com PHP, então você pode passar parâmetros na sua linha ks=... . Você pode acabar escrevendo isso sozinho.

    
por 19.10.2011 / 04:02