Helm: Pesan kesalahan yang membingungkan pada nilai template yang hilang

Dibuat pada 22 Nov 2016  ·  54Komentar  ·  Sumber: helm/helm

Jika template menyertakan item seperti:

"{{ .Values.postgresql.postgresPassword }}"

Dan nilainya tidak ditentukan, saat menjalankan lint Anda mendapatkan:

[WARNING] templates/post-install-job.yaml: these substitution functions are returning no value: [{{ .Values.postgresql.postgresPassword }}]

Namun, jika Anda memiliki sesuatu yang tidak ditentukan, itu adalah level tambahan seperti:

"{{ .Values.postgresql.notdefined.postgresPassword }}"

Anda mendapatkan pesan kesalahan saat linting atau menginstal yang menyertakan perpesanan khusus Go:

[ERROR] templates/: render error in ".../templates/post-install-job.yaml": template: .../templates/post-install-job.yaml:52:28: executing ".../templates/post-install-job.yaml" at <.Values.postgresql.n...>: can't evaluate field postgresPassword in type interface {}

Mungkin seharusnya masih ada kesalahan daripada peringatan seperti yang lain, tapi saya pikir itu pasti bisa lebih baik untuk tidak menggunakan type interface {} .

help wanted

Komentar yang paling membantu

Banyak kesalahan dari templat helm sangat tidak jelas atau sulit dipahami. Mungkin kita harus memiliki masalah github lain untuk memperbaiki pesan kesalahan secara umum?

Semua 54 komentar

Ya, beberapa kesalahan yang keluar dari mesin templat cukup tidak jelas.

@tsloughter Menutup karena tidak ada aktivitas. Beri tahu saya jika Anda ingin membuka kembali masalah ini. Terima kasih!

Saya memiliki masalah yang sama. Tampaknya sub objek tidak berfungsi
yaitu.
.Values.blah baik-baik saja, tetapi .Values.blah.foo tidak berfungsi, meskipun blah ditentukan dalam values.yaml

hai @chainlink! Maukah Anda menjelaskan lebih banyak tentang itu? Memahami masalah spesifik itu, apa pesan kesalahannya, bagaimana bagan Anda diatur, dll. Akan menjadi item tindakan yang baik untuk mulai mengembalikan kesalahan yang lebih baik.

Mengalami masalah yang sama.

Grafik:

{{- if .Values.sidekiq.enabled }}
kind: Deployment
apiVersion: extensions/v1beta1
metadata:
  name: {{ .Release.Name }}-sidekiq
spec:
  replicas: {{ .Values.sidekiq.replicaCount }}
  template:
    metadata:
      labels:
        app: {{ .Release.Name }}-sidekiq
      annotations:
        prometheus.io/port: "3000"
        prometheus.io/scrape: "true"
    spec:
      containers:
      - name: {{ .Release.Name }}-sidekiq
        image: "{{ required "Repository required" .Values.image.repository }}:{{ required "Image tag required" .Values.image.tag }}"
        command: ["bundle"]
        args: ["exec", "sidekiq", "-C", "config/sidekiq.yml"]
        resources:
{{ toYaml .Values.sidekiq.resources | indent 10 }}
        ports:
        - containerPort: 3000
{{ end }}

values.yaml :

image:
  repository: "gcr.io/something/something"
  tag: ""

sidekiq:
  enabled: true
  replicaCount: 1
  resources:
    requests:
      memory: "250Mi"
      cpu: "250m"
    limits:
      memory: "2Gi"
      cpu: "1"

Kesalahan ini terjadi ketika saya mencoba meningkatkan dengan nilai-nilai ini:

Error: UPGRADE FAILED: render error in "web/templates/sidekiq-deployment.yaml": template: web/templates/sidekiq-deployment.yaml:1:14: executing "web/templates/sidekiq-deployment.yaml" at <.Values.sidekiq.enab...>: can't evaluate field enabled in type interface {}

Pada dasarnya saya melihat hal yang sama dengan @NathanJiangCS. Apakah kita jelas melakukan sesuatu yang salah di sini?

Hai @NathanJiangCS

Sejauh ini saya tidak dapat mereproduksi kesalahan Anda. Saya membuat ulang bagan Anda dan menginstal dengan tag gambar kosong. Saya mendapatkan pesan Image Tag Required . Jika saya menginstal dengan tag acak dan kemudian mencoba helm upgrade dengan tag kosong, saya mendapatkan pesan Image Tag Required lagi.

