bootstrapping de hardware con Ansible

| |

COMPARTE EL ARTÍCULO!!!

En una reciente reunión de Ansible London, tuve una charla con alguien sobre la construcción de hardware automatizado. «¡Ahora está todo nublado!» Te oigo decir. Ah, pero para muchas organizaciones grandes no lo es, todavía tienen centros de datos masivos llenos de hardware. Casi regularmente alguien aparece en nuestra lista de correo interno y nos pregunta: «¿Puede Ansible hacer el aprovisionamiento de hardware?

Requisitos

El hardware de bootstrapping se trata principalmente de servicios de red. Antes de instalar cualquier sistema operativo (SO), debemos configurar algunos servicios. Necesitaremos:

  • DHCP
  • PXE
  • TFTP
  • Medios del sistema operativo
  • Servidor web

Configuración

Además de la configuración de DHCP, todo lo demás en este artículo es manejado por las partidas Ansible incluidas en este repositorio.

Servidor DHCP

Le escribo bajo el supuesto de que usted puede controlar la configuración de su DHCP. Si no tiene acceso a su servidor DHCP, tendrá que pedirle al propietario que establezca dos opciones. La opción 67 de DHCP debe configurarse en pxelinux.0 y el servidor siguiente (que es la opción 66, pero puede que no necesite saberlo; a menudo un servidor DHCP tendrá un campo/opción para `siguiente servidor$0027) debe configurarse con la dirección IP de su servidor TFTP.

Si puedes tener el servidor DHCP, te sugiero que uses dnsmasq. Es pequeño y sencillo. No voy a cubrir la configuración aquí, pero mira la página de manual y la opción –enable-tftp.

TFTP

La configuración del siguiente servidor para nuestro servidor DHCP, arriba, apuntará a una máquina que sirve TFTP. Aquí he utilizado una máquina virtual CentOS Linux, ya que sólo se necesita un paquete (syslinux-tftpboot) y un servicio para empezar a tenerTFTP en funcionamiento. Nos quedaremos con la ruta por defecto, /var/lib/tftpboot.

PXE

Si aún no estás familiarizado con PXE, puedes echar un vistazo a la página de Wikipedia. Para este artículo lo mantendré corto, serviremos algunos archivos a través de TFTP, a los que DHCP guía nuestro hardware.

Querrá imágenes/pxeboot/{initrd.img,vmlinuz} del medio de distribución del SO para pxeboot. Estos deben ser copiados a /var/lib/tftpboot/pxeboot. Las jugadas Ansible referenciadas no hacen este paso, así que necesita copiarlas usted mismo.

También tendremos que servir los archivos de instalación del sistema operativo. Hay dos enfoques para esto: 1) instalar, a través de HTTP, desde Internet o 2) instalar, de nuevo a través de HTTP, desde un servidor local. Para mis pruebas, ya que estoy en una LAN privada (y supongo que usted también), el método de instalación más rápido es el segundo. La manera más fácil de preparar esto es montar la imagen del DVD y sincronizar las imágenes, los paquetes y los directorios de repodatos con la ubicación de su servidor web. Las reproducciones de Ansible referenciadas instalarán httpd pero no copiarán estos archivos, así que no olvide hacerlo después de ejecutar la reproducción. Para este artículo, una vez más nos quedaremos con los valores por defecto para simplificar, por lo que los archivos deben ser copiados a la raíz estándar de Apache, /var/wwww/html.

Directorios

Deberíamos terminar con estructuras de directorios como ésta:

PXE/TFTP

[root@c7 ~]# árbol /var/lib/tftpboot/pxe{b*,l*cfg}
/var/lib/tftpboot/pxeboot
└── 6
├── initrd.img
└── vmlinuz

httpd

[root@c7 ~]# árbol -d /var/www/html/
/var/www/html/
├── 6 -> centos/6
├── 7 -> centos/7
├── centos
│ ├── 6
│ │ ─ └── os
│ │ └── x86_64
│ │ ─ ├── images
│ │ │ ─ └── pxeboot
│ │ ─ ├── Paquetes
│ │ └ └── repodata
│ └── 7
│ └── os
│ └── x86_64
│ ├── imágenes
│ │ ─ └── pxeboot
│ ├── Paquetes
│ └── repodata
└── ks

Notarás que mi configuración web aparece un poco menos simple que las palabras de arriba! He pegado mi estructura actual para darte algunas ideas. El hardware que estoy usando es muy antiguo, e incluso hacer funcionar CentOS 7 fue horrible (si te interesa, se debe a la falta de controladores cciss para el controladorHP Smart Array-sí, hay una respuesta, pero se necesita mucho esfuerzo para que funcione), así que todos los ejemplos son de CentOS 6. También quería una configuración flexible que pudiera instalar muchas versiones. Aquí lo he hecho usando symlinks-esta disposición también funcionará bien para RHEL, por ejemplo. La estructura básica está presente, aunque hay que tener en cuenta las imágenes, los paquetes y los directorios de repodatos.

Estas rutas se relacionan directamente con el archivo de menú PXE que vamos a servir y también con el archivo kickstart.

Si no tiene DHCP

Si no puede administrar su propio servidor DHCP o los propietarios de su infraestructura no pueden ayudar, hay otra opción. En el pasado, he utilizado iPXE para crear una imagen de arranque que he cargado como medio virtual. Una gran cantidad de interfaces fuera de banda/lights-out-management (LOM) en hardware moderno soportan esta funcionalidad. Con iPXE puedes crear un menú PXE personalizado en cuestión de segundos. No voy a cubrir eso aquí, pero si resulta ser un problema para ti, entonces envíame una línea a Twitter y veré si puedo hacer una entrada de seguimiento en el blog si suficientes personas lo solicitan.

Instalación de hardware

Tenemos nuestra estructura en su lugar ahora, y podemos arrancar un servidor. Antes de hacerlo, tenemos que añadir algo de configuración a la configuración de TFTP para permitir que una pieza de hardware determinada recoja el menú de arranque de PXE.

Es aquí donde nos encontramos con un pequeño problema de gallina/huevo. Necesitamos la dirección MAC de un host para crear un enlace a la pieza de hardware específica que queremos iniciar. Si el hardware ya se está ejecutando y podemos acceder a él con Ansible, es fantástico, tenemos una forma de averiguar la dirección MAC de la interfaz de arranque a través del módulo de configuración (ver la reproducción de reinstalación). Sin embargo, si se trata de una nueva pieza de estaño, necesitamos obtener la dirección MAC y decirle a nuestra configuración qué hacer con ella. Esto probablemente significa alguna intervención manual: arrancar el servidor y mirar una pantalla o tal vez obtener el MAC de un manifiesto o algo parecido. Sea cual sea la forma en que lo consigas, podemos informar a nuestra obra a través del inventario.

Pongamos una variable personalizada en nuestro sencillo archivo de inventario en formato INI, pero ejecutemos una reproducción para configurar TFTP…

(pip)iMac:ansible-hw-bootstrap$ ansible-inventory –host hp.box
{
«ilo_ip»: «192.168.1.68»,
«ilo_contraseña»: «administrador»
}
(pip)iMac:ansible-hw-bootstrap$ ansible-playbook plays/install.yml
El juego[kickstart] ************************************************************************************************************************************************************************************************************************************************************************************************************
La entrada del inventario del host tiene una dirección MAC] ********************************************************************************************************************************************************************************************************************
falló: [ks.box] (item=hp.box) => </ i> </ i&gt.
«afirmación»: «hostvars[item][$0027mac$0027] está definido»,
«cambiado»: falso,
«evaluado_para»: falso,
«objeto»: «hp.box»,
«msg»: «La afirmación falló»
}
RECAPITULEMOS A LA GENTE DE LA CIUDAD DE NUEVA YORK.
ks.box : ok=0 changed=0 unreachable=0 failed=1

La obra falló. Contiene una comprobación de que el host que vamos a instalar tiene una dirección MAC añadida. Arreglemos eso y hagamos la jugada de nuevo…

(pip)iMac:ansible-hw-bootstrap$ ansible-inventory –host hp.box
{
«ilo_ip»: «192.168.1.68»,
«ilo_contraseña»: «administrador»,
«Mac»: «00:AA:BB:CC:DD:EE»
}
(pip)iMac:ansible-hw-bootstrap$ ansible-playbook plays/install.yml
El juego[kickstart] ************************************************************************************************************************************************************************************************************************************************************************************************************
La entrada del inventario del host tiene una dirección MAC] ********************************************************************************************************************************************************************************************************************
ok: [ks.box] => (item=hp.box) => </ i> </ i&gt.
«cambiado»: falso,
«objeto»: «hp.box»,
«msg»: «Todas las afirmaciones pasaron»
}
TAREAS[Configurar menú PXE para instalar] *********************************************************************************************************************************************************************************************************************************************************************************************************************************************************
ok: [ks.box] => (item=hp.box)
TAREAS[Reiniciar el host de destino para el arranque PXE] **********************************************************************************************************************************************************************************************************************************************************************************************
saltando: [ks.box] => (item=hp.box)
RECAPITULEMOS A LA GENTE DE LA CIUDAD DE NUEVA YORK.
ks.box : ok=2 changed=0 unreachable=0 failed=0

¡Eso funcionó! ¿Qué es lo que hizo? Mirando el directorio pxelinux.cfg bajo nuestra raíz TFTP, podemos ver un enlace simbólico…

[root@c7 pxelinux.cfg]# pwd
/var/lib/tftpboot/pxelinux.cfg
[root@c7 pxelinux.cfg]# l
total 12
drwxr-xr-x. 2 raíz raíz 65 Mayo 13 14:23 ./
drwxr-xr-x. 4 raíz raíz 4096 Mayo 2 22:13 …/
-r–r–r–r–. 1 raíz raíz 515 Mayo 2 12:22 00README
lrwxrwxrwxrwx. 1 root root root 7 May 13 14:12 01-00-aa-bb-cc-dd-ee -> install
-rw-r–r–r–. 1 root root root 682 2 de mayo 22:07 install

El archivo de instalación está enlazado simbólicamente a un archivo con el nombre de nuestra dirección MAC. Esta es la clave, la pieza útil. Se asegurará de que nuestro hardware con dirección MAC 00-aa-bb-cc-dd-ee se sirve un menú PXE cuando arranca desde su tarjeta de red.

Así que vamos a arrancar nuestra máquina.

De forma útil, Ansible dispone de algunos módulos de telegestión. Estamos trabajando con un servidor HP aquí, así que podemos usar el módulo hpilo_boot para ahorrarnos el tener que interactuar directamente con la interfaz web de LOM.

Vamos a ejecutar la reproducción de reinstalación en un servidor de arranque…

Lo bueno del módulo hpilo_boot, como verá, es que configura el medio de arranque para que sea la red. Cuando la instalación se completa, el servidor se reinicia y arranca desde su disco duro. El ojo de águila -entre otras cosas, usted habrá detectado el problema crítico de esto- ¿qué pasa si el servidor arranca de nuevo con su tarjeta de red? Recogerá el menú PXE y se reinstalará rápidamente. Sugeriría quitar el eslabón simbólico como un paso de «cinturón y tirantes» entonces. Sugerencia: Haré que el nuevo servidor haga un$0027phone home$0027 en el maletero, en algún lugar, que realice un trabajo de limpieza. Ya que no necesitarías la consola abierta, como yo tenía aquí para demostrar lo que está pasando en segundo plano, un trabajo de$0027casa telefónica$0027 también daría una buena indicación de que el proceso se ha completado. Es posible, naturalmente. Buena suerte!

Si tiene alguna idea o comentario sobre este proceso, por favor hágamelo saber.

COMPARTE EL ARTÍCULO!!!

Previous

Cómo utiliza GNOME Git

Abierto el plazo de inscripción para la Cumbre de Hardware 2019, convocatoria de propuestas

Next

Deja un comentario

shares