https://github.com/helm/helm/pull/2648 memungkinkan penghapusan kunci dengan menyetel null
nilai dalam file values.yaml
. Namun itu tidak berfungsi untuk nilai bertingkat, misalnya:
web:
livenessProbe:
httpGet: null
exec:
command:
- curl
- -f
- http://localhost:8080/api/v1/info
Tidak akan menghapus web.livenessProbe.httpGet
dari nilai aslinya, melainkan hanya mengganti nilai dengan null
dan mencetak peringatan:
2019/01/18 11:30:07 Warning: Merging destination map for chart 'concourse'. Cannot overwrite table item 'httpGet', with non table value: map[path:/api/v1/info port:atc]
Ironisnya, di atas adalah varian kecil pada contoh yang diberikan di dokumen, yang saya cukup yakin tidak benar-benar melakukan apa yang diklaimnya: https://docs.helm.sh/chart_template_guide/#deleting-a-default-key
Saya menduga bahwa karena rendering template tampaknya tidak banyak membedakan antara nilai null dan nilai yang tidak ditentukan, maka peringatan ini diabaikan dan tidak banyak berpengaruh.
Output dari helm version
:
Client: &version.Version{SemVer:"v2.12.1", GitCommit:"02a47c7249b1fc6d8fd3b94e6b4babf9d818144e", GitTreeState:"clean"}
Server: &version.Version{SemVer:"v2.12.1", GitCommit:"02a47c7249b1fc6d8fd3b94e6b4babf9d818144e", GitTreeState:"clean"}
Output dari kubectl version
:
Client Version: version.Info{Major:"1", Minor:"13", GitVersion:"v1.13.1", GitCommit:"eec55b9ba98609a46fee712359c7b5b365bdd920", GitTreeState:"clean", BuildDate:"2018-12-13T10:39:04Z", GoVersion:"go1.11.2", Compiler:"gc", Platform:"linux/amd64"}
Server Version: version.Info{Major:"1", Minor:"11+", GitVersion:"v1.11.5-eks-6bad6d", GitCommit:"6bad6d9c768dc0864dab48a11653aa53b5a47043", GitTreeState:"clean", BuildDate:"2018-12-06T23:13:14Z", GoVersion:"go1.10.3", Compiler:"gc", Platform:"linux/amd64"}
Penyedia / Platform Cloud (AKS, GKE, Minikube, dll.):
EKS
@scottrigby , apakah Anda kebetulan ingin melihat yang ini?
Menandai sebagai pertanyaan / dukungan hingga dipastikan bahwa ini memang bug menurut penulis aslinya.
Saya melihat ini juga di 2.12.3. Saya melihat ketika mencoba mengatur nilai ke null melalui -f dan --set. Apa pun itu, itu hanya menetapkannya ke "null" sebagai string (tanpa tanda kutip) daripada menghapus nilai default.
Situasi saya:
> helm get values grafana
admin:
existingSecret: ""
chownDataImage:
pullPolicy: null
repository: null
tag: null
<...>
> helm upgrade grafana stable/grafana --tls --reuse-values --set chownDataImage.pullPolicy=null
<output indicating it works>
> helm get values grafana
admin:
existingSecret: ""
chownDataImage:
pullPolicy: null
repository: null
tag: null
<...>
Use case adalah untuk mengatur ulang nilai-nilai ini untuk menggunakan default dari template alih-alih default yang sekarang terjebak di kemudi.
stabil / filebeat
Dengan null
atau nil
Saya melihat hal yang sama ... kunci tidak dihapus ... itu ditimpa sebagai null/nil
tetapi tidak dihapus dan ketika Anda mengganti itu dengan kunci yang berbeda itu menyebabkan masalah:
---values.yml in the Chart
output.file:
path: /var/log/foo.log
`` yaml
--- override saya
output.elasticsearch:
tuan rumah:
- ' http: // localhost : 9200'
output.file: null
or
```yaml
---my overrides
output:
elasticsearch:
host:
- 'http://localhost:9200'
file: null
atau
---my overrides
output:
elasticsearch:
hosts:
- 'http://localhost:9200'
output.file: null
» k get secret filebeat -o jsonpath="{.data.filebeat\.yml}" | base64 -D
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
prospectors:
path: ${path.config}/prospectors.d/*.yml
reload.enabled: false
filebeat.prospectors:
- enabled: true
fields:
apenv: dev
app: kubernetes
log_category: kubernetes
fields_under_root: true
paths:
- /var/log/*.log
- /var/log/messages
- /var/log/syslog
type: log
- containers.ids:
- '*'
fields:
apenv: dev
app: kubernetes
log_category: kubernetes
fields_under_root: true
processors:
- add_kubernetes_metadata:
in_cluster: true
- drop_event:
when:
equals:
kubernetes.container.name: filebeat
type: docker
http.enabled: true
http.port: 5066
output:
elasticsearch:
hosts:
- http://localhost9200
output.file: null
processors:
- add_cloud_metadata: null
kesalahan pod sebagai:
Exiting: error unpacking config data: more than one namespace configured accessing 'output' (source:'filebeat.yml')
Saya juga mengalami masalah yang sama persis dengan bagan filebeat.
@cdenneen Anda dapat menggunakan output file secara khusus dengan config.output.file.enabled=false
.
Saya mengalami masalah di mana saya ingin menggunakan kunci inputs
untuk pemukulan file tetapi tidak dapat menghapus kunci prospectors
.
Nilai yang ada:
config:
filebeat.prospectors:
- type: log
enabled: true
paths:
- /var/log/*.log
- /var/log/messages
- /var/log/syslog
Penimpaan saya: --set config.filebeat.prospectors=null
Hasil: (config digunakan untuk mengatur nilai Rahasia)
filebeat:
prospectors: null
Saya juga mengalami masalah ini dengan stable/kibana
dan stable/filebeat
kunci akan default ke nilai grafik bahkan ketika !!null
ditentukan.
@aeijdenberg yakin PR Anda hanya membutuhkan label yang diperbarui untuk ditinjau
Hai @bacongobbler, maaf, saya melewatkan pertanyaan Anda di https://github.com/helm/helm/issues/5184#issuecomment -456138448. Saya dapat memverifikasi bahwa ini adalah bug. Dalam # 2648 saya benar-benar harus menambahkan tes yang cocok dengan contoh yang didokumentasikan. Tadinya saya bermaksud untuk kembali ke ini, tetapi # 5185 tampak menjanjikan! 👏 akan merespon di sana
Hai @scottby . Bolehkah saya tahu rilis mana yang akan menyertakan perbaikan # 5185? Saya baru saja mengalami masalah ini ketika mencoba menghapus definisi sumber daya pada bagan istio.
Ini seharusnya di 2.14.2 - tapi saya tidak bisa membuatnya bekerja.
Saya mengikuti contoh yang sangat mirip dengan yang ada di bagian atas masalah - satu-satunya perbedaan yang dapat saya lihat adalah bahwa saya mencoba menghapus nilai yang ditetapkan dalam subchart (dalam kasus saya, logstash).
Saya telah mencoba:
null
, ~
dan {}
di values.yaml grafik utama, atau pada baris perintah. Dalam kedua kasus, "template helm" menunjukkan bahwa nilai aslinya masih ada (yaitu, saya masih mendapatkan set httpGet) - dan ini konsisten dengan apa yang saya lihat untuk "pemasangan helm"Apakah saya salah paham dan ini tidak berhasil menjadi 2.14.2 - atau apakah masih ada masalah?
(Bagan menunjukkan ini: demo.zip )
Patch itu dipilih menjadi 2.14.2 menurut catatan rilis sehingga harus tersedia.
Dalam hal ini, saya tidak yakin bug ini telah diperbaiki - haruskah dibuka kembali atau muncul masalah baru? Dapatkah orang lain melihat bagan yang saya lampirkan di atas dan melihat apakah mereka melihatnya berbeda?
@ cc-stjm @bacongobbler - Saya dapat mereproduksi masalah tersebut, dan menurut saya tes ini menunjukkannya:
func TestSubchartCoaleseWithNullValue(t *testing.T) {
v, err := CoalesceValues(&chart.Chart{
Metadata: &chart.Metadata{Name: "demo"},
Dependencies: []*chart.Chart{
{
Metadata: &chart.Metadata{Name: "logstash"},
Values: &chart.Config{
Raw: `livenessProbe: {httpGet: {path: "/", port: monitor}}`,
},
},
},
Values: &chart.Config{
Raw: `logstash: {livenessProbe: {httpGet: null, exec: "/bin/true"}}`,
},
}, &chart.Config{})
if err != nil {
t.Errorf("Failed with %s", err)
}
result := v.AsMap()
expected := map[string]interface{}{
"logstash": map[string]interface{}{
"global": map[string]interface{}{},
"livenessProbe": map[string]interface{}{
"exec": "/bin/true",
},
},
}
if !reflect.DeepEqual(result, expected) {
t.Errorf("got %+v, expected %+v", result, expected)
}
}
Masalahnya, sejauh yang saya tahu, adalah bahwa CoalesceValues()
menghasilkan lebih dari satu panggilan ke fungsi dasar yang menggabungkan nilai:
https://github.com/helm/helm/blob/e04fa72f6f211cae68c362f9b7c62f06dc51493e/pkg/chartutil/values.go#L164 -L180
yaitu baris 173 di atas dipanggil dengan httpGet
disetel ke null
, tetapi nilai yang dikembalikannya telah menghapus kunci itu dari peta (seperti yang diinginkan). Tapi kemudian output itu diteruskan untuk kedua kalinya sebagai input ke set penggabungan ke-2 (baris 179), dan kemudian karena kunci tidak lagi ada, defaultnya ke nilai dalam bagan.
Sayangnya saya tidak mungkin memiliki waktu yang tersedia dalam waktu dekat untuk melangkah lebih jauh - saya telah berganti peran dan saat ini saya tidak menggunakan Helm, dan jawaban tentang cara menyelesaikannya tidak jelas bagi saya. Semoga hal di atas bermanfaat dalam penyelesaiannya.
Sebenarnya, saya baru saja meningkatkan versi 2.14.0 => 2.14.2. Kunci null
ed tidak hanya masih ada, tetapi juga berisi nilai sebelumnya. Perilaku sebelumnya baru saja membuatnya menjadi nol, jadi saya yakin ini sebenarnya telah mengalami kemunduran.
@aeijdenberg dapatkah Anda memeriksa pertanyaan @sgillespie ? Jika ada regresi, maka mungkin lebih aman untuk membatalkan PR itu kecuali Anda dapat menentukan perbaikannya. Jika Anda tidak dapat membantu, mungkin lebih aman untuk mengembalikan komitmen Anda dan kembali ke titik awal 1. Beri tahu saya cara Anda ingin melanjutkan.
@bacongobbler , meskipun saya belum menguji 2.14.0 secara gamblang, @sgillespie apa yang cocok dengan perilaku yang saya sebutkan di https://github.com/helm/helm/issues/5184#issuecomment-517059748 . Sayangnya saya pikir ini adalah kasus pengujian unit yang lulus, tetapi ujung ke ujung gagal - karena masing-masing komponen digunakan secara seri, yang membuat pelepasan kunci di tahap sebelumnya membuatnya tidak berpengaruh di tahap selanjutnya (dan itulah sebabnya nilai asli datang melalui).
Saya setuju ini regresi, meskipun mundur juga merupakan regresi bagi siapa pun yang mengandalkan perilaku baru.
Saya telah mencoba tambalan yang relatif kecil dengan cepat yang menurut saya akan mengurangi dampaknya (dan memperbaiki pengujian yang saya tambahkan di atas) di # 6146 - Maaf, kami melakukan kesalahan ini pada upaya terakhir.
Ini mungkin telah diperbaiki di https://github.com/helm/helm/pull/6080. PR tersebut memperbaiki kasus di mana coalesceDeps dipanggil dua kali. Bisakah seseorang mengkonfirmasi dengan master?
Jika demikian, dapatkah # 6146 ditutup, atau apakah ini mencoba untuk memperbaiki masalah terpisah? Saya mencoba memahami kepalaku di sekitar ruang masalah di sini tetapi tidak jelas apa yang coba dipecahkan oleh PR ini. Maaf.
Ini memang tampaknya memperbaiki masalah. Tes naif cepat:
Nilai sub-bagan:
prop:
nested:
val: true
Nilai diagram induk:
sub:
prop:
nested: null
Output seperti yang diharapkan adalah {}
Hai,
Saya menggunakan helm 2.15.0
dan saya masih menemui masalah ini.
Diberikan subchart dengan nilai:
securityContext:
runAsUser: 65534
fsGroup: 65534
Dimana nilainya digunakan dengan toYaml
Dan dalam nilai bagan induk:
sub:
securityContext:
runAsUser: null
Maka keluaran sebenarnya adalah:
securityContext:
runAsUser: 65534
fsGroup: 65534
Padahal seharusnya:
securityContext:
fsGroup: 65534
Tidak mencoba menghujani parade Anda, tapi saya masih melihat ini dengan helm v3.0.1
version.BuildInfo {Versi: "v3.0.1", GitCommit: "7c22ef9ce89e0ebeb7125ba2ebf7d421f3e82ffa", GitTreeState: "clean", GoVersion: "go1.13.4"}
Ketika mencoba menginstal stable / ignite saya harus menghapus nilai, tetapi helm tampaknya hanya mengatur nilai ke null / nil, menyebabkan k8s terhenti dalam langkah validasi.
Untuk mereproduksi, simpan ini sebagai bug5184-ignite.yaml
(untuk mengganti nilai dari default grafik: https://github.com/helm/charts/blob/master/stable/ignite/values.yaml):
persistence:
enabled: true # <-- without this, the keys in question are ignored
persistenceVolume:
provisionerParameters:
type: null # <-- I want to unset this key
walVolume:
provisionerParameters:
type: null # <-- I want to unset this key
Kemudian gunakan sebagai file nilai untuk instalasi ignite:
helm install runtimedb stable/ignite --version 1.0.1 --values bug5184-ignite.yaml --debug --dry-run | less
Hasil yang saya dapatkan adalah pesan kesalahan ini, menunjukkan bahwa nilai yang ingin saya hapus telah disetel ke nil
:
install.go:148: [debug] Original chart version: ""
install.go:165: [debug] CHART PATH: /home/creinig/.cache/helm/repository/ignite-1.0.1.tgz
Error: unable to build kubernetes objects from release manifest: error validating "": error validating data: unknown object type "nil" in StorageClass.parameters.type
helm.go:76: [debug] error validating "": error validating data: unknown object type "nil" in StorageClass.parameters.type
helm.sh/helm/v3/pkg/kube.scrubValidationError
/home/circleci/helm.sh/helm/pkg/kube/client.go:520
helm.sh/helm/v3/pkg/kube.(*Client).Build
/home/circleci/helm.sh/helm/pkg/kube/client.go:135
helm.sh/helm/v3/pkg/action.(*Install).Run
/home/circleci/helm.sh/helm/pkg/action/install.go:229
[...]
Apa yang saya juga coba:
null
melalui --set
Ketika hanya menetapkan satu nilai menjadi null
melalui baris perintah, sementara pada saat yang sama tetap menonaktifkan persistensi ignite (sehingga template penyimpanan kelas tidak dibuat dan parameter yang dimaksud diabaikan) ...
helm install myignite stable/ignite --version 1.0.1 --set persistence.persistenceVolume.provisionerParameters.type=null --debug --dry-run | less
... ada keluaran debug yang tepat, bukan kesalahan, tetapi ini menunjukkan bahwa nilainya hanya disetel ke null
(komentar ditambahkan oleh saya):
NAME: myignite
LAST DEPLOYED: Tue Dec 10 09:43:40 2019
NAMESPACE: default
STATUS: pending-install
REVISION: 1
TEST SUITE: None
USER-SUPPLIED VALUES:
persistence:
persistenceVolume:
provisionerParameters:
type: null # <-- Set via the command line
COMPUTED VALUES:
affinity: {}
dataStorage:
config: ""
env:
IGNITE_QUIET: "false"
JVM_OPTS: -Djava.net.preferIPv4Stack=true
OPTION_LIBS: ignite-kubernetes,ignite-rest-http
fullnameOverride: ""
image:
pullPolicy: IfNotPresent
repository: apacheignite/ignite
tag: 2.7.6
nameOverride: ""
nodeSelector: {}
peerClassLoadingEnabled: false
persistence:
enabled: false
persistenceVolume:
provisioner: kubernetes.io/aws-ebs
provisionerParameters:
fsType: ext4
type: null # <-- Set to null instead of removed
size: 8Gi
walVolume:
provisioner: kubernetes.io/aws-ebs
provisionerParameters:
fsType: ext4
type: gp2 # <-- This is what the default looks like
size: 8Gi
rbac:
create: true
replicaCount: 2
resources: {}
serviceAccount:
create: true
name: null
tolerations: []
Saya mengalami masalah yang sama persis menggunakan 3.0.1
, mungkin ada baiknya untuk membuka kembali masalah ini?
Setelah berpindah dari helm v2.16.1 ke v3.0.2. Saya mengalami masalah ini dengan pengumuman tidak disetel dan batas cpu.
Saya baru saja mengalami masalah ini di 2.14.1
dan 3.0.2
. Ada pembaruan tentang ini?
Dalam kasus di mana saya tahu bagan helm hanya menggunakan dan benar / salah jika tes, saya mengganti nilai dengan nilai non-tabel seperti 0. Saya mendapatkan banyak peringatan seperti Overwriting table item 'x', with non table value: 0
, tapi setidaknya saya mendapatkan solusi jika saya tidak ingin menyertakan bait. Preferensi saya adalah agar null berfungsi, tetapi ini adalah solusi yang buruk.
Saya telah menetapkan nilai ke nol (dan membiarkannya nol di file nilai saya) dan mengabaikan daftar panjang peringatan tabel yang OK untuk saat ini tetapi saya benar-benar hanya ingin melakukan pembersihan satu kali dari nilai lama yang salah yang disimpan di kubernetes. Sampai bug penghapusan nilai ini diperbaiki, apakah ada cara manual untuk mengedit nilai pada penerapan yang ada tanpa waktu henti?
Mengalami masalah yang sama dengan probe liveness
dan readiness
.
Menghapus Kunci Default dari panduan template tidak berfungsi.
Silakan coba # 7743. Sepertinya komitmen yang dibuat pada Helm 2 tidak dialihkan ke Helm 3, itulah sebabnya banyak pengguna akan melihat perilaku ini di sana.
Masih melihat masalah ini dengan helm 2.16.3 tetapi hanya jika ada requirement.yaml mencantumkan subchart sebagai dependency.
boo adalah subchart dan foo adalah diagram induk:
vibu@item-ax35755:~/work$ cat boo/values.yaml
object:
fromSubchart:
hello: from boo
vibu@item-ax35755:~/work$ cat foo/values.yaml
boo:
object:
fromParent:
hello: from foo
fromSubchart: null
vibu@item-ax35755:~/work$ cat boo/templates/test.yaml
{{ toYaml .Values.object }}
vibu@item-ax35755:~/work$ cat foo/requirements.yaml
dependencies:
- name: boo
repository: file://../boo
version: 0.1.0
vibu@item-ax35755:~/work/foo$ helm version -c
Client: &version.Version{SemVer:"v2.16.3", GitCommit:"1ee0254c86d4ed6887327dabed7aa7da29d7eb0d", GitTreeState:"clean"}
vibu@item-ax35755:~/work/foo$ helm dep up
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "incubator" chart repository
...Successfully got an update from the "stable" chart repository
Update Complete.
Saving 1 charts
Deleting outdated charts
vibu@item-ax35755:~/work/foo$ helm template .
---
# Source: foo/charts/boo/templates/test.yaml
fromParent:
hello: from foo
fromSubchart:
hello: from boo
vibu@item-ax35755:~/work/foo$ mv requirements.yaml{,.bak}
vibu@item-ax35755:~/work/foo$ helm template .
---
# Source: foo/charts/boo/templates/test.yaml
fromParent:
hello: from foo
Kedua grafik di sini:
@bacongobbler apakah ada niat untuk membahas hal ini lebih lanjut di 2.x?
Kami juga mengalami masalah ini (mirip dengan yang dijelaskan oleh @vbuciuc) dengan tidak berfungsi "null" untuk penggantian nilai ketika subchart terdaftar sebagai dependensi di requirement.yaml dengan 3.2.x. Versi sebelumnya (3.1.x) berfungsi seperti yang diharapkan.
@bacongobbler @technosophos Saya mengalami masalah ini juga dengan Helm 3.3.4
, dapatkah Anda membuka kembali;
Saya dapat mengonfirmasi bahwa ini berfungsi di 3.1.2
dan berhenti berfungsi setelah 3.2.x
seperti yang disebutkan @paleg . Untuk saat ini, tampaknya solusi @ tuzla0autopilot4 untuk menyetelnya ke nilai non-peta seperti false
akan menghasilkan perilaku yang diinginkan tetapi memberikan peringatan keluaran saat hal itu dilakukan.
@ Chili-Man, Saya baru saja mencoba dengan 3.1.3
dan sepertinya tidak berhasil. Ini akan berlaku dengan null
tetapi saya mendapat peringatan dan tidak melakukan apa-apa. Dengan hal lain ( false
, 0
, []
) ia menolak (misalnya,)
`` `` coalesce.go: 196: peringatan: tidak dapat menimpa tabel dengan non tabel untuk sumber daya (peta [permintaan: peta [cpu: 250m memori: 256Mi]])
Kesalahan: UPGRADE GAGAL: nilai tidak memenuhi spesifikasi skema di bagan berikut:
postgresql:
(or what the type that I try that is not a dict/hash). With
3.3.4 I get just silence and it does nothing with
null` dan juga yang lainnya menolak untuk diterapkan. Paling menyebalkan ...Saya masih mengalami masalah ini di 3.4.2.
Masalahnya masih ada di 3.4.2, tetapi hanya dalam situasi tertentu.
Saya memiliki grafik dengan beberapa sub-grafik.
Saat meletakkan default ke dalam sub bagan, nilai null
override tidak berfungsi. Jika Anda memindahkan nilai yang sama ke dalam nilai bagan induk, ini berfungsi seperti yang diharapkan.
Ini hanya dapat direproduksi dengan sub-bagan. Saat Anda memasukkannya ke dalam satu bagan (datar), semuanya berfungsi dengan baik.
Saya mengalami masalah yang sama dengan 3.4.2 saat menggunakan subchart (seperti yang dijelaskan oleh @BohdanKalytka di atas).
Dalam kasus saya, saya ingin menimpa securityContext saat menggunakan bagan helm ElasticSearch di kluster OpenShift.
Apakah masalah ini akan dibuka kembali, atau haruskah kita membuat yang baru?
Mengangkat # 9136
Komentar yang paling membantu
Kami juga mengalami masalah ini (mirip dengan yang dijelaskan oleh @vbuciuc) dengan tidak berfungsi "null" untuk penggantian nilai ketika subchart terdaftar sebagai dependensi di requirement.yaml dengan 3.2.x. Versi sebelumnya (3.1.x) berfungsi seperti yang diharapkan.