Automatización con Ansible Ad-hoc#
¿Qué es Ansible?#
Ansible es un administrador de configuraciones, provisionador de software, y una herramienta de despliegues open-source que hace que la automatización de procesos de despliegue de aplicaciones y la automatización de infrestructura se conviertan en una operaciones simples y estructuradas.
Ansible tiene algunas ventajas sobre otras herramientas de automatización, que listo abajo:
- Es liviano.
- Facil de configurar.
- No necesita Agente.
- Está escrito en python.
- Cuenta con un sistema de modulos para extender su funcionalidad.
La estructura de Ansible se divide en 2 elementos:
- Nodo de Control (Control Node)
- Host administrado (Managed Host)
Ansible utiliza SSH y Python para poder funcionar; SSH como la forma principal de comunicación y Python como el lenguaje para su desarrollo y ejecución de tareas. En sistemas operativos distintos a GNU/Linux utiliza protocolos como winrm, powershell o incluso CLI, XML, o API.
Por lo anterior Ansible se instala unicamente en el nodo de control, y los nodos administrador solamente deben contar en el caso de GNU/Linux con acceso por SSH (recomendado autenticación con llaves) y Python.
Instalación de Ansible#
Para instalar ansible vamos a depender del sistema operativo donde lo estemos realizando, abajo encontraran algunos ejemplos:
AlmaLinux#
Debian#
Para validar que Ansible fue instalado de forma correcta se puede ejecutar: y deben obtener una salida como la siguiente:ansible [core 2.13.3]
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3.9/site-packages/ansible
ansible collection location = /home/vagrant/.ansible/collections:/usr/share/ansible/collections
executable location = /usr/bin/ansible
python version = 3.9.13 (main, Nov 16 2022, 10:51:39) [GCC 8.5.0 20210514 (Red Hat 8.5.0-15)]
jinja version = 3.1.2
libyaml = True
Configurando Ansible#
Para utilizar ansible se recomienda realizar algunas configuraciones en los hosts administrados como en el nodo de control, estas configuraciones estan detalladas en los siguientes temas.
- Crear un usuario nuevo en todos los hosts, incluido el nodo de control.
- Dar privilegios de sudo al usuario en todos los hosts.
- Generar un par de llaves de SSH en el nodo de control, para usarse con el usuario anterior.
- Copiar la llave de SSH pública a todos los host administrados.
Creación de usuario para Ansible#
Se debe ejecutar con el usuario root en todos los host y el nodo de control.
Otorgar privilegios de sudo#
Se debe ejecutar con el usuario root en todos los host y el nodo de control.
Generar un par de llaves de SSH#
Se debe ejecutar con el usuario nuevo, creado en el paso #1 en el nodo de control.
Referencia: ssh-keysInventarios de Ansible#
Los inventarios de ansible son archivos de texto plano, donde se definen los host que se administraran. Existe un inventario por defecto que podremos encontrar en /etc/ansible/hosts, sin embargo la mejor práctica es utilizar un directorio de proyecto para ir definiendo nuestro inventarios.
En los inventarios podemos definir ip, nombres, grupos de servidores que deseamos administrar.
Ejemplo:#
mail.example.com
[webservers]
foo.example.com
bar.example.com
[dbservers]
one.example.com
two.example.com
three.example.com
[webinfra:children]
webservers
dbservers
uso#
Existen 2 grupos de hosts por defecto en ansible:
- all que contiene un listado con todos los hosts del inventario.
- ungrouped que contiene todos los grupos que no pertenecen a un grupo en especifico.
Configurando Ansible#
Ansible utiliza un archivo de configuracion por defecto ubicado en /etc/ansible/ansible.cfg, este archivo esta en formato INI y contiene todas las opciones disponibles y sus valores por defecto.
Sin embargo al igual que con el inventario por defecto se recomienda utilizar un archivo de configuracion por proyecto.
El comando ansible --version nos muestra en que ubicacion se encuentra el archivo de configuracion que estamos utilizando.
vagrant@buster:~$ ansible --version
ansible 2.7.7
config file = /etc/ansible/ansible.cfg
configured module search path = ['/home/vagrant/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python3/dist-packages/ansible
executable location = /usr/bin/ansible
python version = 3.7.3 (default, Oct 31 2022, 14:04:00) [GCC 8.3.0]
Para que ansible utilice otro archivo de configuracion basta con que creemos un directorio y dentro de ese directorio creemos un archivo de nombre ansible.cfg, luego cuando ejecutemos ansible debemos tener como directorio de trabajo, el directorio donde colocamos el archivo ansible.cfg.
El archivo de configuracion tiene 2 secciones que son las mas importantes:- [defaults]
- [privilege_escalation]
En la seccion defaults vamos a definir 2 variables que son la mas importantes:
- inventory es la ubicacion del inventario que deseamos utilizar.
- remote_user es el usuario que configuramos en los nodos administrados para conectarnos por SSH.
En la seccion privilege_escalation vamos a definir las opciones de SSH que necesitamos, como por ejemplo si debe ejecutarse y obtener privilegios de root, las variables a definir son:
- become especifica si debe escalar privilegios o no.
- become_method especifica el metodo de escalacion de privilegios por defecto sudo.
- become_user especifica el usuario con el que obtendra privilegios, por defecto es root.
- become_ask_pass especifica si preguntara por contraseña, para escalar privilegios por defecto es falso.
