Cómo trabajar con variables y hechos de Ansible-Parte 8

El nombre de host de este servidor web es ansible_hostname.

Cómo trabajar con variables y hechos de Ansible-Parte 8

Hemos mencionado variables en esta serie de Ansible y solo para refrescar un poco su mente. Una variable. al igual que en muchos lenguajes de programación, es esencialmente una clave que representa un valor.

¿Qué constituye un nombre de variable válido?

Un nombre de variable incluye letras, números, guiones bajos o una combinación de 2 o de todos. Sin embargo, tenga en cuenta que el nombre de una variable siempre debe comenzar con una letra y no debe contener espacios.

Echemos un vistazo a algunos ejemplos de nombres de variables válidos e inaceptables:

Ejemplos de nombres de variables válidos : fútbol foot_ball football20 foot_ball20 Nombre de variable no válido Ejemplos: foot ball 20 foot-ball

Analicemos los tipos de variables:

1. Variables de Playbook

Las variables de Playbook. son bastante fáciles y directas. Para definir una variable en un libro de jugadas. simplemente use la palabra clave vars. antes de escribir sus variables con sangría.

freestar.config.enabled_slots.push (LocationName: ” tecmint_incontent “, slotId:” tecmint_incontent “);

Para acceder al valor de la variable, colóquelo entre las llaves dobles entre comillas.

Aquí hay un ejemplo de libro de jugadas simple:

