====== Ansible ======
===== Definicion =====
Ansible es una plataforma de software libre para configurar y administrar
ordenadores. Combina instalación multi-nodo, ejecuciones de tareas ad hoc y
administración de configuraciones. Adicionalmente, Ansible es categorizado como
una herramienta de orquestación.
===== Fichero de configuracion ansible =====
En este fichero podemos establecer los distintos hosts que queramos administrar
de manera automatizada; pero tenemos que crear una carpeta llamada ansible
dentro del directorio /etc; y ahí insertar el fichero hosts:
{{pasted_image_20230106080513.png|}}
Y ahora debemos añadir estas líneas, donde pondremos primero las IP de aquellos
equipos que queramos administrar, y luego abajo ponemos para que siempre se
utilice la última versión de Python:
{{pasted_image_20230106080859.png|}}
Y ahora podemos probar en lanzar un ping al equipo que tenemos añadido dentro
del fichero hosts; y si vemos algo como esto es que tenemos conectividad:
{{pasted_image_20230106081118.png|}}
Si tuviera configurado otro grupo de servidores, podría mandarlo a todos
poniendo dos puntos:
{{pasted_image_20221217101938.png|}}
También puedo mandar el ping a un sólo servidor, sin especificar ningún grupo:
{{pasted_image_20221217101946.png|}}
También podemos lanzar un comando cualquiera utilizando el módulo shell, por
ejemplo crear un directorio en el actuar espacio de trabajo dentro del servidor,
utilizando el usuario mario o root, aunque para ello debemos haber configurado
correctamente el usuario root dentro de la parte de "Fichero de configuración
automático"
{{pasted_image_20230106081238.png|}}
Y vemos que el fichero se creó correctamente en el servidor:
{{pasted_image_20230106081305.png|}}
===== Instalar servicio ssh en linux =====
El primer paso será instalar ssh de esta forma:
sudo apt install openssh-server
{{pasted_image_20230106072934.png|}}
Después utilizaremos este comando para comprobar el estado de ejecución de SSH;
y deberíamos verlo en ejecución:
sudo systemctl status ssh
{{pasted_image_20230106073030.png|}}
Y por último podemos asegurarnos de que permanezca activado con este comando:
{{pasted_image_20230106073115.png|}}
Ahora tendremos que configurar el firewall para que permita conexiones por SSH
sin problema; y para ello creamos esta regla utilizando este comando:
sudo ufw allow ssh
{{pasted_image_20230106073309.png|}}
Y ahora sólo tenemos que reiniciar el servicio SSH para aplicar todos estos
cambios; para ello utilizaremos este comando:
sudo service ssh restart
{{pasted_image_20230106073355.png|}}
Ahora vamos a probarlo desde otro equipo poniendo la IP del equipo donde estamos
configurando el servicio SSH y poniendo el username:
{{pasted_image_20230106073456.png|}}
===== Modulo copy =====
**COPIAR DESDE EQUIPO LOCAL A REMOTO**
Para copiar un fichero desde nuestra máquina local a otra máquina remota,
debemos hacer este código y muy importante poner la variable $HOME para que se
vaya sustituyendo por el nombre de usuario correspondiente:
{{pasted_image_20230108174340.png|}}
**COPIAR UN ARCHIVO DE UNA UBICACIÓN A OTRA DENTRO DEL EQUIPO REMOTO**
Aquí vamos a copiar un archivo de una ubicación a otra dentro de la misma
máquina remota:
{{pasted_image_20230108174925.png|}}
**PARA ESCRIBIR DENTRO DE UN DOCUMENTO CON ANSIBLE**
Lo haremos de esta manera, utilizando content para indicar el testo y en destino
la ruta de dicho documento:
{{pasted_image_20230108175707.png|}}
===== Modulo_file =====
**CREAR UN NUEVO FICHERO EN BLANCO CON ANSIBLE**
{{pasted_image_20230108182707.png|}}
**CREAR VARIOS ARCHIVOS A LA VEZ EN ANSIBLE**
Para crear varios archivos, tendremos que utilizar una variable del sistema
llamada item para que se creen varios archivos a la vez:
{{pasted_image_20230108183215.png|}}
**PARA CREAR CARPETAS O DIRECTORIOS CON ANSIBLE**
{{pasted_image_20230108183653.png|}}
===== Modulo gestor de paquetes apt =====
Con este módulo podemos ejecutar el comando APT para instalar paquetes sobre los
equipos que queramos administrar. Esto lo haremos realizando la siguiente
configuración dentro del playbook y teniendo en cuenta el fichero de
configuración de ansible para que no haya errores (utilizamos become: true para
ejecutar el comando con permisos de root)
{{pasted_image_20230107134735.png|}}
Y para eliminar un programa, lo haríamos de esta forma:
{{pasted_image_20230108113358.png|}}
Ahora para aplicar un apt autoremove, haríamos esto:
{{pasted_image_20230108113601.png|}}
Para actualizar todos los repositorios, sería de esta forma:
{{pasted_image_20230108113926.png|}}
===== modulo_service =====
Podemos también iniciar un servicio de esta manera:
{{pasted_image_20230107140959.png|}}
Pero si queremos detenerlo, será de esta forma:
{{pasted_image_20230107141114.png|}}
Si queremos hacerle un enable, sería de esta otra forma:
{{pasted_image_20230107141154.png|}}
Para hacer un restart:
{{pasted_image_20230107141226.png|}}
===== Playbooks =====
Esto sirve para automatizar la ejecución de muchos comandos en los distintos
servidores; es como una receta o un script donde se guardan los distintos
comandos a ejecutar y en qué servidores. Por tanto creamos el fichero con
extensión yml:
{{pasted_image_20230106084145.png|}}
Y a este fichero le pondremos esta estructura para hacer un ping a todas las
máquinas dentro del grupo servers, y luego crear dos archivos y hacer un ping:
{{pasted_image_20230106084400.png|}}
Y ahora para lanzar este playbook a la máquina o al grupo de máquinas que estén
dentro del grupo servers, debemos ejecutar este comando:
{{pasted_image_20230106084540.png|}}
Y ahora vemos que en la máquina administrada se crearon correctamente estos dos
archivos dentro del actual directorio de trabajo:
{{pasted_image_20230106084650.png|}}
En caso de querer ejecutar un comando en un solo equipo, debemos especificarlo
en el playbook de esta manera:
{{pasted_image_20230106084909.png|}}
===== Variables de ansible =====
Podemos crear variables como en cualquier lenguaje de programación. Por ejemplo
en este caso voy a crear una variable llamada saludos que va a tener en su
interior un hola mario!!; y voy a imprimir todo el texto con esta variable en un
documento de texto utilizando el módulo copy:
{{pasted_image_20230108181739.png|}}