Versi Helm dan Kubernetes apa yang Anda gunakan?

Kemudi:

Client: &version.Version{SemVer:"v2.7.2", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.7.2", GitCommit:"8478fb4fc723885b155c924d1c8c410b7a9444e6", GitTreeState:"clean"}

Kubernetes:

Client Version: version.Info{Major:"1", Minor:"8", GitVersion:"v1.8.4", GitCommit:"9befc2b8928a9426501d3bf62f72849d5cbcd5a3", GitTreeState:"clean", BuildDate:"2017-11-20T05:28:34Z", GoVersion:"go1.8.3", Compiler:"gc", Platform:"darwin/amd64"}
Server Version: version.Info{Major:"1", Minor:"8+", GitVersion:"v1.8.5-gke.0", GitCommit:"2c2a807131fa8708abc92f3513fe167126c8cce5", GitTreeState:"clean", BuildDate:"2017-12-19T20:05:45Z", GoVersion:"go1.8.3b4", Compiler:"gc", Platform:"linux/amd64"}

Cukup aneh, saya tidak dapat mereproduksi kesalahan yang saya lihat sebelumnya. Mungkin itu kesalahan di pihak saya.

@ jeffutter Apakah Anda masih mengalami masalah?

Saya pikir masalah yang saya lihat adalah bahwa saya mencoba untuk mereferensikan nilai-nilai dari sub-grafik satu sama lain.

Sebagai contoh

MainChart
| --- SubChartA
| --- SubChartB

Saya mencoba melakukan sesuatu seperti {{Values.SubChartA.something}} di Sub Chart B, yang sekarang saya kumpulkan bukanlah bagaimana hal-hal dimaksudkan untuk bekerja.

Ok senang Anda sudah tahu. Saya akan menutup yang ini tapi tolong buka masalah baru jika Anda memiliki lebih banyak masalah. Terima kasih!

Saya mengalami masalah yang sama

image:
  init:
    repository: busybox
    tag: latest
    pullPolicy: IfNotPresent

dan dalam penerapan saya

image: "{{ .Values.image.init.repository }}:{{ .Values.image.init.tag }}"

Dan saya mengerti

Error: render error in "es/templates/es-master.yml": template: es/templates/es-master.yml:17:26: executing "es/templates/es-master.yml" at <.Values.image.es.rep...>: can't evaluate field repository in type interface {}

@ jonathan-kosgei apa perbaikannya? cc @ jascott

Saya memiliki masalah yang sama dan yang dapat saya temukan hanyalah orang-orang yang mengatakan "oh, sudah diperbaiki sekarang". Terima kasih

@alexellis apakah masalah Anda seperti ini? yaitu dalam jarak (loop)?
https://github.com/kubernetes/helm/issues/1311

Tidak, saya pikir saya melewatkan bagian dari referensi yang memasukkan --set create=true alih-alih --set operator.create=true - itu tidak jelas dari kesalahannya. Semoga ini bisa membantu orang lain.

dimana kamu mengaturnya? --set operation.create = true?

saya mendapatkan kesalahan ini: <.Values.ingress.enab ...>: tidak dapat mengevaluasi bidang diaktifkan dalam antarmuka tipe {}

Saya memiliki masalah yang sama dengan sub objek seperti yang dijelaskan di atas. Adakah yang tahu cara memperbaikinya?

Banyak kesalahan dari templat helm sangat tidak jelas atau sulit dipahami. Mungkin kita harus memiliki masalah github lain untuk memperbaiki pesan kesalahan secara umum?

Apakah kita sudah membuka tiket lain untuk masalah ini? Saya memiliki masalah serupa, di mana saya mencoba mengakses nilai subchart dari bagan payung dan ternyata, tpl, tidak dapat menguraikannya. Tidak yakin apa akar penyebabnya, tetapi jika seseorang dapat memeriksanya, akan lebih baik.

@ bali0019 jika Anda memiliki saran tentang pesan kesalahan tertentu, silakan buka tiket baru untuk itu.

@ max-rocket-internet, sehubungan dengan membuka masalah baru untuk secara umum memperbaiki pesan kesalahan: sangat sulit untuk mengukur ketika dianggap dapat diterima untuk menutup tiket seperti itu. Memiliki tiket dengan item tindakan yang sangat spesifik adalah yang terbaik. misal, "template helm dengan \mengembalikan kesalahan non-deskriptif "jauh lebih ringkas dan dapat ditindaklanjuti :)

