Helm: ¿Puede Helm admitir ignorar {{expr}} que es solo para la configuración pero no para renderizar?

Creado en 12 ago. 2017  ·  16Comentarios  ·  Fuente: helm/helm

Hay un caso de uso: implementar Prometheus como StatefulSet y configurar las reglas de alerta como ConfigMap .

_alerting-rules_ puede obtener más detalles aquí: https://prometheus.io/docs/alerting/rules/#alerting -rules

parece que:
ALERT InstanceMemoryOverload IF node_memory_Active >= 1 FOR 1m LABELS { service = "k8s_metrics", alertname = "InstanceMemoryOverload" } ANNOTATIONS { summary = "Instance {{ $labels.instance }} memory overload", description = "{{ $labels.instance }} memory overload for more than 1 minutes, now is {{ $value }}." }
¿Puede Helm admitir ignorar {{expr}} que es solo para configuración pero no para renderizado?

questiosupport

Comentario más útil

Un truco viable es permitir que Helm renderice la plantilla como una cadena sin formato. Tenga en cuenta el corchete de apertura y cierre con una tilde al revés:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

Todos 16 comentarios

Tengo un caso de uso similar para tener una plantilla de estilo go en un mapa de configuración. En este momento, helm está tratando de evaluar la plantilla y está provocando errores en el mapa de configuración.

Me encontré con este mismo problema / similar hace un tiempo y lo resolví incrustando, incluidas las reglas de alerta, como archivos separados, como

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ template "fullname" . }}-rules
  labels:
    chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
    role: {{ template "fullname" . }}-rulefiles
    prometheus: {{ template "fullname" . }}
data:
  {{ (.Files.Glob "files/kubernetes.rules").AsConfig }}
  {{ (.Files.Glob "files/etcd2.rules").AsConfig }}
  {{ (.Files.Glob "files/custom_alert.rules").AsConfig }}

AFAIK, es extremadamente difícil escapar de {{ }} en una plantilla go, y absorber los archivos desde otra parte es mucho más simple.

La forma de escapar de las llaves dobles en las plantillas Go es usar {{ "{{" }} . No es extremadamente difícil, solo feo.

Voy a cerrar este problema ya que tenemos dos soluciones separadas para el problema, pero vuelva a abrirlo si no se ha resuelto.

@bacongobbler Hola Matthew, He estado luchando con cómo escapar de las llaves en una plantilla de Helm en la rebaja. Quizás no entiendo tu solución. ¿Cómo renderizaría esto correctamente?
(solo un fragmento). Probé raw / endraw, pre, barra invertida simple, barra invertida doble, ¡sin éxito!
gracias por cualquier sugerencia ... Estoy tratando de poner esto en un bloque de código con sangrías o comillas inversas.

  apiVersion: apps/v1beta1
  kind: Deployment
  metadata:
    name: {{ template "fullname" . }}

@bacongobbler encontré la solución. Necesito usar tanto pre como &123; &125;

@bacongobbler encontré la solución. Necesito usar tanto pre como &123; &125;

¿Podría mostrar un ejemplo?
¿Hay alguna forma de excluir un yaml del motor de plantillas?

Un truco viable es permitir que Helm renderice la plantilla como una cadena sin formato. Tenga en cuenta el corchete de apertura y cierre con una tilde al revés:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

Un truco viable es permitir que Helm renderice la plantilla como una cadena sin formato. Tenga en cuenta el corchete de apertura y cierre con una tilde al revés:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

Muchas gracias. Eso resolvió el gran problema

también puedes usar printf para eso:

{{ printf "{{ some value }}" }}

Un truco viable es permitir que Helm renderice la plantilla como una cadena sin formato. Tenga en cuenta el corchete de apertura y cierre con una tilde al revés:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

funciona, gracias

