Los módulos son el núcleo de Ansible. Son pequeños programas que Ansible envía a los nodos para ejecutar tareas específicas. Los módulos pueden realizar una amplia variedad de tareas, desde la gestión de paquetes hasta la configuración de servicios y la manipulación de archivos.

Conceptos Clave

  1. Módulos Integrados: Ansible viene con una gran cantidad de módulos integrados que cubren una amplia gama de funcionalidades.
  2. Módulos Personalizados: Puedes escribir tus propios módulos si necesitas funcionalidades específicas que no están cubiertas por los módulos integrados.
  3. Idempotencia: Los módulos de Ansible están diseñados para ser idempotentes, lo que significa que pueden ejecutarse múltiples veces sin cambiar el resultado después de la primera ejecución, siempre que el estado deseado ya se haya alcanzado.

Tipos de Módulos

Ansible tiene varios tipos de módulos, algunos de los más comunes son:

  • Módulos de Gestión de Paquetes: apt, yum, pip
  • Módulos de Gestión de Servicios: service, systemd
  • Módulos de Gestión de Archivos: copy, template, file
  • Módulos de Gestión de Usuarios y Grupos: user, group
  • Módulos de Gestión de Redes: firewalld, iptables

Ejemplo Práctico

Vamos a ver un ejemplo práctico de cómo usar algunos de estos módulos en un playbook.

Playbook de Ejemplo

---
- name: Ejemplo de uso de módulos en Ansible
  hosts: localhost
  tasks:
    - name: Instalar paquete nginx
      apt:
        name: nginx
        state: present
      become: yes

    - name: Iniciar y habilitar el servicio nginx
      service:
        name: nginx
        state: started
        enabled: yes

    - name: Crear un archivo de configuración
      copy:
        content: |
          server {
              listen 80;
              server_name localhost;
              location / {
                  root /var/www/html;
                  index index.html index.htm;
              }
          }
        dest: /etc/nginx/sites-available/default
        owner: root
        group: root
        mode: '0644'
      become: yes

    - name: Recargar el servicio nginx
      service:
        name: nginx
        state: reloaded
      become: yes

Explicación del Playbook

  1. Instalar paquete nginx:

    - name: Instalar paquete nginx
      apt:
        name: nginx
        state: present
      become: yes
    

    Este bloque usa el módulo apt para asegurarse de que el paquete nginx esté instalado. La opción become: yes se usa para ejecutar la tarea con privilegios de superusuario.

  2. Iniciar y habilitar el servicio nginx:

    - name: Iniciar y habilitar el servicio nginx
      service:
        name: nginx
        state: started
        enabled: yes
      become: yes
    

    Este bloque usa el módulo service para iniciar y habilitar el servicio nginx.

  3. Crear un archivo de configuración:

    - name: Crear un archivo de configuración
      copy:
        content: |
          server {
              listen 80;
              server_name localhost;
              location / {
                  root /var/www/html;
                  index index.html index.htm;
              }
          }
        dest: /etc/nginx/sites-available/default
        owner: root
        group: root
        mode: '0644'
      become: yes
    

    Este bloque usa el módulo copy para crear un archivo de configuración para nginx. El contenido del archivo se especifica directamente en el playbook.

  4. Recargar el servicio nginx:

    - name: Recargar el servicio nginx
      service:
        name: nginx
        state: reloaded
      become: yes
    

    Este bloque usa el módulo service para recargar el servicio nginx después de que se haya cambiado la configuración.

Ejercicio Práctico

Ejercicio

Crea un playbook que haga lo siguiente:

  1. Instale el paquete git.
  2. Cree un usuario llamado deploy con el shell /bin/bash.
  3. Cree un directorio /home/deploy/.ssh con los permisos adecuados.
  4. Copie una clave pública SSH al archivo /home/deploy/.ssh/authorized_keys.

Solución

---
- name: Ejercicio de módulos en Ansible
  hosts: localhost
  tasks:
    - name: Instalar paquete git
      apt:
        name: git
        state: present
      become: yes

    - name: Crear usuario deploy
      user:
        name: deploy
        shell: /bin/bash
        state: present
      become: yes

    - name: Crear directorio .ssh
      file:
        path: /home/deploy/.ssh
        state: directory
        owner: deploy
        group: deploy
        mode: '0700'
      become: yes

    - name: Copiar clave pública SSH
      copy:
        src: /path/to/your/public_key.pub
        dest: /home/deploy/.ssh/authorized_keys
        owner: deploy
        group: deploy
        mode: '0600'
      become: yes

Explicación de la Solución

  1. Instalar paquete git:

    - name: Instalar paquete git
      apt:
        name: git
        state: present
      become: yes
    

    Usa el módulo apt para instalar git.

  2. Crear usuario deploy:

    - name: Crear usuario deploy
      user:
        name: deploy
        shell: /bin/bash
        state: present
      become: yes
    

    Usa el módulo user para crear un usuario llamado deploy.

  3. Crear directorio .ssh:

    - name: Crear directorio .ssh
      file:
        path: /home/deploy/.ssh
        state: directory
        owner: deploy
        group: deploy
        mode: '0700'
      become: yes
    

    Usa el módulo file para crear el directorio .ssh con los permisos adecuados.

  4. Copiar clave pública SSH:

    - name: Copiar clave pública SSH
      copy:
        src: /path/to/your/public_key.pub
        dest: /home/deploy/.ssh/authorized_keys
        owner: deploy
        group: deploy
        mode: '0600'
      become: yes
    

    Usa el módulo copy para copiar la clave pública SSH al archivo authorized_keys.

Conclusión

En esta sección, hemos aprendido sobre los módulos de Ansible, su importancia y cómo usarlos en playbooks. Los módulos son fundamentales para automatizar tareas con Ansible y permiten una gran flexibilidad y control sobre la configuración de los sistemas. En el próximo módulo, profundizaremos en los playbooks, que son la forma de organizar y ejecutar múltiples tareas de manera secuencial.

© Copyright 2024. Todos los derechos reservados