@bacongobbler Saya memiliki masalah dengan bagan payung, di mana saya mencoba mengakses nilai dari sub bagan, tetapi saya mendapatkan kesalahan ini, meskipun bidang itu ada di nilai sub bagan

: can't evaluate field sanity in type interface {}

@ctxrag apakah itu dengan OpenFaaS atau bagan helm lainnya?

Saya juga mengalami masalah ini saat menggunakan bagan payung dengan bagan umum bersama templat.

mengalami masalah yang sama di sini

pastikan file yaml Anda diformat dengan benar. gunakan: helm lint .

apakah ada cara untuk memeriksanya? seperti .Values.something && .Values.something.somethingElse tetapi dalam helm-crazy-lang?

Sepertinya {{- if ($.Values.service) and $.Values.service.enabled }} berfungsi untuk memeriksa bahwa bagian ada terlebih dahulu (dalam kasus saya)

Sunting: tetapi bagaimana saya bisa melakukan pemeriksaan yang sama untuk bagian? Ini masih menimbulkan kesalahan:

{{ if (.cloudflare) and (.cloudflare.secret) -}}
              name: {{ .cloudflare.secret.name }}
              key: {{ .cloudflare.secret.emailAddressKey }}
{{- else -}}
...

lol @ helm-crazy-lang. Itu nama terbaik yang pernah saya dengar untuk teks / template :)

Sintaks yang tepat harus if and .cloudflare .cloudflare.secrets , FYI. and adalah fungsi dalam teks / template yang menerima dua argumen; itu bukan kata kunci yang berfungsi seperti bahasa pemrograman tradisional.

@bacongobbler yang juga tidak bekerja untuk saya sayangnya, ini:

{{- if or (and (.cloudflare) (.cloudflare.enabled)) (and ($.Values.cloudflare) ($.Values.cloudflare.enabled)) }}

Memberikan:

[ERROR] templates/: render error in "XXX/templates/pre-delete-job.yaml": template: XXX/templates/pre-delete-job.yaml:3:41: executing "XXX/templates/pre-delete-job.yaml" at <.cloudflare.enabled>: can't evaluate field enabled in type interface {}

Apakah .cloudflare vs .Values.cloudflare disengaja? Kesalahan itu sepertinya menunjukkan .cloudflare tidak ada.

Ya itu betul. Saya mencoba untuk memeriksa apakah itu ada dalam lingkup, dan jika diaktifkan ada juga, atau kembali ke lingkup root kemudian lihat $ .Values ​​di sana. Ini semua dalam range , jadi .cloudflare seharusnya benar. (Juga, ya - itu tidak ada. Saya mencoba mendeteksinya)

https://stackoverflow.com/questions/44675087/golang-template-variable-isset membuatku berpikir ... "aduh".

Saya mencoba melakukan hierarki pengaturan, misalnya:

title: Hello

deployments:
  myDepoyment:
    role: one
  otherDeployment:
    title: Goodbye

Dimana myDeployment akan "mewarisi" default title dari Hello , tetapi otherDeployment akan "menimpa" dengan judul tertentu Goodbye . Mungkin ada cara lain untuk melakukan ini?

Edit: apakah saya perlu menyiapkan dict , lalu range melalui kedua level dan set kunci, lalu menggunakan dict ? Bantuan apa pun akan sangat bagus

menghadapi masalah yang sama, ada yang membantu? itu berhasil untuk siapa saja?

Saya memiliki masalah yang sama. Dalam kasus saya, perbaikannya adalah mengganti nama values.yml -> values.yaml

Saya juga menghadapi masalah yang sama. Mengapa ditutup? Saya tidak melihat penjelasan atau solusi apa pun di sini.

Hai,

Sepertinya helm mengharapkan file sebagai dot.yaml dan bukan dot.yml. Saya menghadapi masalah yang sama seperti di atas dan masalah lain dengan Chart.yml - jadi, saya mengganti namanya menjadi values.yaml dan Chart.yaml.

Jadi, ganti namanya menjadi yaml dan itu akan berfungsi.

Terima kasih

Chart.yaml saya disebut Chart.yaml, dan saya masih mendapatkan kesalahan itu:
Saya hanya memiliki grafik utama (tidak ada subchart)

Error: render error in "helm/templates/service-db.yaml": template: helm/templates/service-db.yaml:7:40: executing "helm/templates/service-db.yaml" at <.Chart.appVersion>: can't evaluate field appVersion in type interface {}

shell returned 1

Kode:

    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/version: {{ .Chart.appVersion }}
    app.kubernetes.io/component: frontend