apiVersion: v1
tipo: ConfigMap
metadatos:
nombre: {{plantilla "nombre completo". }}-reglas
etiquetas:
gráfico: "{{.Chart.Name}} - {{.Chart.Version | reemplazar" + "" _ "}}"
rol: {{plantilla "nombre completo". }} - archivos de reglas
prometheus: {{plantilla "nombre completo". }}
datos:
{{(.Files.Glob "files / kubernetes.rules"). AsConfig}}
{{(.Files.Glob "archivos / etcd2.rules"). AsConfig}}
{{(.Files.Glob "files / custom_alert.rules"). AsConfig}}

Esto no funcionó para mí.
¡Después de golpearme la cabeza durante 2 días, pude hacer que lo siguiente funcionara!

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ template "fullname" . }}-rules
  labels:
    chart: "{{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}"
    role: {{ template "fullname" . }}-rulefiles
    prometheus: {{ template "fullname" . }}
data:
  {{- (.Files.Glob "files/kubernetes.rules").AsConfig | nindent 2}}

Un truco viable es permitir que Helm renderice la plantilla como una cadena sin formato. Tenga en cuenta el corchete de apertura y cierre con una tilde al revés:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

Puedo agregar al coro de confirmaciones que esto todavía funciona.

Y es posible que lo necesite para que esto funcione:

https://www.vaultproject.io/docs/platform/k8s/injector/examples/

cat <<EOF >> ./patch.yaml
spec:
  template:
    metadata:
      annotations:
        vault.hashicorp.com/agent-inject: "true"
        vault.hashicorp.com/agent-inject-status: "update"
        vault.hashicorp.com/agent-inject-secret-db-creds: "database/creds/db-app"
        vault.hashicorp.com/agent-inject-template-db-creds: |
          {{- with secret "database/creds/db-app" -}}
          postgres://{{ .Data.username }}:{{ .Data.password }}<strong i="13">@postgres</strong>:5432/appdb?sslmode=disable
          {{- end }}
        vault.hashicorp.com/role: "db-app"
        vault.hashicorp.com/ca-cert: "/vault/tls/ca.crt"
        vault.hashicorp.com/client-cert: "/vault/tls/client.crt"
        vault.hashicorp.com/client-key: "/vault/tls/client.key"
        vault.hashicorp.com/tls-secret: "vault-tls-client"
EOF
spec:
  groups:
  - name: alertrules.kafkalag
    rules:
    - alert: AssessmentAggregator lag
      expr: sum(samza_pipeline_metrics_consumer_lag{job_name= "AssessmentAggregator"}) > {{ .Values.assessment_aggregator_threshold }}
      for: 5m
      labels:
        severity: critical
      annotations:
        message: {{`"AssessmentAggregator lag is {{$value}}"`}}
        summary: AssessmentAggregator lag is Critical
````
You can add 

{{ ....... }}
''
y se moldeará correctamente

Un truco viable es permitir que Helm renderice la plantilla como una cadena sin formato. Tenga en cuenta el corchete de apertura y cierre con una tilde al revés:

# Excerpt from a Prometheus Alertmanager yaml
receivers:
- name: slack-receiver
  slack_configs:
  - text: |-
      {{`{{ range .Alerts }}
        *Alert:* {{ .Annotations.summary }}
      {{ end }}`}}

Desafortunadamente, esto no funciona con promtool . https://prometheus.io/docs/prometheus/latest/configuration/unit_testing_rules/

spec:
  groups:
  - name: alertrules.kafkalag
    rules:
    - alert: AssessmentAggregator lag
      expr: sum(samza_pipeline_metrics_consumer_lag{job_name= "AssessmentAggregator"}) > {{ .Values.assessment_aggregator_threshold }}
      for: 5m
      labels:
        severity: critical
      annotations:
        message: {{`"AssessmentAggregator lag is {{$value}}"`}}
        summary: AssessmentAggregator lag is Critical

Puedes añadir

{{` ....... `}}

y se moldeará correctamente

¡¡¡Impresionante!!!. Funcionó. Gracias.

¿Fue útil esta página
0 / 5 - 0 calificaciones