Skip to main content

Playbook

Vamos a crear nuestro primer playbook simple. Vamos a instalar Nginx para prueba.

AD-HOC vs Playbooks

Los comandos ad-hoc se pierden, y para eso colocamos todo en playbooks. Generalmente el uso de Ansible debe siempre ser hecho sobre playbooks.

¿Ya pensaste tener que hacer comando a comando de todo aquello que hiciste y ni consigues recordar nuevamente o reaprovechar lo que fue hecho? Con un archivo puedes tener una gerencia de tus comandos y dar mejor mantenimiento a tu parque de máquinas. En caso de configuración siempre utiliza playbook, en caso de consulta puedes usar el ad-hoc.

Vamos a alterar el host formando grupos ahora. En este caso cada vez que nos refiramos a webservers Ansible entrará en las dos máquinas, y db solamente en robot-2

[webservers]
robot-1
robot-2

[db]
robot-2

Primer playbook

Vea my_playbook para ver el archivo que vamos a aplicar.

Observa que ya colocamos los hosts que serán ejecutados en la tarea, luego ni necesitamos pasar los hosts Otro detalle es que pasamos el remote_user y cuando esta variable es pasada ella sustituye la que está definida en el .cfg

~/projects/ansible/study-ansible/Aula 3  - Playbook main !3 ?3                                                                                                                     1.1.7 18:07:41
❯ ansible-playbook my_playbook.yml

PLAY [Install nginx] ******************************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************************
ok: [robot-2]
ok: [robot-1]

TASK [Instalando o Nginx] *************************************************************************************************************************************************************************
changed: [robot-1]
changed: [robot-2]

PLAY RECAP ****************************************************************************************************************************************************************************************
robot-1 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
robot-2 : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0


~/projects/ansible/study-ansible/Aula 3 - Playbook main !3 ?3 1.1.7 18:10:13
curl http://robot-1:
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
body {
width: 35em;
margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif;
}
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>


~/projects/ansible/study-ansible/Aula 3 - Playbook main !3 ?3 1.1.7 18:11:18
❯ ansible webservers -m shell -a "ps -ef | grep nginx"
robot-2 | CHANGED | rc=0 >>
root 13122 1 0 21:08 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 13125 13122 0 21:08 ? 00:00:00 nginx: worker process
ubuntu 13314 13313 0 21:11 pts/0 00:00:00 /bin/sh -c ps -ef | grep nginx
ubuntu 13316 13314 0 21:11 pts/0 00:00:00 grep nginx
robot-1 | CHANGED | rc=0 >>
root 13755 1 0 21:08 ? 00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 13758 13755 0 21:08 ? 00:00:00 nginx: worker process
ubuntu 13947 13946 0 21:11 pts/0 00:00:00 /bin/sh -c ps -ef | grep nginx
ubuntu 13949 13947 0 21:11 pts/0 00:00:00 grep nginx

Segundo playbook

Vea my_playbook2

En este caso vamos a usar el módulo de service para garantizar que el servicio estará activo e iniciado.

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/service_module.html

~/projects/ansible/study-ansible/Aula 3  - Playbook main !3 ?3                                                                                                                     1.1.7 18:20:51
❯ ansible-playbook my_playbook\ 2.yml

PLAY [Install nginx] ******************************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************************
ok: [robot-2]
ok: [robot-1]

TASK [Instalando o Nginx] *************************************************************************************************************************************************************************
ok: [robot-1]
ok: [robot-2]

TASK [Habilitando service nginx] ******************************************************************************************************************************************************************
ok: [robot-1]
ok: [robot-2]

TASK [Startando service nginx] ********************************************************************************************************************************************************************
ok: [robot-2]
ok: [robot-1]

PLAY RECAP ****************************************************************************************************************************************************************************************
robot-1 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
robot-2 : ok=4 changed=0 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Tercera versión playbook

Vea my_playbook3 Vamos a usar el módulo copy y un handler que es notificado para reiniciar nginx cuando un archivo de configuración sea modificado.

Donde queda ok quiere decir que no alteró pues fueron hechos por los comandos anteriores, o sea, no reejecutará. Esto es la idempotencia.

❯ ansible-playbook my_playbook3.yml

PLAY [Install nginx] ******************************************************************************************************************************************************************************

TASK [Gathering Facts] ****************************************************************************************************************************************************************************
ok: [robot-1]
ok: [robot-2]

TASK [Instalando o Nginx] *************************************************************************************************************************************************************************
ok: [robot-2]
ok: [robot-1]

TASK [Habilitando service nginx] ******************************************************************************************************************************************************************
ok: [robot-1]
ok: [robot-2]

TASK [Startando service nginx] ********************************************************************************************************************************************************************
ok: [robot-2]
ok: [robot-1]

TASK [Copiando o index] ***************************************************************************************************************************************************************************
changed: [robot-2]
changed: [robot-1]

TASK [Copiando o nginx.conf] **********************************************************************************************************************************************************************
changed: [robot-2]
changed: [robot-1]

RUNNING HANDLER [Restantando o nginx] *************************************************************************************************************************************************************
changed: [robot-2]
changed: [robot-1]

PLAY RECAP ****************************************************************************************************************************************************************************************
robot-1 : ok=7 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
robot-2 : ok=7 changed=3 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

Extras

La ejecución de un playbook puede ser hecha con algunos extras.

Puede ejecutar con varios niveles de verbosidad.

ansible-playbook main.yml
ansible-playbook main.yml -v
ansible-playbook main.yml -vv
ansible-playbook main.yml -vvv
ansible-playbook main.yml -vvvv

Sirve para ensayar los cambios y lo que sucedería, bueno para una situación destructiva

ansible-playbook main.yml --check

Da para usar el diff para ver las diferencias

ansible-playbook main.yml --diff

Da para ejecutar llamando una tag específica para una role o tag para evitar correr el archivo entero

ansible-playbook main.yml --tag "install_role"

o sumando todo

ansible-playbook main.yml --diff -vv --tag"install_role"