Helm: Nilai tidak ada dengan loop pada rentang

Dibuat pada 10 Okt 2016  ·  14Komentar  ·  Sumber: helm/helm

Ikuti edisi ini

mencoba melakukan pemikiran yang sama dengan:

{{ range $k, $v := until (atoi (quote .Values.Replicas) | default 5) }}
apiVersion: v1
kind: Service
metadata:
  name: zookeeper-{{$v}}
  namespace: {{ .Values.Namespace }}
  labels:
    node: "zookeeper-{{$v}}"
  annotations:
    "helm.sh/created": {{ .Release.Time.Seconds | quote }}
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  ports:
  - port: {{.Values.PeerPort}}
    name: peer
  - port: {{.Values.LeaderElectionPort}}
    name: leader-election
  - port: {{.Values.ClientPort}}
    name: client
  selector:
    component: "{{.Release.Name}}-{{.Values.Component}}"
    zookeepernode: "zookeeper-{{$v}}"
{{ end }}

Tapi saya mendapatkan kesalahan ini:

Error: render error in "zookeeper/templates/deployment.yaml": template: zookeeper/templates/deployment.yaml:6:22: executing "zookeeper/templates/deployment.yaml" at <.Values.global.names...>: can't evaluate field Values in type int

Mungkin saya lupa sesuatu, ada ide?

Komentar yang paling membantu

@worldsayshi Untuk apa nilainya, saya baru saja mengalami masalah yang sama, dan ternyata ada sedikit dokumentasi yang relevan dari bagian variabel :

However, there is one variable that is always global - $ - this variable will always point to the root context. This can be very useful when you are looping in a range need to know the chart’s release name.

Ternyata lebih mudah untuk melakukan sesuatu seperti ini jika Anda memerlukan akses ke konteks root dari dalam blok range :

{{- range $key, $value := .Values.someHash }}
  {{ $key }}: {{ print $.Values.prefix ":" $value | quote }}
{{- end }}

Semua 14 komentar

akhirnya saya menemukan trik, tapi mungkin itu sesuatu yang bisa kita tingkatkan.

{{- $root := . -}}

{{ range $k, $v := until (atoi (quote .Values.Replicas) | default 5) }}
apiVersion: v1
kind: Service
metadata:
  name: zookeeper-{{$v}}
  namespace: {{ $root.Values.Namespace }}
  labels:
    node: "zookeeper-{{$v}}"
  annotations:
    "helm.sh/created": {{ $root.Release.Time.Seconds | quote }}
    service.alpha.kubernetes.io/tolerate-unready-endpoints: "true"
spec:
  ports:
  - port: {{$root.Values.PeerPort}}
    name: peer
  - port: {{$root.Values.LeaderElectionPort}}
    name: leader-election
  - port: {{$root.Values.ClientPort}}
    name: client
  selector:
    component: "{{$root.Release.Name}}-{{$root.Values.Component}}"
    zookeepernode: "zookeeper-{{$v}}"
{{ end }}

Oh, ya... itu adalah salah satu hal yang lebih esoteris tentang template Go. Lingkup . diganti dalam struktur kontrol.

Saya mencoba beberapa cara untuk mengatasi ini, tetapi yang terbaik adalah solusi dalam contoh di atas. Menandai ini ditutup.