Chart.yaml

apiVersion: v1
appVersion: "5.6.0.3856-ion70"
description: test application
name: testapp
version: 0.1.1

Menariknya (Frustratingly?) Ini berfungsi jika saya mereferensikan .Chart.name daripada .Chart.appVersion

==> Linting .
[INFO] Chart.yaml: icon is recommended

1 chart(s) linted, no failures

Saya menggunakan versi v2.10.0

Dalam kasus saya, saya menggunakan range dan nilai file Values.yaml tidak ditentukan dengan benar:
Cara yang salah:

env:
  node:
    varA:  value
    varB:  value

Cara yang benar :

env:
  node:
    - varA: value
      varB: value

Perhatikan tanda hubung kecil (-) sebelum varA.

-Rahul

Saya juga menghadapi masalah yang sama di versi 2.12.3
Struktur YAML nilai saya seperti:
values.yaml
global:
configMap
properti:
saya:
jasa:
perang:
truststore:
kata sandi: abcxyz

Kesalahan: tidak dapat mengevaluasi kata sandi bidang dalam jenis antarmuka {}

versi helm
Klien: & version.Version {SemVer: "v2.12.3", GitCommit: "eecf22f77df5f65c823aacd2dbd30ae6c65f186e", GitTreeState: "clean"}
Server: & version.Version {SemVer: "v2.12.3", GitCommit: "eecf22f77df5f65c823aacd2dbd30ae6c65f186e", GitTreeState: "clean"}

versi kubectl

Versi Klien: version.Info {Major: "1", Minor: "12", GitVersion: "v1.12.5", GitCommit: "51dd616cdd25d6ee22c83a858773b607328a18ec", GitTreeState: "clean", BuildDate: "2019-01-16T18: 24: 45Z ", GoVersion:" go1.10.7 ", Penyusun:" gc ", Platform:" linux / amd64 "}
Versi Server: version.Info {Mayor: "1", Minor: "12", GitVersion: "v1.12.5", GitCommit: "51dd616cdd25d6ee22c83a858773b607328a18ec", GitTreeState: "clean", BuildDate: "2019-01-16T18: 14: 49Z ", GoVersion:" go1.10.7 ", Penyusun:" gc ", Platform:" linux / amd64 "}

Apakah ada yang punya perbaikan untuk ini?

Untuk semua yang menghadapi masalah ini, periksa kembali nama file values.yaml . Milik saya adalah values.YML bukan values.yaml

Mengganti nama itu memperbaiki masalah.

Saya memiliki masalah ini juga. File nilai saya bernama values.yaml dan penerapan saya adalah deployment.yaml

deployment.yaml :

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: {{ template "unicorn.name" . }}
  labels:
    app: {{ template "unicorn.name" . }}
    chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
    release: {{ template "unicorn.releasedVersionName" . }}
    heritage: {{ .Release.Service }}
    version: {{ .Chart.Version }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    metadata:
      labels:
        app: {{ template "unicorn.name" . }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
          imagePullPolicy: {{ .Values.image.pullPolicy }}

values.yaml :

versionName: whatever
replicaCount: 5
image:
  repository: myself/myimage
  tag: whatever
  pullPolicy: Always

Saya mendapatkan yang terkenal itu

render error in "unicorn/templates/deployment.yaml": template: unicorn/templates/deployment.yaml:20:28: executing "unicorn/templates/deployment.yaml" at <.Values.image.reposi...>: can't evaluate field repository in type interface {}, requeuing

Saya kemudian melakukan perubahan berikut:

deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: {{ .Chart.Name }}
spec:
  replicas: {{ .Values.replicaCount }}
  template:
    metadata:
      labels:
        app: {{ .Chart.Name }}
    spec:
      containers:
        - name: {{ .Chart.Name }}
          image: "{{ .Values.repository }}:{{ .Values.tag }}"
          imagePullPolicy: {{ .Values.pullPolicy }}

values.yaml :

versionName: whatever
replicaCount: 5
repository: myself/myimage
tag: whatever
pullPolicy: Always

Saya tidak mengalami masalah itu.

Dalam kasus saya, saya menamai file values.yml alih-alih values.yaml .

Jika tidak dapat menemukan file, itu macet di tingkat kedua. Jadi melakukan {{ .Values.awesome.image }} akan macet.

Jika saya mencoba hanya {{ .Values.image }} (dan juga memastikan bahwa image memiliki nilai) itu menghasilkan konfigurasi, tetapi nilai yang diganti kosong. Kemudian saya menyadari bahwa ada masalah saat memuat values.yaml .

^^ masalah RE values.yml yang sama persis bukan values.yaml. Kudos to helm lint saran!

Saya tidak dapat menerapkan diagram helm dasar 3 dengan file yang dibuat secara otomatis.

at <.host>: can't evaluate field host in type interface {}

ingress.yaml

[snip]
  rules:
  {{- range .Values.ingress.hosts }}
    - host: {{ .host | quote }}
      http:
        paths:
        {{- range .paths }}
          - path: {{ . }}
            backend:
              serviceName: {{ $fullName }}
              servicePort: {{ $svcPort }}
        {{- end }}
  {{- end }}
{{- end }}

values.yaml

ingress:
  enabled: true
  annotations: {}
  hosts:
    - host: chart-example.local
      paths: []
  tls: []

@masterkain Anda perlu mengkonfigurasi host di file nilai. Lihat dokumen ingress di k8s untuk detail selengkapnya: https://kubernetes.io/docs/concepts/services-networking/ingress/

@hickeyma tidak yakin apa yang Anda maksud.

helm3 create test
lihat ingress.yaml # 31
lihat values.yaml # 43

konfigurasi itu tidak bekerja untuk saya di luar kotak, bahkan jika saya meletakkan host asli saya, saya mendapatkan kesalahan template.

at <.host>: can't evaluate field host in type interface {}

@masterkain Dapatkah Anda membuat masalah dan memasukkan rinciannya ke dalamnya inc. nilai?

mengurangi ruang lingkup pencarian, berhasil untuk saya

 Create the name for the database password secret key.
 */}}
 {{- define "keycloak.dbPasswordKey" -}}
