हेल्म टेम्पलेट मानों के अनुकूल नहीं है। श्याम संरचना
मेरे पास निम्नलिखित ingress.yaml है:
spec:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.hosts }}
- host: {{ .host }} // row 31
http:
paths:
{{- range .paths }}
- path: {{ . | quote }}
backend:
serviceName: {{ $fullName }} servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
और इस टेम्पलेट को खिलाने के लिए निम्नलिखित मूल्य:
hosts:
host: "app.example.com"
paths:
- "/api"
- "/oauth"
tls:
- secretName: "example-tls"
hosts:
- "*.app.example.com"
- "dev.example.com"
जब मैं "हेल्म इंस्टॉल" चलाता हूं तो यह विफल रहता है:
त्रुटि: UPGRADE विफल: टेम्पलेट: टेम्पलेट्स / ingress.yaml: 31: 15: <.host पर "टेम्पलेट्स / ingress.yaml" निष्पादित: प्रकार इंटरफ़ेस में फ़ील्ड होस्ट का मूल्यांकन नहीं कर सकता {}।
तो मेरे लिए ऐसा लगता है कि मेजबानों की एक सूची होनी चाहिए, न कि एक शब्दकोष ( रेंज निर्देश के कारण)। इसलिए मैं इसे परिवर्तित करता हूं:
hosts:
- host: "app.example.com"
paths:
- "/api"
- "/oauth"
लेकिन इस मामले में मुझे:
चेतावनी: मेजबानों के लिए गंतव्य एक मेज है। गैर-तालिका मान को अनदेखा करना [मानचित्र [मेजबान: app.example.com पथ: [/ api / oauth]]
और इसके अलावा के रूप में एक ही त्रुटि।
इसे कैसे काम करना है?
अद्यतन १
मान:
ingress:
enabled: true
rules:
- host: c1.app.example.com
paths:
- /api
- /oauth
- host: c2.app.example.com
paths:
- /api
- /oauth
tls:
- secretName: "example-tls"
hosts:
- "*.app.example.com"
- "dev.example.com"
साँचा:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
secretName: {{ .secretName }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.rules }}
- host: {{ .host | quote }}
http:
paths:
{{- range .paths }}
- path: {{ . | quote }}
backend:
serviceName: {{ $fullName }} servicePort: {{ $svcPort }}
{{- end }}
{{- end }}
{{- end }}
अद्यतन २
मैं समझ गया कि समस्या कोड में नहीं बल्कि कमांड लाइन में थी। मैं सरणी के बजाय स्ट्रिंग के साथ खिलाया।
पतवार टेम्पलेट ...
मैं यह पता लगाने की कोशिश करूंगा कि कैसे कई मूल्य प्रदान करें और इसे यहां अपडेट करें।
अद्यतन 3
मैंने मूल्यों से डेटा मिटा दिया:
ingress:
enabled: false
rules:
- host:
tls:
- secretName:
hosts: []
जवाब
टेम्पलेट की तलाश है .Values.ingress.hosts
, जबकि आपके प्रदर्शित मूल्यों में कोई ingress
उपसर्ग नहीं है । और जैसा कि range
ऑपरेटर का उपयोग किया जा रहा है, हमारे पास शब्दकोश की एक सूची होनी चाहिए ।
इसके अलावा, ए करने से पहले helm install
, यह helm template
सुनिश्चित करने के लिए अच्छा होगा कि यम की परिभाषाओं को सही तरीके से प्रस्तुत किया गया है।
नीचे दी गई सामग्री को ध्यान में रखते हुए values.yaml
:
---
ingress:
hosts:
-
host: app1.example.com
paths:
- /api
- /oauth
-
host: app2.example.com
paths:
- /api1
- /authz
tls:
- hosts:
- "*.app.example.com"
- "dev.example.com"
secretName: "example-tls"
रनिंग helm template
में आदेश परिणाम (मैं परिभाषित किया है serviceName
haproxy के रूप में, और servicePort
उदाहरण के लिए 8080 के रूप में):
spec:
tls:
- hosts:
- "*.app.example.com"
- "dev.example.com"
secretName: example-tls
rules:
- host: app1.example.com // row 31
http:
paths:
- path: "/api"
backend:
serviceName: haproxy
servicePort: 8080
- path: "/oauth"
backend:
serviceName: haproxy
servicePort: 8080
- host: app2.example.com // row 31
# similar output for app2.example.com
मेरे ही प्रश्न का उत्तर दे रहा हूं।
समस्या इंग्रेस टेम्पलेट संरचना और कमांड लाइन तर्कों के बेमेल में थी जो मैंने परमेस ओवरराइड के लिए प्रदान की है।
यह कमांड लाइन के तर्कों का उचित योग है :
helm upgrade <some other options here>
--values ./values.yaml
--set ingress.enabled=True
--set ingress.tls[0].hosts[0]=app.example.com
--set ingress.tls[0].secretName=example-tls
--set ingress.rules[0].host=app.example.com
यह मानों को आबाद करता है ।
ingress:
enabled: false
rules:
- host:
tls:
- secretName:
hosts: []
प्रवेश टेम्पलेट के लिए :
spec:
{{- if .Values.ingress.tls }}
tls:
{{- range .Values.ingress.tls }}
- secretName: {{ .secretName }}
hosts:
{{- range .hosts }}
- {{ . | quote }}
{{- end }}
{{- end }}
{{- end }}
rules:
{{- range .Values.ingress.rules }}
- host: {{ .host | quote }}
http:
paths:
- path: /api
backend:
serviceName: {{ $fullName }} servicePort: {{ $svcPort }}
{{- end }}
{{- end }}