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: yesExplicación del Playbook
-
Instalar paquete nginx:
- name: Instalar paquete nginx apt: name: nginx state: present become: yesEste bloque usa el módulo
aptpara asegurarse de que el paquetenginxesté instalado. La opciónbecome: yesse 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: yesEste bloque usa el módulo
servicepara 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: yesEste bloque usa el módulo
copypara 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: yesEste bloque usa el módulo
servicepara recargar el servicionginxdespué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
deploycon el shell/bin/bash. - Cree un directorio
/home/deploy/.sshcon 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: yesExplicación de la Solución
-
Instalar paquete git:
- name: Instalar paquete git apt: name: git state: present become: yesUsa el módulo
aptpara instalargit. -
Crear usuario deploy:
- name: Crear usuario deploy user: name: deploy shell: /bin/bash state: present become: yesUsa el módulo
userpara 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: yesUsa el módulo
filepara crear el directorio.sshcon 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: yesUsa el módulo
copypara 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
