Helm: Mengakses nilai subchart dengan tanda hubung di namanya

Dibuat pada 26 Mar 2017  ·  44Komentar  ·  Sumber: helm/helm

Berdasarkan docs, ada konvensi untuk nama grafik dengan strip.
Tetapi pada saat yang sama berdasarkan dokumen ini, Anda tidak boleh memiliki nilai dengan tanda hubung.

Jadi, katakanlah saya memiliki 2 grafik dependen: gitlab dan gitlab-runner .
Bagaimana cara mengkonfigurasi dan mengakses nilai untuk subchart?

docs questiosupport

Komentar yang paling membantu

Gunakan fungsi index template untuk mengakses nilai dengan '-' pada nama: {{ index .Values "gitlab-runner" }} .

Dan kita mungkin harus mengubah konvensi. Itu membuatnya sakit untuk menghadapi hal-hal seperti ini. Saya menugaskan masalah itu kepada diri saya sendiri untuk mengubah konvensi.

Semua 44 komentar

Ini pertanyaan yang bagus. Saya tidak mengalami masalah dalam melakukan ini, tetapi ini adalah ketidakkonsistenan. @technosophos Haruskah kita mengubah salah satu dari ini agar cocok dengan yang lain?

Saat ini saya mengalami masalah saat mengakses nilai untuk subchart tersebut.

Blok berikutnya memberi saya kesalahan.

{{ if .Values.gitlab-runner.enabled }}

Kesalahan: UPGRADE GAGAL: kesalahan parse di "gitlab / templates / deployment.yaml": template: gitlab / templates / deployment. yaml: 217 : karakter buruk U + 002D '-'

Gunakan fungsi index template untuk mengakses nilai dengan '-' pada nama: {{ index .Values "gitlab-runner" }} .

Dan kita mungkin harus mengubah konvensi. Itu membuatnya sakit untuk menghadapi hal-hal seperti ini. Saya menugaskan masalah itu kepada diri saya sendiri untuk mengubah konvensi.

terima kasih, ini berfungsi seperti ini.

@prydonius Apakah Anda ingat alasan mengapa kami awalnya memutuskan bahwa bagan harus diberi nama dengan tanda hubung? Saya melihat-lihat dokumentasi yang lebih lama dan ini telah menjadi preseden yang kami tetapkan sejak awal. Saya berpikir bahwa mungkin bukan ide yang baik untuk mengubahnya.

Saya mencoba memahami cara kerja indeks.
Bagaimana saya bisa mengakses nilai servicename dari:

mysub-chart:
  servicename: mysubchart-service

?
Solusi yang ditemukan: {{ index .Values "mysub-chart" "servicename" }}

Bagaimana Anda akan menggunakan nama tanda hubung dalam struktur kontrol, seperti blok with atau range ?

{{- range $key, $value := .Values.my-service-name.deployment.annotations }}

@spearsem Saya pikir komentar di atas telah mendapat solusi yang tepat untuk masalah itu. Saya pikir ini seharusnya berhasil:

{{- range $key, $value := index .Values "my-service-name" "deployment" "annotations" }}

Jika tidak, saya pikir Anda dapat membuat contoh variabel yang menunjuk ke penjelasan dan menggunakannya dalam jangkauan atau dengan blok. Sebagai contoh

{{ $annotations := index .Values "my-service-name" "deployment" "annotations" }}
{{- range $key, $value := $annotations }}

@bacongobbler Apakah ini juga berfungsi untuk with ? Saya tidak terbiasa dengan implementasi with untuk mengetahui apakah itu dapat memanfaatkan hasil evaluasi fungsi lain sebagai "konteks".

teks / template tampaknya mengatakan bahwa itu harus bekerja dengan struktur apa pun, jadi saya akan menganggap ya.

Jika nilai pipeline kosong, tidak ada output yang dihasilkan; jika tidak, titik disetel ke nilai pipa dan T1 dijalankan.

