Ansible / julio 25, 2018

Comandos básicos en Ansible [Ansible #3]

Tras el tutorial anterior El inventario en Ansible [Ansible #2], ya deberíais de tener vuestro Inventario preparado para ser usado. Ahora vamos a aprender algunos comandos básicos que podemos hacer con Ansible.

En Ansible la manera que tenemos de interactuar con nuestro servidor es mediante Tareas -¿Os acordáis de esta palabra?- Una Tarea o Task es una función que Ansible debe de realizar en tu servidor o servidores. Dichas tareas son declarativas, es decir, nosotros no escribimos nunca comandos en bash ni nada por el estilo. Nosotros declaramos que queremos hacer en ese servidor, si queremos instalar un Nginx, un Tomcat, Postfix, etc. Y Ansible se encargará de aprovisionar ese servidor tal y como le hemos pedido.

Estas Tareas las apuntaremos en nuestro Playbook, que no dejarán de ser otros ficheros donde nosotros apuntaremos como debe de aprovisionarse el servidor. Por ejemplo, si nosotros hacemos una tarea que se llama “Se tiene que instalar Apache” Ansible mirará si en ese servidor ya está aprovisionado ese servicio, y en el caso de que no lo esté, hará todo lo necesario para aprovisionarlo. Y si ya está el servicio instalado, pasará a la siguiente tarea.

Aún así, de momento no vamos a ver esos PlayBooks, ya que es algo que hablaremos más adelante, por ahora, hablaremos de los comandos básicos que podemos ejecutar con Ansible y que manera tenemos para enviar una tarea usando Ansible.

Comandos básicos

Si por ejemplo queremos saber si un host en concreto está activo podemos hacer lo siguiente:

ansible db.voidnull.es -m ping

Con esto le decimos a Ansible que mire si ese nombre de host está activo haciendo un ping y su respuesta es el siguiente:

db.voidnull.es | SUCCESS => {
“changed”: false,
“ping”: “pong”
}

La sintaxis de las respuestas de los comandos en Ansible siempre son así, al más puro estilo JSON. Si son en color verde significa que todo ha ido bien y si son de color rojo es que algo no ha ido bien. Por un lado tenemos el nombre del host al que hemos preguntado (db.voidnull.es) y luego tenemos un SUCCESS, que significa que la operación ha sido un éxito, en caso contrario tendríamos un FAILED! -y el texto en rojo-.

Luego tendríamos dos parámetros, el primero, changed significa si el comando ejecutado ha realizado algún cambio en el servidor. Como que en este caso era un simple ping, pues no ha realizado ningún cambio y por eso pone false. Y luego tenemos otro que es ping que es el comando que hemos enviado y el servidor nos ha respondido con un pong.

Pero vamos a ver algo más del comando que hemos ejecutado para que nos diera esta salida. Hemos ejecutado Ansible con la opción -m ping, -m significa module -módulo-, y es que Ansible trabaja con un montón de módulos. Hay módulos para todo, para gestión de paquetes, gestión de usuarios, gestión de bases de datos, etc

Ahora imaginemos que quiero hacer un ping a un servidor que no está dentro de nuestro inventario:

ansible portallinux.es -m ping

La respuesta será más que evidente:

[WARNING]: Could not match supplied host pattern, ignoring: portallinux.es
[WARNING]: No hosts matched, nothing to do

En este caso, ignora por completo la tarea debido a que portallinux.es no es un host especificado en nuestro Inventario. ¿Qué ocurre si queremos usar de manera puntual Ansible con unos servidores que no tenemos en nuestro Inventario? Pues que podemos especificar el fichero del inventario con la opción -i:

ansible portallinux.es -m ping -i /root/hosts.txt

¿Y si nos conectamos a un host que no tenemos configurada nuestra llave SSH? Pues el resultado es el siguiente:

portallinux.es | UNREACHABLE! => {
“changed”: false,
“msg”: “Failed to connect to the host via ssh: root@portallinux.es: Permission denied (publickey,password).\r\n”,
“unreachable”: true
}

¿Y si el servidor está caído? -no necesariamente tiene que estar caído, pobre :(-

portallinux.es | UNREACHABLE! => {
“changed”: false,
“msg”: “Failed to connect to the host via ssh: ss: connect to host portallinux.es port 22: Resource temporalily unavailable\r\n”,
“unreachable”: true
}

Como podéis ver en los dos casos, el resultado de Ansible nos da un mensaje bastante claro de lo que está sucediendo. En el primer caso, te dice que no se puede conectar por ssh debido a que hay una denegación de acceso y en el segundo caso te dice que el servicio SSH no está funcionando en ese host y que no puede contactar.


Ningún comentario “Comandos básicos en Ansible [Ansible #3]”

Leave a Reply

avatar
500
  Suscribirte  
Notificarme

Utilizamos cookies propias y de terceros para mejorar nuestros servicios. Si continúa navegando, consideramos que acepta su uso. Doble clic sobre aquí para cerrar.