-hosts: all vars: greeting. ¡Hola mundo! tareas:-nombre: Variable básica de Ansible Ejemplo debug: msg: “{ saludo. ”

En el libro de jugadas anterior, la variable saludo. se sustituye por el valor ¡Hola mundo!. cuando se ejecuta el libro de jugadas. El libro de jugadas simplemente imprime el mensaje ¡Hola mundo!. cuando se ejecuta.

Variables de Playbook en Ansible Variables de Playbook en Ansible Variables del libro de jugadas en Ansible

Además, puede tener una lista o una matriz de variables como se muestra:

El libro de jugadas a continuación muestra una variable llamada continentes. La variable tiene 5 valores diferentes: nombres de continentes. Se puede acceder fácilmente a cada uno de estos valores utilizando índice 0. como la primera variable.

El ejemplo del libro de estrategias a continuación recupera y muestra Asia (índice 1).

-hosts: todas las vars: continentes:-África-Asia-América del Sur-América del Norte-Europa tareas:-nombre: Variable de lista Ansible Ejemplo debug: msg: “continents [1]”  Matriz de variables en Ansible  Array of Variables in Ansible Array of Variables in Ansible

La lista de variables puede simil arly estar estructurado como se muestra:

vars: Continents: [África, Asia, América del Sur, América del Norte, Europa]

Para enumerar todos los elementos de la lista, utilice el módulo with_items. . Esto recorrerá todos los valores de la matriz.

-hosts: all vars: continents: [África, Asia, América del Sur, América del Norte, Europa] tareas:-nombre: ejemplo de variables de matriz Ansible debug: msg: ” { item. “with_items:-” { continents. “Lista de variables de matriz Ansible  Lista de variables de matriz de Ansible Lista de variables de matriz de Ansible

Otro tipo de variable de Ansible es la variable diccionario.

Las variables de diccionario. son además apoyado d en el libro de jugadas. Para definir la variable del diccionario, simplemente identifique el par clave-valor justo debajo del nombre de la variable del diccionario.

hosts: switch_f01 vars: http_port: 8080 default_gateway: 10.200.50.1 vlans: id: 10 port: 2

En el ejemplo anterior, vlans. es la variable de diccionario mientras que id. y puerto. son los pares clave-valor.

hosts: switch_f01 vars: http_port: 8080 default_gateway: vlans: id: 10 puerto: 20 tareas: nombre: configurar la puerta de enlace predeterminada system_configs : default_gateway_ip: “default_gateway” nombre: Puerto de etiqueta en vlan 10 vlan_config: vlan_id: “vlans [‘id’]” port_id: 1/1/vlans [‘puerto’] .

Para port_id. dado que comenzamos el valor con texto y no con la variable, las comillas no son necesarias para rodear las llaves.

2. Variables especiales

Ansible proporciona una lista de variables predefinidas a las que se puede hacer referencia en las plantillas y libros de jugadas de Jinja2, pero que el usuario no puede modificar ni definir.

En conjunto, la lista de variables predefinidas de Ansible se conoce como hechos de Ansible. y estos se recopilan cuando se ejecuta un libro de jugadas.

Para obtener una lista de todas las variables de Ansible, use la configuración. módulo en el comando Ansible ad-hoc como se muestra a continuación:

# ansible-m setup hostname

Esto muestra la salida en formato JSON como se muestra:

# ansible-m setup localhost  Lista de variables de Ansible  Lista de variables de Ansible Lista de variables de Ansible

De la salida, podemos ver que algunos de los ejemplos de variables especiales de Ansible incluyen:

ansible_architecture ansible_bios_date ansible_bios_version ansible_date_time ansible_machine ansible_memefree_mb ansible_os_family ansible_selinux

Hay muchas otras variables especiales de Ansible, estos son solo algunos ejemplos.

Estas variables se pueden usar en una plantilla Jinja2. como mostrado:

El nombre de host de este servidor web es ansible_hostname.

Se está ejecutando en ansible_os_family . sistema

3. Variables de inventario

Por último, en la lista, tenemos las variables de inventario de Ansible. Un inventario es un archivo en formato INI. que contiene todos los hosts que administrará Ansible.

En los inventarios, puede asignar una variable a un sistema host y luego usarla en un libro de jugadas.

[web_servers] web_server_1 ansible_user = centos http_port = 80 web_server_2 ansible_user = ubuntu http_port = 8080

Lo anterior se puede representar en un archivo de playbook YAML. como se muestra:

—web_servers: web_server_1: ansible_user = centos http_port = 80 web_server_2: ansible_user = ubuntu http_port = 8080

Si los sistemas host comparten las mismas variables, puede definir otro grupo en el archivo de inventario para hacerlo menos engorroso y evitar repetición innecesaria.

Por ejemplo:

[web_servers] web_server_1 ansible_user = centos http_port = 80 web_server_2 ansible_user = centos http_port = 80

Lo anterior se puede estructurar como:

[web_servers ] web_server_1 web_server_2 [web_servers: vars] ansible_user = centos http_port = 80

Y en el archivo YAML. del libro de jugadas, esto se definirá como se muestra:

—web_servers: hosts: web_server_1: web_server_2: vars: ansible_user = centos http_port = 80

Hechos de Ansible

Al ejecutar libros de jugadas, la primera tarea que realiza Ansible es la ejecución de la tarea de configuración. Estoy bastante seguro de que debe haber encontrado el resultado:

TAREA: [Recopilación de hechos] *********

Los hechos de respuesta no son más que propiedades del sistema o piezas de información sobre nodos remotos al que te has conectado. Esta información incluye la arquitectura del sistema, la versión del sistema operativo, la información del BIOS, la fecha y hora del sistema, el tiempo de actividad del sistema, la dirección IP y la información del hardware, por mencionar solo algunos.

Para obtener información sobre cualquier sistema, simplemente use el módulo setup. como se muestra en el siguiente comando:

# ansible-m setup hostname

Por ejemplo:

# ansible-m setup database_server

Esto imprime un gran conjunto de datos en formato JSON. como se muestra:

 Ansible Get System Facts  Ansible Obtener datos del sistema Ansible Obtener datos del sistema

Los datos de Ansible son útiles para ayudar a los administradores del sistema en qué operaciones para llevar a cabo, por ejemplo, dependiendo del sistema operativo, son capaces de saber qué paquetes de software necesitan ser instalados, cómo se van a configurar, etc.

Custom Facts

¿Sabía también que puede crear sus propios datos personalizados que Ansible puede recopilar? Sí tu puedes. Entonces cómo vas acerca de ésto? Cambiemos de velocidad y veamos cómo.

El primer paso es crear un directorio /etc/ansible/facts.d. en el nodo administrado o remoto.

Dentro de este directorio, cree un archivo (s) con una extensión .fact. Este archivo (s) devolverá datos JSON. cuando el libro de jugadas se ejecute en el nodo de control de Ansible, que incluye los otros datos que Ansible recupera después de ejecutar el libro de jugadas.

Aquí está un ejemplo de un archivo de hechos personalizado llamado date_time.fact. que recupera la fecha y la hora.

# mkdir-p/etc/ansible/facts.d # vim/etc/ansible/facts.d/date_time.fact

Agrega las siguientes líneas.

#!/bin/bash DATE = `date` echo” \ “date \”: \ “$ DATE \” “

Guarde y salga del archivo.

Ahora asigne los permisos de ejecución:

# chmod + x/etc/ansible/facts.d/date_time.fact

Ahora, creé un libro de jugadas en Nodo de control Ansible llamado check_date.yml.

—-hosts: tareas del servidor web:-nombre: obtener hechos personalizados debug: msg: el hecho personalizado es ansible_local.date_time

Agrega el archivo de hechos a la variable ansible_local. El ansible_local. almacena todos los hechos personalizados.

Ahora ejecute el libro de jugadas y observe cómo Ansible recupera la información guardada en el archivo de hechos:

# ansible_playbook check_date.yml  Crear datos personalizados de Ansible  Crear hechos personalizados de Ansible Conclusión de hechos personalizados de Ansible

Esto nos lleva al final de este tutorial sobre cómo trabajar con datos y variables de Ansible.

Leave a comment

Your email address will not be published. Required fields are marked *