Infraestructura como código
Introducción
Ansible es una herramienta de automatización altamente eficiente diseñada para administrar varios hosts a la vez, así como para administrar la configuración, la implementación de aplicaciones y otras tareas. Por ello, en este post, vamos a:
- Realizar la instalación de ansible
- Conocer los ficheros fundamentales en la configuración de Ansible.
- Trabajar con la estructura de un playbook.
- Trabajar con variables.
- Aprender algunos módulos de Ansible.
- Ejecurar un playbook sencillo.
Instalación de Ansible en Debian 11.
Ansiblo requiere de algunas dependencias para su funcionamiento, por lo que lo primero que deberemos hacer es actualizar el sistema completo:
sudo apt-get update && sudo apt-get upgrade
Instalamos las dependencias:
sudo apt-get install software-properties-common
Para verificar que está operativo, ejecutamos lo siguiente en nuestra máquina:
ansible --version
Y ya podemos ponernos manos a la obra.
Playbook sencillo
Vamos a realizar un pequeño ejemplo de cómo podemos automatizar la instalación de un servidor web en un servidor remoto. Para ello, vamos a utilizar Ansible.
Para ello, realizaremos un fork de este repositorio y realizaremos una clonación en nuesta máquina. Nos dirigiremos al Taller1 y comenzaremos a trabajar.
-
Creamos site.yml.
- hosts: all become: true tasks: # Actualizamos paquetes - name: Actualizamos el sistema apt: update_cache=yes upgrade=yes # Instalar paquetes - name: "Instalar paquetes con apt" apt: # Aquí tienes que poner lo necesario para instalar git y apache2 pkg: - git - apache2 # Copia un fichero a la máquina remota - name: "Copiar fichero a la máquina remota" copy: src: files/foo.txt dest: /etc owner: root group: root mode: '0644' # Copia un template a un fichero - name: "Copiar un template a un fichero de la máquina remota" template: src: template/index.j2 dest: /var/www/html/index.html owner: www-data group: www-data mode: 0644 -
Creamos hosts.
all: children: servidores: hosts: ansible-client: ansible_ssh_host: 192.168.122.120 ansible_ssh_user: ansible ansible_ssh_private_key_file: /home/maria/.ssh/id_rsa -
Creamos index.j2.
<html lang="es"> <head> <meta charset="utf-8"> <title>Prueba Ansible</title> </head> <body> <h1>Gathering Facts</h1> <p>Este ordenador se llama: {{ ansible_hostname }}</p> <p>SO: {{ansible_distribution}} {{ansible_distribution_release}} </p> <h1>Variables declaradas por el usuario a nivel de grupo</h1> <p>Nombre de la bd: {{ bd_name }}</p> <p>Usuario de la bd: {{ bd_user }}</p> <h1>Variables declaradas por el usuario a nivel de nodo</h1> <p>IP: {{ ansible_ssh_host }}</p> </body> </html> ``` -
Ejectuamos el playbook.
ansible-playbook site.yml -i hosts
-
¿Cómo se llama la propiedad que permite que las tareas que ya se han realizado no se vuelvan a ejecutar?
- Idempotencia
-
Captura de pantalla del fichero foo.txt del servidor configurado.
-
Cuando accedemos a la IP del servidor, nos muestra la página web que hemos creado.
Si queréis el playbook completo, lo tenéis en mi repositorio.