Probando nuestro sistema de automatización Ansible
Versiones de python en clientes
Ansible utiliza Python3, y es importante tener la última versión de Python3, o al menos la misma en el equipo de control y la de los clientes para evitar incompatibilidades de módulos no existentes en versiones anteriores. Si tenemos el caso de que la versión del equipo de control es nueva y la de los clientes es antigua, puede dar fallo al lanzar las peticiones Ansible.
Primera prueba de Ansible
Probar si hay respuesta de ping
administrador@server34:~/ansible-centro$ ansible siatic -i inventory -m ping
BECOME password:
172.18.220.45 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/local/bin/python3.11"
},
"changed": false,
"ping": "pong"
}
172.18.220.88 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/local/bin/python3.11"
},
"changed": false,
"ping": "pong"
}
Cambiar el usuario de conexión en ansible
Para conectarse con otro usuario que no sea el mismo nombre que el que tenemos de control: -e «ansible_ssh_user=<usuario>»
Ejemplo comandos Ad-Hoc de prueba
Ping a cada cliente del inventario:
$ ansible -e "ansible_ssh_user=<usuario>" webservers -i inventory -m ping
Mantener iniciado el cron de crontab en los clientes:
$ ansible -e "ansible_ssh_user=linex" siatic -i inventory -m service -a 'name=cron state=started'
Copia de ficheros a los clientes del inventario:
$ ansible -e "ansible_ssh_user=linex" siatic -i inventory -m copy -a "src=/home/administrador/ansible-centro/files/ansible_test dest=/tmp/ansible_test"
Usando ficheros YAML
Para el uso de tareas automatizadas con Ansible, usaremos lo que son llamados YAML, un lenguaje de serialización de datos que las personas pueden comprender y suele utilizarse en el diseño de archivos de configuración. Puedes ver más información sobre YAML en la propia página de RedHat.
En este pequeño tutorial de uso no profundizaremos como crear y formatear los YAML con sus distintos módulos para Ansible, ya que es demasiado extenso. Para ello puedes empezar mirando la documentación oficial de Ansible. Quizás algún día haga un mini-curso de creación de YAML para Ansible, pero de momento no es el motivo de esta explicación.
Ejemplo 1: modulo «copy». Copia de ficheros a los clientes de nuestro inventario.
Crearemos los siguientes archivos, con los inventarios (como ya vimos en la parte I), el fichero ansible.cfg de configuración y uno o varios ficheros YAML con la tarea a realizar. En este ejemplo haremos la copia de varios ficheros que se encuentran en el directorio ./files

---
- name: Test copia de fichero
hosts: aio
remote_user: administrador
become: yes
tasks:
- name: Copiando fichero
ansible.builtin.copy:
src: ./files/ansible_test
dest: /tmp/ansible_test
owner: linex
group: linex
mode: '0755'
...
Ejemplo 2: modulo «apt». Comprobar que esté instalado un paquete.
---
- name: Check nmap installed
hosts: aio
remote_user: administrador
tasks:
- name: ensure NMAP is installed
ansible.builtin.apt:
name: nmap
state: present
update_cache: true
...
Ejemplo 3: modulo «package». Instalación servidor NGINX en varios clientes a la vez
---
- name: Instalación servidor Nginx
hosts: aio
remote_user: administrador
become: yes
tasks:
- name: Instalando paquete nginx
package:
name: nginx
state: latest
update_cache: true
- name: Copia fichero default
copy:
src: files/default
dest: /etc/nginx/sites-available/default
owner: root
group: root
mode: '0644'
- name: Servicio nginx arrancado
service:
name: nginx
state: started
enabled: true
- name: Arrancar Firewall
ufw:
state: enabled
policy: deny
- name: Habilitar log del firewall
ufw:
logging: on
- name: Abrir firewall port 22 tcp
ufw:
rule: allow
port: "22"
proto: tcp
- name: Abrir firewall port 80 tcp
ufw:
rule: allow
port: "80"
proto: tcp
- name: Abrir firewall port 443 tcp
ufw:
rule: allow
port: "443"
proto: tcp
- name: Copiar index.html a /var/www/html/
copy:
src: files/index.html
dest: /var/www/html/
owner: www-data
group: www-data
mode: '0644'
...