variables en ansible

Seguimos las ansible y sobretodo con los playbook en este caso vamos  a continuar explicacion, tipos y definición de las variables .

Las variables en los playbook contienen un valor modificable para poder realizar las tareas de forma dinámica. Exactamente igual que en los lenguajes de programación.

Por ejemplo, usamos las variables para especificar un usuario, o ruta de fichero, un puertos, etc…..

Las variables puede ser definidas como:

  • Facts, se obtiene del servidor. Como por ejemplo ansible_hostname. Son variables lista para utilizarse y no debemos de definirlas.
  • Playbook, para realizar tareas o roles
  • -e, o desde la línea de comando. con un formato de clave=valor.

Se puede utilizar en tareas, plantillas, otros (bucles, roles,………)

Como las definimos

{{variable}} en las nuevas versión con “{{variable}}” se ubican el archivo .j2

Ejemplo de variable.

He creado un fichero llamado ejemplo.j2, con 3 variables ip, hostname y fqdn. La ip es al que definiremos nosotros y ansible_hostname y ansible_fqdn son dinámicas y las obtendrá del servidor.

Para especificar una variable en un playbook, dentro de nuestro yml lo especificamos como:

vars:

-clave:valor

Ahora creamos un .yml llamado ejemplo_var.yml con el siguiente contenido:

– name: ejemplo fichero con variables

hosts: localhost

connection: local

vars:

– ip: «11.22.33.44»

tasks:

– name: crear un fichero

template: src=ejemplo.j2 dest=/tmp/ejemplo  (esta es la única modificación usamos la opción template para poder utilizar el fichero j2)

Ahora vamos a ejecutarlo.

ansible-playbook ejemplo_vars.yml

Y nos ha creado un fichero en /tmp llamado ejemplo con el siguiente contenido:

Os muestro haciendo un filtrado de las variables dinámicas como coge los datos de nuestro servidor:

ansible localhost -m setup|grep -e ansible_hostname -e ansible_fqdn

Para mostraros la opción –e, os voy a mostrar sobre el comando anterior como editamos la variable ip:

ansible-playbook -e ip=»55.66.77.88″ ejemplo_vars.yml

Vemos que el fichero /tmp/ejemplo,  ahora tiene en el apartado ip, el contenido de la variable que le indicamos con la opción –e

Esta es muy útil si tenemos que hacer algo muy específico como un puerto etc… cuando veamos los roles veremos las preferencias de las variables se pueden especificar a nivel host, de playbook, o de argumento, si se especifican a nivel de playbook tiene más valor el resto.

Orden de prioridad:

Las que menos orden tiene son las que están definidas en el directorio defaults dentro de un rol (lo veremos más adelante).

Las siguientes son las de grupo ya estén definidas dentro de inventario, después las de grupo_vars/all y a continuación las de groups_vars/grupo.

Después de estas irían las de servidores, que tendría la misma prioridad que las de grupo, es decir, inventario y después host_vars/servidor.

En las prioridades más altas, en están las denominadas facts, son variables definidas desde el servidor, como puede ser ansible_hostname, ansible_fqdn…..

Seguido de estas, tenemos las definidas dentro de un play (ya veremos las de tipo vars_prompt o vars_files).

Y aun con más prioridad tenemos las de tipo rol, que esta definidas dentro del directorio roles/nombre_rol/vars/main.yml (también lo veremos más adelante).

Las de bloque y las variables de tareas tendrían más prioridad que las anteriores

Siguiendo la dinámica de antes, tiene más prioridad las variables definidas en tasks en la llamada del rol (como os comento, preparare un post de definición de roles para playbooks).

Como penúltimo escalón, las varaibles definidas en set-facts y registerd_vars que son variables que recogen un dato de salida de una varaible para poder utilizarlo.

Y con mayor prioridad siempre están las variables definidas en la ejecución de ansible o ansible-playbook, estas son denominadas extra_vars.

Hay muchas variables que aún no he explicado, pero para tener una idea de prioridades creo que es interesante ver como usa ansible las llamadas a estas

De momento, lo dejamos aquí.

Espero que os sirva

Deja un comentario