sábado, 16 de mayo de 2020

Instalar Ansible y crear Playbook

Hola mis queridas ardillas! ¿como van después de tanto tiempo?
Como nadie lee esta parte vamos a lo nuestro ¬¬.
En el post de hoy vamos a ver como instalar Ansible y crear un Playbook que nos permita instalar Apache, y en caso de estar ya instalado, iniciar el servicio si no lo está.

Supongo que si estas acá ya sabes lo que es Ansible, pero si no lo sabes, según Wikipedia Ansible es una plataforma de software libre para configurar y administrar ordenadores. Ansible es categorizado como una herramienta de orquestación. Gestiona nodos a través de SSH y no requiere ningún software remoto adicional (excepto Python 2.4 o posterior​).

Para instalar Ansible:

sudo apt-get install ansible

Creamos el archivo con el Playbook:

nano InstalarIniciarApache.yml

Y pegamos lo siguiente:

---
- name: Instalar Apache
  hosts: Webserver
  user: root
  become: true

  tasks:

  - name: Instalar Apache
    apt:
      name: apache2
      state: present

  - name: Encender Apache
    service:
      name: apache2
      state: started

Ctrl + O para guardar.
ENTER para mantener el nombre.
Ctrl + X para salir.

Que manejo del teclado impresionante que tenes.
Presten atención a los espacios y a cada mínimo detalle de la sintaxis porque sino básicamente no funciona y podes estar horas para resolverlo... si lo resolves ¬¬

Ahora vamos a definir hosts que en nuestro Playbook llamamos Webserver y que van a ser aquellos a los que le vamos a aplicar nuestro Playbook y en consecuencia, le vamos a instalar Apache o vamos a levantar el servicio si es que se encuentra detenido.

Editamos el archivo /etc/ansible/hosts y agregamos los nodos sobre los cuales vamos a realizar las tareas automáticas:

sudo nano /etc/ansible/hosts 

Buscamos la linea que dice [webservers] y agregamos, en mi caso, las 2 IPs de los nodos de mi red:


Una aclaración importante, todo en Linux es casesensitive, o sea si en el Playbook pusieron Webserver con la "W" en el host también va con "W", porque si lo ponen con "w" (minúscula) no va a funcionar.
Para saber la ip de la maquina podes ejecutar ifconfig o ip addr.
Ctrl + O para guardar.
ENTER para mantener el nombre.
Ctrl + X para salir.

Muy bien con ese teclado, hacker.

Bueno, ahora tenemos que configurar la parte de la autenticación con los nodos, que lo vamos a hacer con llave SSH.
En la maquina central/principal/donde instalamos Ansible ejecutamos:

ssh-keygen -t rsa

Presionamos ENTER ambas veces:


Una vez realizado este paso tenemos 2 archivos en nuestro home, mas precisamente en /home/tusuario/.ssh a saber:

id_rsa y id_rsa.pub



Una es la publica (si, la que dice .pub, muy bien, estas aprendiendo demasiado rápido). La publica la copiamos en cada nodo remoto con el siguiente comando:

ssh-copy-id -i id_rsa.pub root@192.168.2.111

Deben reemplazar la ip por la de sus nodos. Ponemos "yes" y ya queda copiada:


Fijense que nos dice que probemos loguearnos de esta forma en la maquina remota:

ssh 'root@192.168.2.111'

Y no debería pedirnos password. Si les pasa esto:


Es porque no tienen permisos para loguearse con root por SSH.
Lo que tienen que hacer es editar el archivo /etc/ssh/sshd_config.
Buscar la linea "PermitRootLogin" y ponerle yes.
Por las dudas verifiquen que la siguiente linea también se encuentre en yes:
PubkeyAuthentication yes


Reinician el servicio y prueban de nuevo:

service ssh restart 

Ya con esto tenemos conectividad desde la maquina principal hacia los nodos.
Para verificar ejecutamos:

ansible all -m ping -u root

Y vemos que ambos nodos responden (ignoren mi Warning de Python ¬¬)


Bueno, ahora viene la hora de la verdad, probar nuestro Playbook para ver si nos instala Apache. Primero verifico que ninguno de los 2 nodos lo tiene instalado:

service apache2 status

Luego ejecutamos nuestro Playbook:


Como vemos en uno de los nodos se instalo bien y en el otro nos dio error.
Vamos a verificar que este el servicio iniciado en el que se instalo bien:

service apache2 status


Y en el otro sigue sin levantar:


Para evitar el error de Python con Ansible lo que hice fue configurar manualmente para que use el interprete de Python3:

ansible-playbook InstalarIniciarApache.yml -e 'ansible_python_interpreter=/usr/bin/python3'

Y ahí se instalo correctamente:


Verificamos que quedo instalado:


Por ultimo, probamos bajar el servicio de Apache en el host remoto para luego ejecutar el Playbook a ver si lo levanta. Nos conectamos al host remoto:

ssh 'root@192.168.2.111'

Para bajar el servicio ejecutamos:

service apache2 stop 

Para verificar el estado:

service apache2 status

Luego salimos del host remoto con exit y ejecutamos el Playbook:

ansible-playbook InstalarIniciarApache.yml -e 'ansible_python_interpreter=/usr/bin/python3'

Por ultimo nos logueamos en el remoto de nuevo y vemos el estado de apache:

ssh 'root@192.168.2.111'

service apache2 status




Funciono :)

¿Increíble no? Esto de las computadoras es una verdadera locura.

Para seguirme en Facebook: PINCHA ACA
Para seguirme en Twitter: PINCHA ACA o ACA
Podes suscribirte a los mails también (a la derecha, donde dice ingresa tu mail), tremendo, este blog tiene todo.
Menos Youtube, muy pronto, próximamente, coming soon!

Si te sirvió compartí, no seas egoísta.
Hasta la próxima!

No hay comentarios:

Publicar un comentario