Esta lección está en elaboración
Esta lección es una introducción al uso de Ansible, la herramienta de automatización de Red Hat. Como ejemplo, ...
Ansible es una herramienta de administración automatizada de ordenadores, creada por Michael DeHaan en 2012. La primera versión se publicó en marzo de 2012 y la versión 1.0 se publicó en febrero de 2013. RedHat compró Ansible en octubre de 2015.
Ansible es software libre GPL 3.0 y es la base de Automation controller, un producto comercial de RedHat, que hasta septiembre de 2021 se llamaba Ansible Tower.
Hasta 2020 cada versión de Ansible incluida el propio Ansible y la biblioteca de módulos completa. En 2020 Ansible ha separado el desarrollo del núcleo de Ansible del de los módulos y extensiones (que se agrupan en colecciones). Así, Ansible 3.0, publicada en febrero de 2021 contenía el núcleo de Ansible 2.10 y una selección de colecciones de módulos (la nueva estructura se explica en este post y en este), Ansible 4.0 contenía Ansible core 2.11, Ansible 5.0 contenía Ansible core 2.12, etc.
Con Ansible, un ordenador es la máquina de control (control machine) y el resto de ordenadores son los nodos administrados (managed nodes).
Ansible se instala en la máquina de control. En los nodos administrados no es necesario instalar ningún software. El acceso de la máquina de control a los nodos administrados se hace normalmente mediante conexiones SSH.
En los tres apartados siguientes:
Instalaremos Ansible en una máquina virtual de VirtualBox con Ubuntu 18.04.3 Server que ejercerá de máquina de control. La instalación la realizaremos con Packer a partir de la imagen creada en el ejemplo 1 de la lección Packer (2) mediante la plantilla y script siguientes:
{
"builders": [
{
"type": "virtualbox-ovf",
"source_path": "packer-2-1/packer-2-1-ubuntu-18-04-3-server.ova",
"guest_additions_mode": "disable",
"boot_wait": "30s",
"ssh_username": "mclibre",
"ssh_password": "mclibre",
"shutdown_command": "echo 'mclibre' | sudo -S shutdown -P now",
"output_directory": "ansible-1-1",
"vm_name": "ansible-1-1-control-ubuntu-18-04-3-server",
"format": "ova"
}
],
"provisioners": [
{
"type": "shell",
"execute_command": "echo 'mclibre' | sudo -S sh -c '{{ .Vars }} {{ .Path }}'",
"script": "ansible-1-1.sh",
"pause_before": "10s"
}
]
}
Notas:
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt full-upgrade -yq
sudo DEBIAN_FRONTEND=noninteractive apt install software-properties-common -yq
sudo apt-add-repository ppa:ansible/ansible -y
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt install ansible -yq
En los nodos administrados no es necesario instalar Ansible. Los nodos administrados serán también máquinas virtuales de VirtualBox con Ubuntu 18.04.3 Server. Utilizaremos la imagen creada en el ejemplo 1 de la lección Packer (2) para los nodos administrados
La máquina de control Ansible se conecta con los nodos administrados por SSH. Para poder realizar esa conexión y comprobar su correcto funcionamiento, realice estos pasos en la máquina de control:
sudo nano /etc/ansible/hosts
Las opciones de configuración se pueden escribir en grupo [XXX-vars] (y afectan a todos los nodos incluidos en el grupo:
[clients]
192.168.1.16
[clients:vars]
ansible_python_interpreter=/usr/bin/python3
Notas:
Las opciones de configuración se pueden escribir en cada nodo (y afectan únicamente a dicho nodo):
[clients]
192.168.1.16 ansible_python_interpreter=/usr/bin/python3
ssh-keygen -t rsa
ssh-copy-id mclibre@192.168.1.16
ansible all -m ping
Por cada nodo administrado debe mostrarse una respuesta similar a esta:
192.168.1.16 | SUCCESS => {
"changed": false,
"ping": "pong"
}
Ansible trabaja mediante playbooks. Los playbooks son ficheros YAML que describen las operaciones a realizar sobre los nodos administrados.
Para ejecutar comandos de la shell, Ansible dispone del módulo shell.
---
- hosts: 'clients'
tasks:
- name: 'ejemplo 1'
shell: 'ls -al >> prueba.txt'
ansible-playbook playbook-1-1.yaml
PLAY [clients] ******************************************************************
TASK [Gathering facts] **********************************************************
ok: [192.168.1.16]
TASK [ejemplo 1] ****************************************************************
changed: [192.168.1.16]
PLAY RECAP **********************************************************************
192.168.1.16 : ok=2 changed=1 unreachable=0 failed=0
ansible-playbook playbook-1-1.yaml --verbose
Para tareas de mantenimiento de paquetes, Ansible dispone del módulo apt.
---
- hosts: 'clients'
tasks:
- name: 'ejemplo 2'
become: true
apt:
update_cache: true
upgrade: true
ansible-playbook playbook-1-2.yaml -K
SUDO password:
PLAY [clients] ******************************************************************
TASK [Gathering facts] **********************************************************
ok: [192.168.1.16]
TASK [ejemplo 2] ****************************************************************
[WARNING]: Could not find aptitude. Using apt-get instead.
changed: [192.168.1.16]
PLAY RECAP **********************************************************************
192.168.1.16 : ok=2 changed=1 unreachable=0 failed=0
Nota:
Para tareas de mantenimiento de paquetes, Ansible dispone del módulo apt.
En el ejemplo siguiente, se instala el paquete aptitude, un interfaz en modo texto de APT.
apt-cache policy aptitude
Si aptitude no está instalado, se mostrará la respuesta:
aptitude:
Instalados: (ninguno)
...
---
- hosts: 'clients'
tasks:
- name: 'ejemplo 3'
become: true
apt:
name: 'aptitude'
state: 'present'
ansible-playbook playbook-1-3.yaml -K
apt-cache policy aptitude
Si aptitude está instalado, se mostrará una respuesta similar a esta:
aptitude:
Instalados: 0.8.10-6ubuntu1
...
Para desinstalar el paquete, el playbook sería:
---
- hosts: 'clients'
tasks:
- name: 'ejemplo 3'
become: true
apt:
name: 'aptitude'
state: 'absent'
Conferencias en RedHat Summit 2018 (mayo 2018)