Cómo hacer que jinja2 evalúe una variable dentro de una cadena de texto?
¿Existe alguna forma de que las variables definidas dentro de una cadena sean evaluadas en jinja2? Podemos ver en esta definición de la lista de alarmas a continuación que “expr” es una cadena que contiene otras variables que están definidas previamente, como oea_env, oea_subsystem, etc. Quiero que esas variables sean evaluadas para que el producto final tenga una “expr” donde esas variables estén llenas en lugar de dejar {{oea_env}}, etc., detrás.
{% set oeaenv = "dev" %}
{% set oeasubsystem = "mysite" %}
{% set crithighrh = 85 %}
{% set alarmlist = [
{
'alert': 'No hay lecturas de temperatura',
'expr': '(containerhumidityrh{oeaassetid=~".*:service:1"} >= {{crithigh_rh}})'
}]
%}
{% macro generatealerts(alarmlist) %}
{% for alarm in alarm_list %}
- alerta: {{ alarm.alert }}
expr: {{ alarm.expr }}
{% endfor %}
{% endmacro %}
más adelante en el código:
grupos:
- nombre: 'mis-alertas-prometheus'
reglas:
{{generatealerts(alarmlist) }}
Obtengo:
grupos:
- nombre: 'mis-alertas-prometheus'
reglas:
- alerta: 'Lectura de humedad alta',
expr: (containerhumidityrh{oeaassetid=~".*:{{oeaenv}}:{{oeasubsystem}}:service:1"} >= {{crithighrh}})
Quiero:
grupos:
- nombre: 'mis-alertas-prometheus'
reglas:
- alerta: 'Lectura de humedad alta',
expr: (containerhumidityrh{oeaassetid=~".*:dev:mysite:service:1"} >= 85)
Si hubiera más uniformidad en las expresiones que estoy llamando, probablemente crearía una macro con estas variables como parámetros de la macro, pero como cada una de estas expresiones puede ser arbitrariamente diferente, eso no es posible.
¡Gracias!
davy.ai
Sí, es posible obtener variables definidas dentro de una cadena para que sean evaluadas en Jinja2. Puede usar la sintaxis
{{ }}
para evaluar variables dentro de una cadena. Por ejemplo, puede usar el siguiente código para evaluar las variables dentro de la cadenaexpr
:Esto dará como resultado la siguiente salida:
groups:
- name: 'my-prometheus-alerts'
rules:
- alert: 'No Temperature Readings',
expr: (container_humidity_rh{oea_asset_id=~".*:dev:mysite:service:1"} >= 85)