Metode variabel sepertinya tidak berhasil untuk saya. . Kesalahan baru saja terjadi satu baris kemudian.

Konvensi penamaan port Istio juga membutuhkan tanda hubung (lihat Persyaratan Spesifikasi Pod ).

Apakah ada solusi untuk menyetel vars di cli?

helm install --set one-two.three=10 releasename ./chartname

ini adalah ketidakkonsistenan yang nyata dan saya punya masalah juga.
Salah satu solusinya adalah menggunakan alias di dalam Requirement.yaml sehingga nama subchart Anda diubah menjadi sesuatu tanpa -, tapi ini memang merepotkan.

Saya mengalami masalah ini juga.

Saya pikir akan lebih baik jika Helm akan memberikan nilai dari diagram induk ke subchart-name menggunakan nama camelcase-ify sebagai gantinya, misalnya subchartName . Itu akan membuat konvensi nama bagan dan konvensi nama variabel agar kompatibel satu sama lain, serta mengesampingkan masalah sintaks dari atas.

Ini tidak berfungsi sama sekali di template, kode contoh ini:
{{index .Values ​​"first-key" "secondkey"}}
berfungsi di CATATAN.txt tetapi di _helpers.tpl saat mengeluarkan perintah peningkatan:
_helpers. tpl: 24 : 3: menjalankan "test.template" di

Klien: & version.Version {SemVer: "v2.6.2", GitCommit: "be3ae4ea91b2960be98c07e8f73754e67e87963c", GitTreeState: "clean"}
Server: & version.Version {SemVer: "v2.7.0", GitCommit: "08c1144f5eb3e3b636d9775617287cc26e53dba4", GitTreeState: "clean"}

Hal yang sama dengan kedua versi yang sama:
Klien: & version.Version {SemVer: "v2.6.2", GitCommit: "be3ae4ea91b2960be98c07e8f73754e67e87963c", GitTreeState: "clean"}
Server: & version.Version {SemVer: "v2.6.2", GitCommit: "be3ae4ea91b2960be98c07e8f73754e67e87963c", GitTreeState: "clean"}

kubectl adalah:
Versi Klien: version.Info {Major: "1", Minor: "9", GitVersion: "v1.9.2", GitCommit: "5fa2db2bd46ac79e5e00a4e6ed24191080aa463b", GitTreeState: "clean", BuildDate: "2018-01-18T10: 09: 24Z ", GoVersion:" go1.9.2 ", Penyusun:" gc ", Platform:" darwin / amd64 "}
Versi Server: version.Info {Mayor: "1", Minor: "8", GitVersion: "v1.8.4", GitCommit: "9befc2b8928a9426501d3bf62f72849d5cbcd5a3", GitTreeState: "clean", BuildDate: "2017-11-20T05: 17: 43Z ", GoVersion:" go1.8.3 ", Penyusun:" gc ", Platform:" linux / amd64 "}

@svidrascu , periksa apakah Anda memiliki nilai yang ditentukan dalam file Chart.yaml untuk subchart spesifik tersebut. Sepertinya mesin template tidak dapat menemukan variabel Anda

Masalah menjadi basi setelah 90 hari tidak aktif.
Tandai terbitan sebagai baru dengan /remove-lifecycle stale .
Masalah basi membusuk setelah 30 hari tambahan tidak aktif dan akhirnya ditutup.

Jika masalah ini aman untuk ditutup sekarang, lakukan dengan /close .

Kirim masukan ke sig-testing, kubernetes / test-infra dan / atau fejta .
/ siklus hidup basi

Masalah basi membusuk setelah 30 hari tidak aktif.
Tandai terbitan sebagai baru dengan /remove-lifecycle rotten .
Masalah busuk ditutup setelah 30 hari tambahan tidak aktif.

Jika masalah ini aman untuk ditutup sekarang, lakukan dengan /close .

Kirim masukan ke sig-testing, kubernetes / test-infra dan / atau fejta .
/ siklus hidup busuk
/ remove-lifecycle basi

