Instalación y configuración Ansible entornos Debian (parte III): ejecución de pruebas

LINUXSISTEMAS OPERATIVOS
Ansible

Probando nuestro sistema de automatización Ansible

Versiones de python en clientes

Ansible utiliza Python3, y es importante tener la última versión de Python3, o al menos la misma en el equipo de control y la de los clientes para evitar incompatibilidades de módulos no existentes en versiones anteriores. Si tenemos el caso de que la versión del equipo de control es nueva y la de los clientes es antigua, puede dar fallo al lanzar las peticiones Ansible.

Primera prueba de Ansible

Probar si hay respuesta de ping

administrador@server34:~/ansible-centro$ ansible siatic -i inventory -m ping

BECOME password:
172.18.220.45 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/local/bin/python3.11"
    },
    "changed": false,
    "ping": "pong"
}
172.18.220.88 | SUCCESS => {
    "ansible_facts": {
        "discovered_interpreter_python": "/usr/local/bin/python3.11"
    },
    "changed": false,
    "ping": "pong"
}

Cambiar el usuario de conexión en ansible

Para conectarse con otro usuario que no sea el mismo nombre que el que tenemos de control:  -e «ansible_ssh_user=<usuario>»

Ejemplo comandos Ad-Hoc de prueba

Ping a cada cliente del inventario:

$ ansible -e "ansible_ssh_user=<usuario>" webservers -i inventory -m ping

Mantener iniciado el cron de crontab en los clientes:

$ ansible -e "ansible_ssh_user=linex" siatic -i inventory -m service -a 'name=cron state=started'

Copia de ficheros a los clientes del inventario:

$ ansible -e "ansible_ssh_user=linex" siatic -i inventory -m copy -a "src=/home/administrador/ansible-centro/files/ansible_test dest=/tmp/ansible_test"

Usando ficheros YAML

Para el uso de tareas automatizadas con Ansible, usaremos lo que son llamados YAML, un lenguaje de serialización de datos que las personas pueden comprender y suele utilizarse en el diseño de archivos de configuración. Puedes ver más información sobre YAML en la propia página de RedHat.

En este pequeño tutorial de uso no profundizaremos como crear y formatear los YAML con sus distintos módulos para Ansible, ya que es demasiado extenso. Para ello puedes empezar mirando la documentación oficial de Ansible. Quizás algún día haga un mini-curso de creación de YAML para Ansible, pero de momento no es el motivo de esta explicación.

Ejemplo 1: modulo «copy». Copia de ficheros a los clientes de nuestro inventario.

Crearemos los siguientes archivos, con los inventarios (como ya vimos en la parte I), el fichero ansible.cfg de configuración y uno o varios ficheros YAML con la tarea a realizar. En este ejemplo haremos la copia de varios ficheros que se encuentran en el directorio ./files

---
- name: Test copia de fichero
  hosts: aio
  remote_user: administrador
  become: yes
  
  tasks:
    - name: Copiando fichero
      ansible.builtin.copy:
        src: ./files/ansible_test
        dest: /tmp/ansible_test
        owner: linex
        group: linex
        mode: '0755'
...

Ejemplo 2: modulo «apt». Comprobar que esté instalado un paquete.

---
- name: Check nmap installed
  hosts: aio
  remote_user: administrador
  tasks:
    - name: ensure NMAP is installed
      ansible.builtin.apt:
        name: nmap
        state: present
        update_cache: true
...

Ejemplo 3: modulo «package». Instalación servidor NGINX en varios clientes a la vez

---
- name: Instalación servidor Nginx
  hosts: aio
  remote_user: administrador
  become: yes

  tasks:
    - name: Instalando paquete nginx
      package:
        name: nginx
        state: latest
        update_cache: true
    - name: Copia fichero default
      copy:
        src: files/default
        dest: /etc/nginx/sites-available/default
        owner: root
        group: root
        mode: '0644'
    - name: Servicio nginx arrancado
      service:
        name: nginx
        state: started
        enabled: true
    - name: Arrancar Firewall
      ufw:
        state: enabled
        policy: deny
    - name: Habilitar log del firewall
      ufw:
        logging: on
    - name: Abrir firewall port 22 tcp
      ufw:
        rule: allow
        port: "22"
        proto: tcp
    - name: Abrir firewall port 80 tcp
      ufw:
        rule: allow
        port: "80"
        proto: tcp
    - name: Abrir firewall port 443 tcp
      ufw:
        rule: allow
        port: "443"
        proto: tcp
    - name: Copiar index.html a /var/www/html/
      copy:
        src: files/index.html
        dest: /var/www/html/
        owner: www-data
        group: www-data
        mode: '0644'
...