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

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

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

Lo que constituye un nombre de variable válido?

Un nombre de variable incluye letras, números, subrayadores o una mezcla de 2 o todas ellas. Sin embargo, tenga en cuenta que un nombre de variable siempre debe comenzar con una letra y no debe contener espacios.

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

Ejemplos de nombres de variables válidas:

Football Foot_ball Football20 Foot_ball20 

Ejemplos de nombre de variable no índice:

bola de pie 20 pies 

Discutamos los tipos de variables:

1. Variables del libro de jugadas

Libro de jugadas Las variables 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.

Para acceder al valor de la variable, colóquelo entre los aparatos ortopédicos dobles encerrados con comillas.

Aquí hay un simple ejemplo de libro de jugadas:

- Hosts: todos los vars: saludo: Hola Mundo! Tareas: - Nombre: Ansible Basic Variable Ejemplo Debug: Msg: " saludo  " 

En el libro de jugadas anterior, el saludo La variable 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 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 contiene 5 valores diferentes - nombres de continentes. Cada uno de estos valores se puede acceder fácilmente usando índice 0 Como la primera variable.

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

- Hosts: Todos los vars: Continentes: - África - Asia - América del Sur - América del Norte - Europa Tareas: - Nombre: Ansible Lista Variable Ejemplo debug: msg: "continentes [1]" 
Variedad de variables en Ansible

La lista de variables se puede estructurar de manera similar como se muestra:

Vars: Continentes: [África, Asia, América del Sur, América del Norte, Europa] 

Para enumerar todos los elementos de la lista, use el With_items módulo. Esto recorrerá todos los valores en la matriz.

- Hosts: Todos los vars: continentes: [África, Asia, Sudamérica, América del Norte, Europa] Tareas: - Nombre: Variables de matriz Ansible Ejemplo de debug: Msg: " artículo  "with_items: -"  continentes  " 
Lista de variables de matriz ansible

Otro tipo de variable ansible es la diccionario variable.

Diccionario Las variables también son compatibles con el libro de jugadas. Para definir la variable del diccionario, simplemente identifique el par de valor clave justo debajo del nombre de la variable del diccionario.

hosts: switch_f01 vars: http_port: 8080 default_gateway: 10.200.50.1 VLAN: ID: 10 Puerto: 2 

En el ejemplo anterior, VLAN es la variable del diccionario mientras identificación y puerto son los pares de valor clave.

hosts: switch_f01 vars: http_port: 8080 default_gateway: vlans: id: 10 puerto: 20 tareas: nombre: configure la puerta de enlace predeterminada system_configs: default_gateway_ip: “default_gateway“ Nombre: etiqueta puerto en vlan 10 vlan_config: vlan_id: “ vlans ['id'] " Port_id: 1/1/ vlans ['Port'] 

Para Port_id, Dado que estamos comenzando el valor con el texto y no la variable, las comillas no son necesarias para rodear los aparatos ortopédicos.

2. Variables especiales

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

Colectivamente, la lista de variables predefinidas ansables se conoce como Hechos ansibles y estos se recopilan cuando se ejecuta un libro de jugadas.

Para obtener una lista de todas las variables ansibles, use el configuración Módulo en el comando ad-hoc ansible como se muestra a continuación:

# Nombre de host de configuración de ansible -m 

Esto muestra la salida en formato JSON como se muestra:

# ansible -m configuración localhost 
Lista de variables ansibles

Desde la salida, podemos ver que algunos de los ejemplos de variables especiales ansibles 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 ansibles, estas son solo algunos ejemplos.

Estas variables se pueden usar en un Jinja2 plantilla como se muestra:

  

El nombre de host de este servidor web es ansible_hostname

Se está ejecutando ansible_os_familysistema

3. Variables de inventario

Por último, en la lista, tenemos variables de inventario ansibles. Un inventario es un archivo en Ini formato que contiene todos los anfitriones que serán administrados por Ansible.

En los inventarios, puede asignar una variable a un sistema de host y luego usarlo 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 libro de jugadas Yaml Archivo 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 de host comparten las mismas variables, puede definir otro grupo en el archivo de inventario para que sea menos engorroso y evite la 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 puede estructurarse como:

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

Y en el libro de jugadas Yaml Archivo, esto se definirá como se muestra:

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

Hechos ansibles

Al ejecutar libros de jugadas, la primera tarea que Ansible hace es la ejecución de la tarea de configuración. Estoy bastante seguro de que debes haber encontrado la salida:

Tarea: [Reuniendo hechos] ********* 

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

Para obtener los hechos sobre cualquier sistema, simplemente use el configuración Módulo como se muestra en el siguiente comando:

# Nombre de host de configuración de ansible -m 

Por ejemplo:

# ansible -m setup database_server 

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

Hechos del sistema Get Ansible

Los hechos ansables son útiles para ayudar a los administradores del sistema que las operaciones para llevar a cabo, por ejemplo, dependiendo del sistema operativo, pueden saber qué paquetes de software deben instalarse y cómo se deben configurar, etc.

Hechos personalizados

¿Sabía también que puede crear sus propios hechos personalizados que puede ser recopilado por Ansible?? Sí tu puedes. Entonces cómo vas acerca de ésto? Cambiemos los engranajes y veamos cómo.

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

Dentro de este directorio, cree un archivo (s) con un .hecho extensión. Este archivo (s) devolverá Json Datos Cuando el libro de jugadas se ejecuta en el nodo de control Ansible, que incluye los otros hechos que Ansible recupera después de una ejecución de un libro de jugadas.

Aquí hay un ejemplo de un archivo de datos personalizado llamado fecha y hora.hecho que recupera la fecha y la hora.

# mkdir -p/etc/ansible/hechos.d # vim/etc/ansible/hechos.d/date_time.hecho 

Agregue las siguientes líneas en él.

#!/bin/bash date = "date" echo "\" date \ "": \"" $ date \ """" 

Guardar y salir del archivo.

Ahora asigne los permisos de ejecución:

# chmod +x/etc/ansible/hechos.d/date_time.hecho 

Ahora, creé un libro de jugadas sobre el nodo de control Ansible llamado comprobar Fecha.YML.

--- - Hosts: WebServers Tasks: - Nombre: Obtener hechos personalizados DEBUG: MSG: El hecho personalizado es ansible_local.fecha y hora 

Agregar el archivo de hecho al ansible_local variable. El ansible_local almacena todos los hechos personalizados.

Ahora ejecute el libro de jugadas y observe la información de recuperación de Ansible guardada en el archivo de hecho:

# ansible_playbook check_date.YML 
Crear hechos personalizados ansibles
Conclusión

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

"