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
- Módulos Integrados: Ansible viene con una gran cantidad de módulos integrados que cubren una amplia gama de funcionalidades.
- Módulos Personalizados: Puedes escribir tus propios módulos si necesitas funcionalidades específicas que no están cubiertas por los módulos integrados.
- 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
-
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 paquetenginx
esté instalado. La opciónbecome: yes
se usa para ejecutar la tarea con privilegios de superusuario. -
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 servicionginx
. -
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 paranginx
. El contenido del archivo se especifica directamente en el playbook. -
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 servicionginx
después de que se haya cambiado la configuración.
Ejercicio Práctico
Ejercicio
Crea un playbook que haga lo siguiente:
- Instale el paquete
git
. - Cree un usuario llamado
deploy
con el shell/bin/bash
. - Cree un directorio
/home/deploy/.ssh
con los permisos adecuados. - 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
-
Instalar paquete git:
- name: Instalar paquete git apt: name: git state: present become: yes
Usa el módulo
apt
para instalargit
. -
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 llamadodeploy
. -
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. -
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 archivoauthorized_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.
Ansible: De Principiante a Avanzado
Módulo 1: Introducción a Ansible
Módulo 2: Conceptos Básicos de Ansible
Módulo 3: Playbooks
- Introducción a los Playbooks
- Escribiendo tu Primer Playbook
- Estructura del Playbook
- Variables y Hechos
- Condicionales y Bucles
Módulo 4: Roles
Módulo 5: Técnicas Avanzadas de Playbook
Módulo 6: Ansible Galaxy
Módulo 7: Ansible Tower
- Introducción a Ansible Tower
- Instalando Ansible Tower
- Usando Ansible Tower
- Gestionando Proyectos e Inventarios
Módulo 8: Ansible para DevOps
Módulo 9: Mejores Prácticas de Ansible
- Organización del Código
- Mejores Prácticas de Seguridad
- Ajuste de Rendimiento
- Pruebas de Código Ansible