Helm: Helmは、構成専用でレンダリング用ではない{{expr}}を無視することをサポートできますか?

作成日 2017年08月12日  ·  16コメント  ·  ソース: helm/helm

ユースケースがあります。PrometheusをStatefulSetとしてデプロイし、アラートルールをデプロイします。

_alerting-rules_は、ここで詳細を確認できます: https ://prometheus.io/docs/alerting/rules/#alerting -rules

それは次のようになります:
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 }}." }
Helmは、構成専用でレンダリング用ではない{{expr}}を無視することをサポートできますか?

questiosupport

最も参考になるコメント

実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。

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

全てのコメント16件

構成マップにgoスタイルテンプレートを含めるのと同様のユースケースがあります。 現在、helmはテンプレートを評価しようとしており、構成マップでエラーが発生しています。

私はしばらく前にこの同じ/同様の問題に遭遇し、アラートルールを別々のファイルとして含めることによってそれを解決しました。

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は、goテンプレートで{{ }}をエスケープすることは非常に困難であり、他の場所からファイルを丸呑みすることははるかに簡単です。

Goテンプレートで二重中括弧をエスケープする方法は、 {{ "{{" }}を使用することです。 それは非常に難しいことではなく、ただ醜いです。

この問題には2つの個別の解決策があるため、この問題をクローズしますが、これが解決されていない場合は、再度開いてください。

@bacongobblerこんにちはマシュー、私は
(単なるスニペット)。 raw / endraw、pre、single backslash、double backslashを試しましたが、成功しませんでした。
提案をありがとう...私はこれをインデントまたはバッククォートのいずれかでコードブロックに入れようとしています。

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

@bacongobbler私は解決策を見つけました。 preと&123; &125;両方を使用する必要があります

@bacongobbler私は解決策を見つけました。 preと&123; &125;両方を使用する必要があります

例を挙げていただけますか?
テンプレートエンジンから1つのyamlを除外する方法はありますか?

実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。

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

実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。

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

どうもありがとうございました。 それは大きな問題を解決しました

そのためにprintfを使用することもできます。

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

実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。

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

それは動作します、thx

apiVersion:v1
種類:ConfigMap
メタデータ:
名前:{{テンプレート "フルネーム"。 }}-ルール
ラベル:
チャート: "{{.Chart.Name}}-{{。Chart.Version | replace" + "" _ "}}"
役割:{{テンプレート "フルネーム"。 }}-ルールファイル
プロメテウス:{{テンプレート "フルネーム"。 }}
データ:
{{(.Files.Glob "files / kubernetes.rules")。AsConfig}}
{{(.Files.Glob "files / etcd2.rules")。AsConfig}}
{{(.Files.Glob "files / custom_alert.rules")。AsConfig}}

これは私にはうまくいきませんでした。
2日間頭を叩いた後、次の仕事ができました!

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

実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。

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

これがまだ機能していることを確認の合唱に追加できます。

そして、これを機能させるためにそれが必要になるかもしれません:

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 

{{ ....... }}
`` `
正しくテンプレート化されます

実行可能なハックは、Helmにテンプレートを生の文字列としてレンダリングさせることです。 中括弧の開閉にバッククォートが付いていることに注意してください。

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

残念ながら、これは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

あなたは付け加えられます

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

正しくテンプレート化されます

驚くばかり!!!。 動いた。 ありがとう。

このページは役に立ちましたか?
0 / 5 - 0 評価