Manipular datos ansibles utilizando filtros jinja

Manipular datos ansibles utilizando filtros jinja

En algunas ocasiones, cuando está utilizando Ansible para automatizar varias tareas, es posible que deba transformar y manipular datos. En Ansible, puede usar un conjunto de filtros incorporados o crear filtros personalizados para manipular, procesar y convertir datos. Ansible utiliza filtros de plantilla Jinja2 en segundo plano para permitir a los usuarios crear filtros para datos especificados.

Es importante tener en cuenta que la plantilla del filtro se lleva a cabo en el controlador Ansible, y no en los hosts remotos especificados. Esto ayuda a reducir la cantidad de datos transferidos al host remoto después del procesamiento local. Si no está familiarizado con Jinja Templating, Jinja es un lenguaje de plantilla simple, intuitivo, rápido y seguro para el lenguaje de programación de Python desarrollado después de las populares plantillas de Django de Python Framework.

No entraremos en cómo funciona la plantilla de Jinja, aunque puede ser una ventaja adicional comprender cómo funciona con las plantillas.

Consulte el recurso que se proporciona a continuación para obtener más información sobre Jinja.

https: // linkfy.a/jinjadocs

Cómo funcionan los filtros ansibles

Como se mencionó, el motor de filtrado Ansible se basa en el modelo de plantilla Jinja. Esto permite a los usuarios usar estas plantillas para ingresar datos, procesarlos y proporcionar una salida basada en los filtros definidos.

Una vez que los datos se transforman y filtran utilizando la plantilla definida, puede usarlos para realizar otras tareas en Ansible. Puede obtener más información sobre los filtros en Ansible en el siguiente sitio web:

https: // linkfy.a/ansiblefilters

Ansible tiene muchos filtros que son muy útiles y aplicables a muchos escenarios diferentes. Una vez que tenga la salida del filtro, puede usarlo para realizar otras tareas, como la depuración.

La sintaxis general para los datos de filtrado es la siguiente:

|

Usando filtros Ansible

Ahora veremos ejemplos de filtros ansibles que podemos usar para realizar varias tareas.

NOTA: Como se mencionó anteriormente, Ansible tiene muchos filtros, por lo que no podemos cubrirlos en este artículo. En cambio, este tutorial busca proporcionarle los conceptos básicos de usar varios filtros Ansible.

Ejemplo 1: Filtros de datos de formato ansible

Los filtros de datos de formato ansible toman una estructura de datos de salida en una plantilla y usan el filtro especificado para representarlo en el formato llamado en el filtro.

A continuación se muestra un filtro de ejemplo para convertir a JSON y YAML:

variable | to_json
variable | to_yaml

Por ejemplo, considere el siguiente libro de jugadas:

- Hosts: todas las tareas:
- Shell: Cat /TMP /All.json
Registrarse: resultado
- depurar:
Msg: "resultado.stdout | to_nice_yaml "

Ejecutar el libro de jugadas anterior producirá una salida para los datos JSON convertidos a YAML. La siguiente es una salida de ejemplo:

También puede especificar otros filtros como to_nice_yaml, para obtener la salida en un formato legible por humanos.

variable | to_nice_json
variable | to_nice_yaml

Usando los filtros de datos de formato, puede transformar los datos en varios formatos y usarlos para varias tareas.

Por ejemplo, puede pasar las cadenas Yaml multi-documentos de PARSE, como en el libro de jugadas a continuación:

- Hosts: todas las tareas:
- Shell: Cat /TMP /All.json
Registrarse: resultado
- depurar:
Msg: "resultado.stdout | to_yaml | lista"

Ejemplo 2: filtro predeterminado ansible

El filtro predeterminado ansible ayuda a valores predeterminados a variables indefinidas. La configuración Ansible predeterminada falla variables indefinidas. Por ejemplo, si tiene una variable indefinida, puede decirle a Ansible que predetermine un valor en lugar de aumentar un error.

La sintaxis general para el filtro predeterminado es la siguiente:

| valor por defecto)

Por ejemplo:

- Anfitriones: todos
Vars:
tareas:
set_fact:
undef_var: "0_var | default (5)"

El libro de jugadas anterior establecerá el valor de la variable '0_var' en 5 si no se define explícitamente, en lugar de lanzar un error.

Para definir una variable, puede usar el filtro obligatorio. Todo lo que necesita hacer es consultar el ejemplo anterior y reemplazar el valor predeterminado con el obligatorio:

0_var | obligatorio

Ejemplo 3: Filtros de depuración Ansible

Al depurar, puede usar el filtro type_debug para obtener información sobre el tipo de variable. El tipo de variable estará en Python, ya que el motor está basado en Python. La sintaxis general para el filtro es la siguiente:

variable | type_debug

Ejemplo 4: Filtros de matemáticas

Los filtros matemáticos ansibles le permiten realizar consultas relacionadas con las matemáticas. Estos filtros incluyen lo siguiente:

  1. Filtro de logaritmo - variable | log: especifica la base del logaritmo entre paréntesis como variable | log (2)
  2. Filtro de potencia - variable | POW (3) - Devuelve la variable planteada a la potencia especificada
  3. Filtro absoluto - variable | ABS - Devuelve el valor absoluto para la variable pasada
  4. Filtro de raíz - variable | raíz - esto devuelve la raíz cuadrada de la variable. Para especificar explícitamente la raíz, pase el valor entre paréntesis; Por ejemplo, Cube Root variable | raíz (3)

Estos filtros de matemáticas pueden ser bastante útiles, especialmente cuando se trata de grandes cantidades de datos y operaciones de matemáticas instantáneas.

Ejemplo 5: filtros hash

Los filtros de hash ansible le permiten obtener el hash de una cadena o datos aprobados. En la mayoría de los casos, no necesitará estos filtros, pero están disponibles para usar si surge la necesidad. Estos filtros incluyen lo siguiente:

  1. SHA1 - var | hash ("sha1")
  2. SHA256/SHA512 - var | contraseña_hash ("SHA256/512")
  3. MD5 - var | hash ("md5")
  4. Suma de verificación de cadena - var | CHECKSUM

Otros filtros útiles

Como habrás notado, Ansible tiene muchos filtros. Algunos filtros ansibles que puede encontrar útiles incluyen lo siguiente:

  • Filtro dividido de URL - "Desarrollador@https: // linuxhint.com: 8080/índice.html?consulta = Linux ”| URLSPILT ("Nombre de host"), - Devuelve "Linuxhint.com "
  • Lista de unir - Lista | unir - Se usa para agregar una lista a una cadena var
  • Ruta de directorio - ruta | dirname
  • Expandir un tilde - ruta | Expanduser

Conclusión

Los filtros ansibles son útiles cuando realiza tareas de depuración o necesita información específica sin escribir demasiado. Debido a que Ansible admite filtros personalizados, estos filtros pueden ser especialmente útiles en casos de uso específicos.