GNU/Linux >> Tutoriales Linux >  >> Linux

Cómo usar variables en Ansible Playbook

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 determinado.

Un nombre de variable válido se compone de los siguientes caracteres

  • Cartas
  • 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:

  •  tocadiscos
  •  mesa_giratoria
  •  tocadiscos01
  •  giradiscos_01

Los nombres a continuación no califican como nombres de variables válidos

  •   mesa giratoria
  •  plataforma
  •  01plato giratorio
  •  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 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 manual 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 arreglos

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 "Arturo" de la lista de matrices, use la sintaxis estudiantes [2] como se muestra a continuación.

- 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:webserver_1 y servidorweb_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 webserver_1 y servidor web_1 , mientras que la segunda sección agrupa los atributos comunes entre los dos servidores. Esto se presenta como un método muy conveniente para aplicar variables que son comunes a múltiples sistemas host.

Variables de host y de grupo

Aunque puede especificar variables en el archivo de inventario, la práctica habitual 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 de host generalmente se almacena en host_vars directorio que normalmente se especifica en /etc/ansible/ camino.

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  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_all_ipv4_addresses
  • 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 por excelencia 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 utilizar Ansible Vault para proteger datos confidenciales


Linux
  1. Cómo uso Ansible y Anacron para la automatización

  2. Cómo usar Ansible para configurar el monitoreo del sistema con Prometheus

  3. Cómo instalar y usar Ansible en Debian 11

  4. Cómo crear un libro de jugadas de Ansible

  5. Cómo instalar paquetes de software con un playbook de Ansible

Cómo crear y usar datos personalizados en Ansible

Cómo usar variables en secuencias de comandos de Shell

Cómo definir y usar controladores en Ansible Playbooks

Cómo usar la plantilla Jinja2 en Ansible

Cómo usar Ansible para configurar Vim

Cómo usar Ansible para enviar un correo electrónico usando Gmail