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.

  1. 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
    
  2. 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
    
  3. 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>
        ```
    
  4. Ejectuamos el playbook.

        ansible-playbook site.yml -i hosts
    
  5. ¿Cómo se llama la propiedad que permite que las tareas que ya se han realizado no se vuelvan a ejecutar?

  • Idempotencia
  1. Captura de pantalla del fichero foo.txt del servidor configurado.

  2. 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.