Ini gigit aku juga :(

@technosophos Mungkin Anda bisa mempertimbangkan untuk mengubah perilaku ini? yaitu menghentikan iterasi dengan rentang tanpa menetapkan variabel secara eksplisit, dan mempertahankan ruang lingkup

Ini adalah sesuatu yang dilakukan Go sebagai bagian dari teks/templat, jadi tidak ada yang dapat ditindaklanjuti di Helm secara langsung. Cakupan diubah saat mengulangi melalui struktur kontrol seperti range . Taruhan terbaik Anda untuk mengubah perilaku ini adalah dengan mengajukan bug di hulu dengan Go itu sendiri.

dokumen yang relevan dari teks/templat :

{{range pipeline}} T1 {{end}}

Nilai saluran harus berupa larik, irisan, peta, atau saluran. Jika nilai pipa memiliki panjang nol, tidak ada output; jika tidak, titik diatur ke elemen berurutan dari larik, irisan, atau peta dan T1 dieksekusi . Jika nilainya adalah peta dan kuncinya adalah tipe dasar dengan urutan yang ditentukan ("sebanding"), elemen akan dikunjungi dalam urutan kunci yang diurutkan.

Untuk beberapa alasan solusi $root tampaknya berhasil untuk saya untuk sementara tetapi sekarang tersedak:
Error: UPGRADE FAILED: unable to recognize "": no matches for /, Kind=Deployment
Saya tidak mengerjakan proyek untuk sementara waktu. Saya tidak tahu apa yang berubah di antaranya. Menghapus tugas $root menghilangkan kesalahan ini.

Oke, jadi itu mulai berfungsi lagi ketika saya menghapus salah satu dari - menghasilkan {{- $root := . }} . Saya mungkin salah paham tentang sesuatu.

Sunting : Jadi beberapa teks yang relevan dari dokumentasi template Go adalah:

Namun, untuk membantu dalam memformat kode sumber template, jika pembatas kiri tindakan (secara default "{{") segera diikuti dengan tanda minus dan karakter spasi ASCII ("{{- "), semua spasi tambahan dipangkas dari teks sebelumnya. Demikian pula, jika pembatas kanan ("}}") didahului dengan spasi dan tanda minus (" -}}"), semua spasi putih di depan akan dipangkas dari teks yang segera menyusul. Dalam penanda trim ini, ruang ASCII harus ada; "{{-3}}" diurai sebagai tindakan yang berisi angka -3.

Sunting2 : Ini semakin aneh. Jika saya menambahkan pernyataan printf segera setelah penugasan root, itu berfungsi lagi. Sigh, apa pun yang berhasil kurasa.

# We assign the current context to a variable to access it in range iteration below
{{- $self := . -}}
{{ printf "%#v" $ }}

(Saya sebenarnya menggunakan self sebagai parameter penugasan alih-alih root)
Juga, itu tidak berfungsi tanpa menambahkan komentar awal ke dokumen.

@worldsayshi Untuk apa nilainya, saya baru saja mengalami masalah yang sama, dan ternyata ada sedikit dokumentasi yang relevan dari bagian variabel :

However, there is one variable that is always global - $ - this variable will always point to the root context. This can be very useful when you are looping in a range need to know the chart’s release name.

Ternyata lebih mudah untuk melakukan sesuatu seperti ini jika Anda memerlukan akses ke konteks root dari dalam blok range :

{{- range $key, $value := .Values.someHash }}
  {{ $key }}: {{ print $.Values.prefix ":" $value | quote }}
{{- end }}

Jika ada yang datang ke sini sama bingungnya dengan saya tentang cara menerapkan solusi elegan @DeviateFish ke fungsi templat (seperti yang Anda dapatkan secara gratis di helm create ), Anda hanya perlu meneruskan konteks yang tepat ke dalam fungsi templat.

{{ range tuple "fizz" "buzz" }}
...
{{ template "foobar.fullname" $ }}  # Worky.
{{ template "foobar.fullname" . }}  # No worky.
...
{{ end }}

Template yang bagus dari @killix ... satu hal yang membuat saya beberapa mencoba untuk menemukan adalah bahwa contoh di awal utas ini harus memiliki --- di akhir template untuk memisahkan layanan yang dibuat di lingkaran. Harapan yang menyelamatkan orang lain beberapa menit dari debugging.

Saya memiliki beberapa masalah dengan cakupan ini dan saya mendapatkan kesalahan - Kesalahan: UPGRADE FAILED: template: maas360/charts/consumer/templates/_consumer. tpl:84 :33: mengeksekusi "loadconsumerConfigFiles" di : nil pointer mengevaluasi antarmuka {}.Glob.

Saya memiliki configmap.yaml yang memanggil satu templat seperti di bawah ini -

{{- $root := . -}}
{{ range $instance_id, $value := .Values.instance_names }}
apiVersi: v1
jenis: ConfigMap
metadata:
nama: {{ $.Release.Name }}-{{ $.Values.maasappname }}-{{$instance_id}}-configmap
data:

{{template "loadconsumerConfigFiles" (dict $instance_id) $}}

{{akhir}}

Dan saya memiliki loadconsumerConfigFiles ini di file template -
{{- tentukan "loadconsumerConfigFiles" -}}
{{- $root := . -}}
{{- $arg1 := indeks . "0" -}}
{{- $file := .File }}
{{- range $path, $byte := $root.Files.Glob "config/*" }}

Saya mendapatkan kesalahan ini. Pada dasarnya saya mencoba meneruskan instance_id sebagai parameter ke loadconsumerConfigFiles sehingga saya dapat menggunakan ini di dalam templat itu. Bisakah Anda membantu apa yang saya lewatkan. Saya sudah melewati konteks root itu. tetap saja itu menunjukkan kesalahan.

Ini berhasil bagi saya untuk mengatur ulang ruang lingkup kembali ke root dan mempertahankan item yang saya ulangi. Ini memiliki manfaat untuk mengatasi bug di IntelliJ di mana ia tidak dapat menemukan definisi variabel yang merujuk $root

{{- range .Values.deployments }}
{{- $rangeItem := . -}}
{{- with $ }}
---
apiVersion: apps/v1
kind: Deployment
  name: {{ $rangeItem.name }}
  labels:
    - organization: {{ .Values.organization }}
# etc etc
... 
{{- end }}
{{- end }}

OK. Terima kasih banyak.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat