Configuración inicial:
Levanta una máquina debian y configura el acceso con clave pública ssh
Crea un inventario de ansible con la IP o nombre de esa máquina, el usuario y la clave privada
Comprueba la conectividad con el módulo ping
Haz una actualización completa de paquetes con el módulo apt
Crea tu primer playbook que incluya un servidor apache y una modificación básica del index.html
Añade el reinicio del servicio con un manejador
Utiliza una plantilla para el index.html que ofrezca el nombre del host y la IP (facts)
Levanta una máquina debian y configura el acceso con clave pública ssh
Voy a usar la máquina burbuja con IP 172.22.200.101
En el equipo anfitrión:
apt install ansible
Para que no haya que meter la frase de paso de ssh:
root@holmes:/home/maria# ssh-agent /bin/bash root@holmes:/home/maria# ssh-add .ssh/openstack Enter passphrase for .ssh/openstack: Identity added: .ssh/openstack (.ssh/openstack)
Crea un inventario de ansible con la IP o nombre de esa máquina, el usuario y la clave privada
El inventario se crea en /etc/ansible/hosts
[oracle] 172.22.200.91 ansible_user=debian ansible_ssh_private_key_file=/home/maria/.ssh/openstack
Comprueba la conectividad con el módulo ping
root@holmes:/home/maria# ansible all -m ping 172.22.200.91 | SUCCESS => { "changed": false, "ping": "pong" }
Haz una actualización completa de paquetes con el módulo apt
maria@holmes:/media/maria/sherlock/Documentos/ASO/ansible$ ansible all -s -m apt -a "update_cache=yes" 172.22.200.91 | FAILED! => { "changed": false, "failed": true, "msg": "Could not find aptitude. Please ensure it is installed." }
Instalando aptitude en la máquina del cloud:
maria@holmes:/media/maria/sherlock/Documentos/ASO/ansible$ ansible all -s -m apt -a "update_cache=yes" 172.22.200.91 | SUCCESS => { "cache_update_time": 1516728031, "cache_updated": true, "changed": false }
Crea tu primer playbook que incluya un servidor apache y una modificación básica del index.html
Playbook:
- hosts: oracle tasks: - name: apache server test apt: name=apache2 update_cache=yes state=latest - name: apache server modify blockinfile: dest: /var/www/html/index.html block: index modification
Para ejecutar el playbook:
maria@holmes:/media/maria/sherlock/Documentos/ASO/ansible$ ansible-playbook -s apache.yml PLAY *************************************************************************** TASK [setup] ******************************************************************* ok: [172.22.200.91] TASK [apache server test] ****************************************************** ok: [172.22.200.91] TASK [apache server modify] **************************************************** changed: [172.22.200.91] PLAY RECAP ********************************************************************* 172.22.200.91 : ok=3 changed=1 unreachable=0 failed=0
Reinicamos apache desde la máquina
debian@audit:~$ sudo systemctl restart apache2.service
Y listo.
Añade el reinicio del servicio con un manejador
El playbook quedaría:
- hosts: oracle tasks: - name: apache server test apt: name=apache2 update_cache=yes state=latest - name: apache server modify blockinfile: dest: /var/www/html/index.html block: index modification 2 handlers: - name: restart apache2 service: name=apache2 state=restarted
Y ejecutamos
maria@holmes:/media/maria/sherlock/Documentos/ASO/ansible$ ansible-playbook -s apache.yml PLAY *************************************************************************** TASK [setup] ******************************************************************* ok: [172.22.200.91] TASK [apache server test] ****************************************************** ok: [172.22.200.91] TASK [apache server modify] **************************************************** changed: [172.22.200.91] PLAY RECAP ********************************************************************* 172.22.200.91 : ok=3 changed=1 unreachable=0 failed=0
Utiliza una plantilla para el index.html que ofrezca el nombre del host y la IP (facts)
He creado un fichero con extension j2 que será la plantilla del index:
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>Index modificado</title> </head> <body> <pre>Hostname: {{ ansible_hostname }}</pre> <pre>IP: {{ ansible_eth0.ipv4.address }} </pre> </body> </html>
Y el playbook quedará:
- hosts: oracle tasks: - debug: var=hostvars[inventory_hostname]['ansible_default_ipv4']['address'] - name: apache server test apt: name=apache2 update_cache=yes state=latest - name: apache server modify blockinfile: dest: /var/www/html/index.html block: index modification 2 - name: modify index.html template: src=apache.j2 dest=/var/www/html/index.html owner=www-data group=www-data mode=0644 handlers: - name: restart apache2 service: name=apache2 state=restarted
Cuando ejecutamos:
maria@holmes:/media/maria/sherlock/Documentos/ASO/ansible$ ansible-playbook -s apache.yml PLAY *************************************************************************** TASK [setup] ******************************************************************* Enter passphrase for key '/home/maria/.ssh/openstack': ok: [172.22.200.91] TASK [debug] ******************************************************************* ok: [172.22.200.91] => { "hostvars[inventory_hostname]['ansible_default_ipv4']['address']": "10.0.0.16" } TASK [apache server test] ****************************************************** ok: [172.22.200.91] TASK [apache server modify] **************************************************** changed: [172.22.200.91] TASK [modify index.html] ******************************************************* changed: [172.22.200.91] PLAY RECAP ********************************************************************* 172.22.200.91 : ok=5 changed=2 unreachable=0 failed=0