Primeros pasos con Ansible

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

1

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *