Si ha realizado algo de programación en Python, Java, C, C++ o en cualquier otro lenguaje de programación, entonces las variables no son ajenas. Al igual que en los lenguajes de programación, las variables en Ansible se utilizan para almacenar un valor.
En Ansible, las variables brindan la flexibilidad que tanto se necesita en Playbooks, plantillas e inventarios, como veremos más adelante en este tutorial. Las variables integradas se pueden usar para proporcionar información del sistema, como el nombre de host, la arquitectura del sistema, las interfaces, etc. Las variables también se pueden usar para reemplazar cadenas y también en bucles para recorrer un conjunto de valores dado.
Un nombre de variable válido se compone de los siguientes caracteres
- Letras
- Números
- guiones bajos
- Una combinación de cualquiera de los dos o todos los anteriores
Una variable SIEMPRE DEBE COMENZAR CON UNA LETRA y NO DEBE CONTENER ESPACIOS.
Los ejemplos de nombres de variables aceptables incluyen:
- placa giratoria
- placa giratoria
- tocadiscos01
- tocadiscos_01
Los nombres a continuación no califican como nombres de variables válidos
- mesa giratoria
- placa giratoria
- 01 tocadiscos
- 01
Veamos ahora diferentes casos de uso de Variables en Ansible
Variables en Playbooks
Como sabe, un libro de jugadas es una colección de jugadas o tareas que se realizarán en un sistema remoto. En los libros de jugadas, las variables son útiles para determinar cómo se pueden ejecutar las tareas. Asignar un valor a una variable en un libro de jugadas es bastante fácil y directo.
Comience llamando al vars palabra clave luego llame al nombre de la variable seguido del valor como se muestra.
--- - hosts: all vars: salutations: Hello guys! tasks: - name: Ansible Variable Basic Usage debug: msg: "{{ salutations }}"
En el libro de jugadas anterior, el nombre de la variable es saludos y el valor es ¡Hola Mundo! Cuando se ejecuta el libro de jugadas, se accede al valor del libro de jugadas colocando la variable entre llaves como se muestra arriba. Cuando se ejecuta, el libro de jugadas imprime el mensaje ‘Hola chicos‘ en la terminal.
Variables con matrices
Puede usar matrices y asignarlas a variables como se muestra en la siguiente sintaxis:
variables:
nombre de matriz:
– valor1
– valor2
Por ejemplo, el libro de jugadas a continuación contiene una matriz de 5 nombres de estudiantes almacenados en una variable llamada estudiantes. Puede acceder a los nombres de los estudiantes a través de la indexación (como lo haría en matrices en cualquier otro lenguaje de programación). Por ejemplo, para recuperar el nombre ‘Arthur’ de la lista de matrices, use la sintaxis estudiantes [2] Como se muestra abajo.
- hosts: all vars: students: - Mark - Melisa - Arthur - Kevin - Lisa tasks: - name: Ansible List variable Example debug: msg: "{{ students[2] }}"
Variables con diccionarios
Desde la lista Array, puede definir aún más cada una de las entradas utilizando un par de valores clave que forman lo que llamamos una lista de diccionario. La sintaxis se muestra a continuación.
variables:
nombre de matriz:
nombre_diccionario1:
valor1: elementovalor1
valor2: elementovalor2
nombre_diccionario2:
valor1: elementovalor1
valor2: elementovalor2
Usando nuestro ejemplo anterior, podemos tener listas de diccionarios a continuación
- hosts: all vars: students: - Mark: city: Melbourne address: 0045-0987-8642 - Angela: city: Sydney address: 3456-7685-9087
Para acceder al diccionario, simplemente agregue la tarea a continuación
tasks: - debug: var: students
Variables en archivos de inventario
Si tiene diferentes sistemas host que comparten atributos o valores similares, puede definir lo que llamamos variables de grupo. Estos se utilizan para asignar los atributos que son comunes a todos los hosts.
Por ejemplo:
Supongamos que tenemos 2 servidores web: servidor web_1 y servidor web_2 que están escuchando el puerto 443 y cuyo servidor ntp es us.pool.ntp.org. El archivo de inventario aparecerá como se muestra:
[web_servers] webserver_1 webserver_2 [web_servers:vars] http_port=443 ntp_server=us.pool.ntp.org
En el archivo del libro de jugadas YAML, esto se representaría como se muestra
web_servers: hosts: web_server_1: web_server_2: vars: http_port=80 ntp_server=us.pool.ntp.org
La primera sección define los hosts remotos que son servidor web_1 y servidor web_1, mientras que la segunda sección agrupa los atributos comunes entre los dos servidores. Esto viene como un método muy conveniente para aplicar variables que son comunes a múltiples sistemas host.
Variables de host y grupo
Aunque puede especificar variables en el archivo de inventario, la práctica estándar desaconseja el almacenamiento de variables en el archivo de inventario. Aquí es donde entran los archivos de variables de host y de grupo.
En un archivo de variables de host, la variable se aplica solo a un sistema de host en el archivo de inventario. El archivo de variables del lenguaje principal generalmente se almacena en el host_vars directorio que normalmente se especifica en /etc/ansible/ sendero.
Considere el archivo de inventario a continuación, donde tenemos 2 servidores, cada uno de los cuales usa diferentes servidores ntp
[web_servers] webserver_1 ntp_server=uk.pool.ntp.org webserver_2 ntp_server=de.pool.ntp.org
En lugar de especificar la variable ntp_server en el archivo de inventario, cree 2 archivos de variables de host en el directorio host_vars con el nombre de archivo que coincida con cada uno de los nombres de host de los sistemas host:
# vim /etc/ansible/host_vars/webserver_1 --- ntp_server=uk.pool.ntp.org # vim /etc/ansible/host_vars/webserver_2 --- ntp_server=de.pool.ntp.org
Si los sistemas host comparten los mismos valores, cree un archivo de variables de grupo en el group_vars directorio. El nombre del archivo de la variable de grupo debe coincidir con el grupo de hosts.
Considere el archivo de inventario a continuación
[web_servers] webserver_1 webserver_2 [web_servers:vars] ansible_user=root ansible_port=22
La segunda sección se puede definir como un archivo en el directorio group_vars como se muestra. Esto debería estar en el directorio /etc/ansible. Recuerde que el nombre del archivo debe ser el mismo que el nombre del grupo.
# vim /etc/ansible/group_vars/web_servers --- ansible_user=root ansible_port=22
Aquí, las variables serán accesibles para todos los hosts del grupo denominado web_servers.
Variables especiales en Ansible Playbook
Otra categoría de variables son las variables especiales. Estas son variables integradas que el usuario no puede configurar y que Ansible siempre anulará. Para obtener una lista de nombres únicos de variables del sistema, ejecute el comando
# ansible -m nombre de host de configuración
Ejemplos de tales variables especiales incluyen:
- ansible_todas_las_direcciones_ipv4
- arquitectura_ansible,
- versión_bios_ansible,
- ansible_os_familia,
- distribución_ansible,
Esto mostrará una salida en formato JSON
# ansible -m setup localhost
Con la flexibilidad y la facilidad de uso, las variables cumplen un propósito fundamental tanto en los libros de jugadas como en los archivos de inventario. Evitan repeticiones innecesarias y facilitan mucho la vida del administrador de sistemas.
Lea también: Cómo usar bucles en Ansible Playbook
Leer también : Cómo usar Ansible Vault para proteger datos confidenciales