FYI, amandemen # 4379 dilakukan di # 4400.

Ini benar-benar sampah - tidak ada setrip, tidak ada garis bawah, tidak ada huruf kapital. Bagaimana seharusnya seseorang mendefinisikan nama bagan yang lengkap untuk dua (atau lebih) komponen simular? Mengubah satu . menjadi " " sederhana saja :(

@ksemaev silakan lihat # 44 Seperti yang disebutkan sebelumnya, kami masih ingin pengguna menggunakan tanda hubung dalam nama paket mereka, tetapi mereka harus waspada terhadap "gotcha" seputar batasan tertentu dengan sistem template.

Ups, berjari gemuk tombol tutup: tertawa:

Apakah ada solusi untuk menyetel vars di cli?

helm install --set one-two.three=10 releasename ./chartname

Jika ada yang bertanya-tanya, ini tampaknya berfungsi sebagai kemudi dan penggarap v2.14.2 .

$ helm install --set one-two.three=10 --name foo stable/mariadb
$ helm get values foo
# one-two:
#  three: 10

Benar-benar tidak masuk akal untuk mengizinkan tanda hubung dalam nama bagan jika Anda tidak mengizinkan tanda hubung dalam nilai. Alasannya adalah terkadang nilai adalah nama bagan. Misalnya saya memiliki sub-chart.value yang ingin saya tentukan di file parent chart values.yaml untuk menimpa nilai anak. Saya juga ingin menggunakan nilai yang sama di template induk.

Untuk orang lain, jika Anda membutuhkan
{{-if and value1 value2 }} Anda harus melakukan ini kemudian:

{{- if .Values.loki.enabled }}
{{- if index .Values "prometheus-operator" "grafana" "enabled" }}
{{- if index .Values "prometheus-operator" "grafana" "sidecar" "datasources" "enabled" }}

Saya punya satu pertanyaan yang sedikit berbeda. Mari kita ambil contoh acak -
{{- if index .Values ​​"prometheus-operator" "grafana" "sidecar" "sumber data" "diaktifkan"}}

Pertanyaan saya adalah jika kita tidak tahu "/ prometheus-operator" bagaimana cara merujuk kunci ini menggunakan indeks. Pada dasarnya saya ingin mendapatkan kunci pertama dari .Values ​​(kunci dinamis, tidak konstan dalam kasus saya dan jadi bagaimana merujuk peta ini dengan kunci dalam indeks. Adakah yang bisa tolong beri tahu saya.

saya menggunakan / "nithin-kumar" / untuk masalah ini adalah masalah "-", mencoba karakter escape

Ada yang punya solusi saat menggunakan toYaml?
Itu gagal dengan
<toYaml>: wrong number of args for toYaml: want 1 got 5
dengan ou tanpa menggunakan fungsi index .

perbaikan apapun untuk U + 002D '-'

@ mods / pengelola

Apakah ada pembaruan tentang ini?

Jenis pembaruan apa?

Halo, masalah ini telah dibuka beberapa waktu yang lalu, tetapi masalah masih terjadi.

Panduan Helm Chart menyatakan bahwa grafik harus diberi nama dengan tanda hubung (https://helm.sh/docs/chart_best_practices/conventions/)
Tetapi pembuatan template memberi kita waktu yang sulit jika kita mencoba meletakkan tanda hubung di values.yaml untuk mencerminkan nama bagan, jika kita mencoba menggunakan nilai tanda hubung tersebut seperti ini:

{{ .Values.my-chart.name }}

Membaca postingan di atas, sepertinya jika saya masih ingin menggunakan tanda hubung dengan cara ini, saya perlu menggunakan index :

{{ index .Values "my-chart" "name" }}

Selain itu, kunci dalam values.yaml harus CamelCased (https://helm.sh/docs/chart_best_practices/values/).

Saya tidak berpikir bahwa penamaan kunci harus memengaruhi template Helm.

Apakah direncanakan untuk menormalkannya?

@bacongobbler , seperti apakah itu akan "diperbaiki", yaitu, kami akan dapat menggunakan tanda hubung tanpa menggunakan peretasan dan trik, atau apakah ini definitif "Tidak akan memperbaiki, terbiasa dengannya, bercabang atau menemukan sesuatu yang lain "

Ini adalah batasan bahasa template Go. Jika Anda menginginkan perubahan, Anda harus mengajukannya ke upstream di proyek Go: https://github.com/golang/go

Jika / ketika mereka memperbaikinya, kami akan mendapatkan dukungan untuk itu.

Dengan cara khas Google ("pengguna biasanya salah"), ini telah diberi definisi "Tidak akan diperbaiki, biasakanlah, bercabang atau temukan yang lain" https://github.com/golang/go/issues/ 23710. Saya pikir alasan yang diberikan (yang secara khusus berbicara tentang helm usecase) benar-benar valid tetapi penulis go benar-benar tidak peduli.

https://github.com/golang/go/issues/23710#issuecomment -363488583 menyebutkan dua solusi - mencegah penggunaan tanda hubung (pendekatan saat ini) atau "menulis ulang pipeline template [helm] untuk menggunakan fungsi indeks secara otomatis". Meskipun saya akui ini mungkin pekerjaan besar, bukankah mungkin memiliki praprosesor template yang dapat melakukan hal ini? Mungkin ada pengait atau sesuatu yang bisa ditulis untuk preprocess hanya ini? Sementara mengatasi hal ini jelas mungkin, sepertinya sedikit kekanak-kanakan dari penulis go dan layak diperbaiki untuk helm .

Meskipun saya mengakui, itu mungkin pekerjaan besar

Bingo.

Maksud saya, akan sangat bagus jika kita dapat membuat beberapa peningkatan kualitas hidup di area ini, tetapi ada beberapa area yang mengambil prioritas lebih tinggi di benak kita saat ini (dukungan OCI pindah ke stabil, misalnya). Dan untuk menulis pra-prosesor jelas merupakan pekerjaan besar.

Jika Anda tertarik untuk berkontribusi, silakan lihat!

Bagi saya, memiliki kejelasan tentang situasinya adalah langkah pertama yang bagus. Kami memiliki yang berikut:

  • Ini adalah batasan dari bahasa template go
  • Penulis go (saat ini) tidak berniat menambahkan kemungkinan ini , mengatakan itu akan mempersulit kode mereka. Mereka secara khusus mengatakan bahwa pengguna helm yang kesal harus terbiasa atau mengimplementasikan preprocessor template. Mereka tidak akan melakukannya.
  • Penulis helm memiliki banyak prioritas yang lebih tinggi daripada ini, karena ada penyelesaian yang relatif mudah, dan menerapkan praprosesor template hampir pasti merupakan pekerjaan besar. Ini juga hanya akan memperbaiki sedikit non-masalah, mengingat penyelesaian yang relatif mudah, sehingga kemungkinan besar tidak akan mencapai puncak tumpukan dalam waktu dekat, jika pernah.
  • Siapa pun dapat melihatnya dan, dengan waktu yang cukup dan keahlian go , tawarkan sesuatu kepada helm (orang-orang go tampaknya tidak tertarik), meskipun jelas itu perlu menjadi relatif elegan untuk utilitas praktis terbatas yang dibawa dan kemungkinan kompleksitas ditambahkan.

Jika semua orang berpikir itu cukup akurat dan adil, saya akan berhenti mengganggu semua orang! :-)

Saya akan menambahkan bahwa siapa pun yang ingin melihat ini harus mempertimbangkan untuk menulis HIP - lihat https://github.com/helm/community/blob/master/hips/hip-0001.md

Jika tidak, ya

"menulis ulang pipeline template [helm] untuk menggunakan fungsi indeks secara otomatis". Meskipun saya akui ini mungkin pekerjaan besar, bukankah mungkin memiliki praprosesor template yang dapat melakukan hal ini?

Tidak jelas bagi saya apa sebenarnya artinya ini, apakah maksud Anda Helm harus mengonversi kunci berpasangan tanda pisah menjadi kunci berpasangan unta ketika membangun peta nilainya?

@prydonius , saya benar-benar belum mulai memikirkannya pada level implementasi. Tanda hubung valid sebagai kunci JSON, begitu juga kunci YAML yang valid, jadi asumsi dari perspektif pengguna adalah tidak ada alasan bagi mereka untuk tidak berfungsi sebagai kunci di helm template. Karena templatnya adalah templat go , asumsi ini tidak berlaku. Tampaknya beberapa (banyak?) Pengguna hanya menemukan go templates dalam konteks helm , dan menganggap ini agak sewenang-wenang dan membuat frustrasi.

Saya kira satu pendekatan bisa melalui dan mengonversi nilai menjadi kasus unta, kemudian melalui templat dan melakukan hal yang sama. Tapi saya setuju infrastruktur untuk ini mungkin lebih membebani daripada nilainya. Sebenarnya penjelasan bilah samping di dokumen intro mengatakan sesuatu seperti:

Karena helm menggunakan bahasa templating go , Anda tidak dapat menggunakan tanda hubung - dalam kunci langsung di templat menggunakan mekanisme referensi normal {{ .Values.mybasekey.my-key }} (ini tidak valid). Ini adalah batasan bahasa template go , dan sesuatu yang ditolak oleh penulis go untuk didukung. Jika Anda benar-benar ingin menggunakan tanda hubung di kunci Anda, Anda dapat mengatasi batasan ini dengan menggunakan fungsi index , seperti {{ index .Values.mybasekey "my-key" ]} . Karena penyelesaian ini relatif mudah, saat ini tidak ada rencana untuk mendukung penggunaan tanda hubung pada nama kunci tanpa index dalam helm . Nama sub-bagan juga akan menjadi kunci dalam templat, jadi jika Anda menggunakan sub-bagan dengan tanda hubung pada nama dan ingin mengganti nilai, Anda perlu memberikan alias untuk nama bagan atau menggunakan penyelesaian yang disebutkan di sini ( {{ index .Values "my-chart" "name" }} ).

mungkin akan menjadi situasi terbaik. Setidaknya bagi saya, yang membuat saya frustrasi adalah kurangnya kejelasan tentang mengapa hal itu tidak berhasil, di mana masalahnya dan siapa yang dapat / harus memperbaikinya. Bagian saat ini di bagian praktik terbaik bagan agak menyesatkan. Ini bukan praktik terbaik untuk tidak menggunakannya, sebenarnya membutuhkan solusi untuk menggunakannya.

Saya tidak yakin ke mana penjelasan seperti itu, jika akurat, harus pergi.

+1 Saya setuju setidaknya kita perlu mengatakan ini dalam dokumentasi di suatu tempat.

Ini benar-benar membingungkan, tapi saya tidak melihat cara untuk membuatnya lebih mudah di Helm. Semua template helper yang kita tambahkan akan bertindak seperti fungsi dengan cara yang sama dengan index (misal Helm's toYaml , toJson set fungsi). Satu-satunya cara yang dapat saya lihat untuk memberikan lebih banyak akses langsung adalah dengan menghapus tanda hubung di kunci, tetapi seperti yang Anda sebutkan, ini adalah YAML / JSON yang valid dan kemungkinan akan lebih membingungkan. Pada akhirnya, parser template Go tidak mendukungnya dan tidak banyak yang bisa kita lakukan tanpa mem-forkingnya.

Berikut adalah contoh kerja toYaml :
{{- toYaml Values.jobs.update-es.resources | nindent 12 }} = kesalahan

{{- toYaml (index .Values "jobs" "update-es" "resources") | nindent 12 }}
Apakah halaman ini membantu?
0 / 5 - 0 peringkat