Helm: O Helm pode suportar para ignorar {{expr}} que é apenas para configuração, mas não para renderização?

Criado em 12 ago. 2017  ·  16Comentários  ·  Fonte: helm/helm

Há um caso de uso: implantar Prometheus como StatefulSet e config alerting-rules como ConfigMap .

_alerting-rules_ pode obter mais detalhes aqui: https://prometheus.io/docs/alerting/rules/#alerting -rules

parece:
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 }}." }
O Helm pode suportar para ignorar {{expr}} que é apenas para configuração, mas não para renderização?

questiosupport

Comentários muito úteis

Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:

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

Todos 16 comentários

Eu tenho um caso de uso semelhante para ter um modelo de estilo go em um mapa de configuração. No momento, o helm está tentando avaliar o modelo e causando erros no mapa de configuração.

Encontrei este mesmo / semelhante problema há algum tempo e resolvi incorporando incluindo as regras de alerta como arquivos 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 é extremamente difícil escapar de {{ }} em um modelo go, e roubar os arquivos de outro lugar é muito mais simples.

A maneira de escapar das chaves duplas nos modelos Go é usar {{ "{{" }} . Não é extremamente difícil, apenas feio.

Vou encerrar este problema, pois temos duas soluções separadas para o problema, mas reabra se isso não tiver sido resolvido.

@bacongobbler Olá Matthew, tenho lutado para saber como escapar das chaves em um modelo do Helm no markdown. Talvez eu não esteja entendendo sua solução. Como eu renderizaria isso corretamente?
(apenas um trecho). Eu tentei raw / endraw, pre, barra invertida simples, barra invertida dupla - sem sucesso!
obrigado por qualquer sugestão ... Estou tentando colocar isso no bloco de código com recuos ou crases.

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

@bacongobbler encontrei a solução. Eu preciso usar o pré e &123; &125;

@bacongobbler encontrei a solução. Eu preciso usar o pré e &123; &125;

Você poderia dar um exemplo?
Existe uma maneira de excluir um yaml do mecanismo de modelo?

Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:

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

Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:

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

Muito obrigado. Isso resolveu o grande problema

você também pode usar printf para isso:

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

Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:

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

funciona, obrigado

apiVersion: v1
tipo: ConfigMap
metadados:
nome: {{template "fullname". }}-as regras
etiquetas:
gráfico: "{{.Chart.Name}} - {{.Chart.Version | substituir" + "" _ "}}"
papel: {{template "fullname". }} - arquivos de regras
prometheus: {{template "fullname". }}
dados:
{{(.Files.Glob "files / kubernetes.rules"). AsConfig}}
{{(.Files.Glob "files / etcd2.rules"). AsConfig}}
{{(.Files.Glob "files / custom_alert.rules"). AsConfig}}

Isso não funcionou para mim.
Depois de bater minha cabeça por 2 dias, consegui fazer o seguinte trabalho!

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}}

Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:

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

Posso acrescentar ao coro de confirmações que isso ainda funciona.

E você pode precisar para fazer isso funcionar:

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 

{{ ....... }}
`` `
e modelará corretamente

Um hack viável é permitir que o Helm renderize o modelo como uma string bruta. Observe as chaves de abertura e fechamento com crase:

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

Infelizmente, isso não funciona usando 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

Você pode adicionar

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

e modelará corretamente

Impressionante!!!. Funcionou. Obrigado.

Esta página foi útil?
0 / 5 - 0 avaliações