-{{- if and .Values.keycloak.persistence .Values.keycloak.persistence.existingSecret -}}
-  {{- .Values.keycloak.persistence.existingSecretKey -}}
+{{- with .Values.keycloak.persistence -}}
+{{- if .existingSecret -}}
+  {{- .existingSecretKey -}}
 {{- else -}}
   password
 {{- end -}}
+{{- end -}} # with
 {{- end -}}

 {{/*

dengan helm lint . untuk menyelamatkan, saya akan gila jika tidak

ps jangan gunakan # with sebagai cara berkomentar ... rusak ... gunakan {{- end -}}{{/* with */}}

Saya terus-menerus menerima pesan kesalahan ini ketika mencoba memeriksa file deployment.yaml saya untuk nilai yang ditentukan dalam subchart (redis dalam kasus saya) menggunakan helm 3 sebagai:
name: {{ ternary .Values.redis.existingSecret (printf "%s-%s" .Release.Name "redis") .Values.redis.existingSecret | quote }}

Satu-satunya cara yang secara pribadi saya temukan untuk menghindari ini adalah dengan menentukan variabel di bagian atas file seperti:
{{- $redisExistingSecret := .Values.redis.existingSecret | default nil}}

Kemudian alih-alih baris sebelumnya saya melakukan name: {{ ternary $redisExistingSecret (printf "%s-%s" .Release.Name "redis") $redisExistingSecret | quote }} dan ini tampaknya berhasil untuk saya.

Semoga bisa membantu seseorang.

@ jascott1 pesan galat yang membingungkan tampaknya masih menjadi masalah. Bisakah ini dibuka kembali?

@ caleb15 apakah Anda ingin memperbaikinya? Masalah ini dibuka kembali pada tahun 2016.

Jika Anda ingin mengatasi masalah ini, buka PR.

Akan keren jika saya bisa memperbaikinya tetapi saya tidak punya pengalaman dengan pergi.
Akan lebih baik bagi orang lain untuk memperbaikinya, dan jika masalahnya terbuka
akan ada kemungkinan lebih tinggi seseorang mengambilnya.

Pada Sel, 11 Agustus 2020, 17:47 Matthew Fisher [email protected]
menulis:

Apakah Anda ingin memperbaikinya? Masalah ini dibuka kembali pada tahun 2016.

Jika Anda ingin mengatasi masalah ini, buka PR.

-
Anda menerima ini karena Anda berkomentar.
Balas email ini secara langsung, lihat di GitHub
https://github.com/helm/helm/issues/1579#issuecomment-672406719 , atau
berhenti berlangganan
https://github.com/notifications/unsubscribe-auth/ALCZY6IGXV64N6PZGE6QMPLSAHRBFANCNFSM4CXHON4A
.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat