Este libro, te lleva de la mano en un recorrido completo por Ansible, una herramienta de automatización de tareas que es utilizado por muchas empresas de desarrollo de Software. El libro está dividido en ocho capítulos, cada uno cubriendo un aspecto diferente de Ansible.
Uno de los puntos fuertes de este libro es la claridad y concisión con que se presentan los conceptos, el autor también proporciona numerosos ejemplos prácticos y comandos útiles que puedes utilizar para poner en práctica lo que has aprendido.
Capítulo 1: Introducción a Ansible.
En este capítulo se introduce Ansible como una herramienta de automatización de tareas de TI, explicando su arquitectura (estructura de carpetas y archivos) y las características que la hacen adecuada para diferentes entornos, como el uso de archivos YAML y la conexión a diferentes tipos de servidores (Debian, Ubuntu. ArchLinux, Windows).
Menciona las ventajas y desventajas en comparación con otras herramientas de automatización.
Ventajas:
- Soporte para la mayoría de distribuciones
- Instalación simple y de tamaño reducido
- Rápida curva de aprendizaje
- No es necesario un agente instalado en los servidores
- Gran cantidad de módulos para integración
Desventajas:
- No es tan potente como otros productos para la administración de configuraciones
- Se requiere una gran optimización para arquitecturas muy grandes
- La actualización de los módulos puede ser tardía.
Capítulo 2: Instalación y configuración de Ansible.
Instalación en Ubuntu / Debian
Instalando en un entorno de Python
easy install pip
pip install ansible
Capítulo 3: Primeros Pasos
Lo primero es definir los servidores a los cuales Ansible se va a conectar. Esto se hace mediante el archivo hosts
. El default se encuentra en /etc/ansible/hosts
pero puedes definir muchos otros dentro de carpetas.
Para listarlos solo ejecuta:
Para verificar si tienes conexión a estos servidores mediante ssh, puedes ejecutar
Mostrara algo como esto:
S1-Example | UNREACHABLE! => {
"changed": false,
"msg": "Failed to connect to the host via ssh: ssh: connect to host 192.168.4.1 port 22: Connection timed out",
"unreachable": true
}
S2-Example | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
Inventarios (Inventory)
Un inventario es un listado estatico o dinamico de los nodos (servidores) a administrar, y la información necesaria de cada uno de ellos. Es un archivo en donde se separa infraestructura. Puede realizarse dentro del archivo hosts
a partir de "grupos".
Ejemplo
[MainServers]
A-S1 ansible_host=192.168.4.1
B-S2 ansible_host=192.168.4.2
[Balancers]
A-S3 ansible_host=192.168.4.3
En el caso anterior hay 2 grupos. "MainServers" con 2 nodos, y "Balancers" con 1. Esto se puede realizar para agrupar servidores:
- Geograficamente: Servidores en Madrid, Mexico, Virginia
- Por Aplicacion: Web, Base de Datos
- Por Sistema Operativo: Ubuntu, Debian, Windows
- Por Entorno: Development, Production, Stagging
Tambien podemos generar archivos yaml o ini (o sin extensión) para definir nuestro inventario.
Ejemplo:
sudo touch local_inventory
y dentro podemos agregar:
[MainServers]
A-S1 ansible_host=192.168.4.1
B-S2 ansible_host=192.168.4.2
[Balancers]
A-S3 ansible_host=192.168.4.3
Definimos la ruta de nuestro inventario con el parametro "-i".
Tambien podemos mandar mas de un parametro a ansible para conectarnos a un nodo.
- ansible_user: Usuario para conectarse al nodo
- ansible_host: Ip del nodo
- ansible_port: Puerto SSH del nodo
- ansible_ssh_pass: Contraseña para la conexión (Riesgo de Seguridad)
- ansible_become: Define si debes utilizar algun metodo de escalamiento de permisos
- ansible_connection: Tipo de Conexion (ssh, local o docker)
- ansible_become_method: Metodo a utilizar para escalar permisos (sudo, su, pbrun, pfexec, doas, dzdo, ksu)
- ansible_become_user: Usuario a utilizar para escalada de permisos.
El comando de conexion se veria asi:
ansible <server> ansible_user=temporal ansible_port=23
Tambien es posible pasar estos parametros a nivel de grupos.
Capítulo 4: Playbooks
Los playbooks son archivos YAML que definen las tareas a realizar en un servidor o grupo de servidores. El capítulo comienza explicando la estructura básica de un Playbook, que consiste en una lista de tareas y una sección de variables.
Se muestra la sintaxis de los Playbooks de Ansible, que incluye la definición de hosts, variables y tareas. También se muestra cómo utilizar módulos de Ansible en un Playbook para realizar tareas específicas, como la instalación de paquetes o la gestión de servicios.
Aqui dejo un ejemplo de la estructura de un playbook
Nombre del Playbook |
Descripción |
Tareas |
Handlers |
Hosts |
Variables |
Imports |
ejemplo.yml |
Playbook para configurar un servidor web |
Instalar Apache |
Reiniciar servicio de Apache |
webserver |
http_port: 80 |
Este Playbook requiere permisos de sudo |
Ejemplo de Playbook:
---
- name: Instalar Apache y reiniciar servicio
hosts: webserver
become: true
vars:
http_port: 80
tasks:
- name: Instalar Apache
apt:
name: apache2
state: present
- name: Reiniciar servicio de Apache
systemd:
name: apache2
state: restarted
notify: Reiniciar Apache
handlers:
- name: Reiniciar Apache
systemd:
name: apache2
state: restarted
Este playbook comienza especificando el nombre del playbook (name), los hosts en los que se ejecutará (hosts), y que se requerirán privilegios de superusuario (become). También se definen las variables necesarias, en este caso http_port.
Luego, se definen las tareas (tasks) que se ejecutarán en el playbook. En este caso, la tarea es instalar Apache y reiniciar el servicio de Apache utilizando el módulo apt y el módulo systemd, respectivamente.
Además, se define un handler que se activará si se detecta un cambio en el estado del servicio de Apache. Este handler reiniciará el servicio de Apache utilizando el módulo systemd.
Capítulo 5: Modulos
Este capitulo es lo que cubre gran cantidad del libro, es información de la documentación oficial de Ansible, en donde se muestra cada modulo que esta hecho para ansible y los atributos para poder utilizarlos.
Puede verse en linea aqui: https://docs.ansible.com/ansible/latest/getting_started/index.html
En resumen, el libro "Ansible Automatización para todos" es una guía práctica para aprender a utilizar Ansible y automatizar tareas de TI. A lo largo de sus 8 capítulos, se presentan los conceptos básicos de Ansible, la gestión de inventarios, la ejecución de tareas, la gestión de variables, la creación de roles, la orquestación con Ansible Tower, la integración con otros sistemas y el desarrollo avanzado. En cada capítulo se presentan ejemplos y comandos para que el lector pueda practicar y profundizar en el uso de Ansible.