====== 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|}}