Inventarios de ansible

En la entrada anterior, vimos una pequeña introducción a ansible. Ahora vamos a ver los inventarios.

Dentro de ansible podemos definir a grupos de servidores o dispositivos, para que ejecute a un grupo completo.

Inventarios estáticos

Para definir estos grupos lo hacemos dentro del fichero host quedando así:

ansible CENTOS –m usuario –a “name=usuario2 state=present” –become

Un grupo puede tener subgrupos, para usarlos debemos usar children:

Ejemplo de uso de children: ansible LINUX –m usuario –a “name=usuario2 state=present” –become

Un grupo podemos usar variables, estas las definimos como vars:

Lo que hacemos es que el grupo Linux siempre use el –become, es decir, que haga sudo cada vez que ejecutemos algo.

Ahora bien, no queremos usar el sudo con uno de nuestros servidores. Pues sencillo usamos el siguiente parámetro: ansible_become=False

Si queremos tenerlo mas organizado, podemos separar las variables de nuestro grupo generando el directorio group_vars, lo único que ahora debemos usar el : en vez de =, y el fichero se tiene que llamar igual que el grupo en este caso LINUX:

#mkdir groups_vars

#cd group_vars

#echo “ansible_become: True” > LINUX

#ansible LINUX –a id

Si queremos tener variables en vez de para un grupo, solo para un servidor debemos ponerlo en el directorio host_vars y crear un fichero con el nombre del servidor:

#mkdir host_vars

#cd host_vars

#echo “ansible_become: False” > 172.20.20.30

#ansible LINUX –a id

Recomiendo poner siempre nombre de máquina, no usar ips.

Que hace este comando, primero tira de fichero hosts luego consulta en hosts_vars y finalmente el group_vars.

Ahora bien, imaginaros que tenemos que poner 3 servidores con el nombre igual. Es decir, server1, server2 y server3.

En este caso, vamos a utilizar patrones. No vamos a poner las 3 líneas si no que vamos a usar lo siguiente:

[servidores]

server[1:3]

Y también podemos utilizar letras.

Otra opción muy interesante es el –i para usar un fichero en una ubicación diferente:

#mv host servidores

#ansible –i servidores all –a id

Muy útil para tener un orden del inventario. Por ejemplo, separar servidores de desarrollo y de producción.

También podemos definir nombres virtuales dentro de ansible para nuestros servidores, a nivel de dns no existe pero ansible si los reconoce. Para ello usamos el ansible_host:

Otra opción interesante, es usar el ansible_become_method, en caso de que necesitemos hacer un su o un sudo. O usar el ansible_become_user para utilizar un usuario específico

Inventarios dinámicos

Hasta ahora hemos visto los inventarios estáticos, que están muy bien pero para pequeñas organizaciones. Imaginaros que tenemos que hacer esto en 200 servidores. Nos puede dar las uvas. Para ello vamos a usar inventarios dinámicos.

Estos inventarios los podemos usar para plataformas que contiene nagios, vmware, aws, zabbix, openstatk, docker…………..

Para descargarnos en inventario específico, podemos ir a la web: https://github.com/ansible/ansible y una vez allí contrib/inventory

Veis que hay una gran variedad de inventarios:

Yo me voy a descargar del script para vmware y la configuración que sería el .ini.

En este último, debemos ver como nos vamos a conectar, con que credenciales, etc..

Para probar el inventario, ponemos lo siguientes:

python vmware.py –list

Una vez que vemos que está funcionando. Vamos a ejecutarlo con ansible (ojo, poner el script como ejecutable):

#ansible –i ./vmware.py all –u usuario –m ping

Con esto, si agregamos nuevos servidores, o damos de baja servidores viejos el script recogería siempre los servidores operativos en nuestra plataforma.

Espero que os sirva

Deja un comentario