IES Miguel Romero Esteo - Departamento de
Informática - Linux/Unix
Ansible/
Taller combinado de vboxmanage y Ansible
Comandos:
Aplicaciones:
Enunciado:
Como el alumno sabe, Ansible es un producto de orquestación
de recursos TI. Orquestación es un término muy amplio
que incluye otros como administrar, configurar, gestionar,
actualizar, instalar, etc..; todas esas tareas
encomendadas a los sysadmin
y que el alumno conoce muy bien.
- Con esta
práctica el alumno trabajará en varias fases para alcanzar
un objetivo final: Crear una infraestructura de sistemas orquestada
con Ansible
- El taller se
realizará en el puesto del alumno, el cual, debe contar con
la última versión estable, o una LTS, de Ubuntu Desktop con
VirtualBox instalado.
- Para evitar
tentaciones, antes de empezar debe ejecutarse como root: chmod
600 /usr/lib/virtualbox/VirtualBox
Preparación de los
discos virtuales
https://www.linuxvmimages.com
o https://www.osboxes.org/
son espacios en la red donde encontrar objetos compatibles con
VirtualBox y VMware pensados para simplificar la puesta en
marcha de máquinas virtuales. De uno de esos lugares se han
descargado los objetos relacionados abajo y se han puesto a
disposición de los alumnos en este
espacio (sólo es accesible desde el aula).
- VDI con un sistema Debian 12
instalado.
- VDI con un sistema Ubuntu Server
24.04 instalado.
Una vez descargados los archivos
anteriores en el sistema personal del alumno, tendrá que
realizar las siguientes operaciones.
- Verificar la integridad de los
objetos con los recursos proporcionados por el sitio
(cadenas md5 o cualquier otro).
- Descomprimir los archivos
- Modificar
los nombres originales de los archivos vdi
para normalizarlos de la siguiente forma:
- S.O. Debian GNU/Linux: ansible-deb-disco.vdi
- S.O. Ubuntu Server GNU/Linux: ansible-userv-disco.vdi
- Mover ansible-deb-disco.vdi a ansible-deb1-disco.vdi
- Copiar
ansible-deb1-disco.vdi
a ansible-deb2-disco.vdi
- Haciendo uso del comando vboxmanage
internalcommands modificar el UUID de ansible-deb2-disco.vdi para
evitar que colisione con ansible-deb1-disco.vdi
Creación del
entorno de red
Crear una red NAT con las
siguientes especificaciones:
- Nombre: NAT-Ansible
- CIDR: 10.0.2.0/24
- DHCP: Activado
- Reenvío de puertos:
- IP-anfitrión:2260 -> 10.0.2.60:22
- IP-anfitrión::2270 -> 10.0.2.70:22
- IP-anfitrión::2280 -> 10.0.2.80:22
Creación de las
máquinas virtuales
Todas las operaciones con las
máquinas virtuales se harán con el
comando vboxmanage, NO CON
EL ENTORNO GRÁFICO, que de hecho,
está desactivado.
Máquina 1
- Nombre de
la máquina virtual: ansible-deb1
- Tipo: Linux
- Versión:
Debian (64-bit)
- Tamaño de
la memoria RAM: 1024 Mb. (2048
si el anfitrión aguanta 3 VM,s
simultáneamente con este
tamaño)
- Núcleos de
CPU: 1
- Red:
- Adaptador
NIC1
- Conectado
a la red NAT NAT-Ansible
- Almacenamiento:
- Controlador
SATA:
- Asignar
al puerto 0 al disco
virtual
ansible-deb1-disco.vdi
- Audio:
Deshabilitar
- Puertos
serie: Deshabilitar todos
Máquina
2
- Nombre de
la máquina virtual: ansible-deb2
- Tipo: Linux
- Versión:
Debian (64-bit)
- Tamaño de
la memoria RAM: 1024 Mb. (2048 si
el anfitrión
aguanta 3 VM,s
simultáneamente
con este
tamaño)
- Núcleos de
CPU: 1
- Red:
- Adaptador
NIC1
- Conectado
a la red NAT NAT-Ansible
- Almacenamiento:
- Controlador
SATA:
- Asignar
al puerto 0 al disco
virtual ansible-deb2-disco.vdi
- Audio:
Deshabilitar
- Puertos
serie: Deshabilitar todos
Máquina
3
- Nombre de
la máquina virtual: ansible-userv
- Tipo: Linux
- Versión:
Ubuntu (64-bit)
- Tamaño de
la memoria RAM: 1024 Mb. (2048 si
el anfitrión
aguanta 3 VM,s
simultáneamente
con este
tamaño)
- Núcleos de
CPU: 1
- Red:
- Adaptador
NIC1
- Conectado
a la red NAT NAT-Ansible
- Almacenamiento:
- Controlador
SATA:
- Asignar
al puerto 0 al disco
virtual ansible-userv-disco.vdi
- Audio:
Deshabilitar
- Puertos
serie: Deshabilitar todos
Puesta a punto de
los sistemas operativos
- Los sistemas instalados en los
discos cuentan con un usuario root
y un usuario ordinario, este último de nombre igual a la
distro (debian/ubuntu) y con password idéntica al nombre,
ambos usuarios ordinarios están registrados en el subsistema
sudoers con privilegios de root.
- Configuración de teclado, lenguaje,
codificación de caracteres y zona horaria.
- Para configurar estos cuatro
aspectos de los sistemas el alumno se remitirá al tema que
los trata estos conceptos correspondiente al primer
trimestre. En cualquier caso téngase en cuenta la
presencia del paquete console-data y el comando loadkeys
- En todos los sistemas se necesita
cliente y servidor openssh. Hacer lo necesario
para proveerlo en caso de no existir.
- Modificar /etc/ssh/sshd_config
en los sistemas debian (sólo debian!!) para
permitir la entrada de root vía ssh.
- Asignar IP fijas a los tres
sistemas en la RedNat 10.0.2.0/24 de VBox:
- ansible-userv:10.0.2.60
- ansible-deb1:10.0.2.70
- ansible-deb2:10.0.2.80
- Crear relación de confianza ssh
entre 10.0.2.60
y 10.0.2.70
- Crear relación de confianza ssh
entre 10.0.2.60
y 10.0.2.80
- Instalar ansible en 10.0.2.60 desde
el repositorio de la distro.
- Modificar el HOSTNAME de sistema de la máquina ansible-userv
a ansible-n0.
- En los tres sistemas registrar los
nodos en /etc/hosts
con los siguientes nombres:
- 10.0.2.60
nodo-0 ansible-n0
- 10.0.2.70
nodo-1 ansible-n1
- 10.0.2.80
nodo-2 ansible-n2
- En caso de no existir,
Instalar ansible desde los
repositorios, en la máquina ansible-userv
- En caso
de no existir,
instalar python
desde los
repositorios
en las
máquinas debian.
Debe ser una
versión
compatible con
la instalada
en la máquina
userv.
- Insertar el usuario operador
en nodo-0.
Debe estar dotado de $HOME, passwd y una shell bash
para interactuar con el sistema.
- El usuario operador
de nodo-0 necesita tener en su poder la
parte privada de una par de claves creadas al
efecto por root en los nodos
administrados. Hacer las operaciones necesarias
para alcanzar este objetivo.
- En este punto, crear copias de
seguridad de los vdi,s por si hay que dar marcha
atrás en el desarrollo de las tareas con ansible.
Ansible entra en
acción
Antes de proceder
téngase en cuenta que ansible ha sido instalado
desde los repositorios de una distro, con lo cual, el despliegue
de archivos sobre el sistema de ficheros es distinto al que se
obtuvo con la instalación manual descrita en ansible_director.pdf
(podría no haberse hecho manualmente dependiendo de las
instancias de AWS usadas), ahora, entre otras cosas, se cuenta
con varios ficheros por defecto, un despliegue disperso por todo
el árbol de directorios (usar dpkg -L si se quiere averiguar dónde
está cada cosa) y una notable ampliación del catálogo de módulos
disponibles (verifíquese con el comando help invocado desde el
prompt que proporciona ansible-console).
Se aconseja al alumno que antes de insertar
lineas de texto en los playbooks sin más,
lo cual, le
obligará a posteriori a ir depurando por el procedimiento de ejecución->error->depuración
y vuelta a empezar, utilice al comando ansible para probar
prototipos de argumentación de módulos antes de llevar la
versión definitiva al fichero de texto. Esto le ahorrará tiempo
y malos ratos.
Como el alumno sabe, los
modificadores -i -u --key-file
del comando ansible-playbook
permiten a un usuario sin privilegios actuar como root
en las máquinas objetivo, dicho lo cual..... hacer
login al nodo-0 como operador y, manteniendo
esta identidad, realizar las siguientes operaciones:
- Crear el inventario de ansible de
acuerdo a las siguientes especificaciones:
- El nodo de control es nodo-0
- Los nodos administrados son nodo-1
y nodo-2
- Insertar entradas en el
inventario que permitan actuar sobre los dos nodos como
grupo y de forma independiente en cada uno
- Crear un directorio de nombre $HOME/ansible/playbooks/
y en su interior crear los playbooks descritos a
continuación:
- Nombre: hostname-nodo-1.apb
- Función: Modifica el HOSTNAME
de 10.0.2.70
por ansible-n1.
- Indicaciones: El módulo lineinfile
sirve para esto.
- Nombre: hostname-nodo-2.apb
- Función: Modifica el HOSTNAME
de 10.0.2.80
por ansible-n2.
- Indicaciones: El módulo lineinfile
sirve para esto.
- Nombre: dnssetup.apb
- Función: En los dos nodos
administrados establece como servidor DNS primario 1.1.1.1
y secundario 8.8.8.8
- Indicaciones: El módulo lineinfile
sirve para esto.
- Nombre: repositorysetup.apb
- Antes de proceder con este
playbook verifica que el archivo http://asir.sudo.es/export/sources.list
apunta a los repositorios de la versión de Debian de
los nodos 1 y 2 (en el
momento de redactar este párrafo ese archivo apunta
a Debian11 -bullseye-) En caso
contrario informa al profesor para que lo corrija.
- Función: En nodo-1
copia /etc/apt/sources.list
a /etc/apt/sources.list.old
y sustituye /etc/apt/sources.list por http://asir.sudo.es/export/sources.list.
En nodo-2 copia /etc/apt/sources.list
a /etc/apt/sources.list.old
y sustituye /etc/apt/sources.list por http://asir.sudo.es/export/sources.list.
En ambos nodos sincronizar la cache apt con los nuevos
repositorios.
- Indicaciones: El módulo shell
para hacer la copia de seguridad y el módulo get_url
para descargar el archivo de la red y posicionarlo en su
sitio.
- Nombre: xserverdelete.apb
- Función: Elimina de los nodos
el entorno gráfico en caso de que exista.
- Indicaciones: Se trata de
eliminar los paquetes con el prefijo xserver*
y todas sus dependencias en caso de que existan. Con
ello aseguramos un poco más la máquina.