简体   繁体   中英

lookup configmap value in helm template

Say I have a configmap like this, and I want to get the value(12301) of version 123v1 in map_a, what is the correct way?

apiVersion: v1
kind: ConfigMap
metadata:
  name: myconfig
  namespace: default
data:
  test.yml: |
    map_a:
      "123v1":
        "Version": 12301
        "Type": "abc"
......

Here is my attempts:

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-config
data:
{{- $configmap := (lookup "v1" "ConfigMap" "default" "myconfig") }}
{{- if $configmap }}
  {{- $models := get $configmap.data "test.yml" }}
  version: {{ $models.map_a.123v1.Version }}
{{- end }}

$ helm template .
install.go:173: [debug] Original chart version: ""
install.go:190: [debug] CHART PATH: /root/test-lookup


Error: parse error at (test-lookup/templates/config.yaml:9): ".123v"
helm.go:88: [debug] parse error at (test-lookup/templates/config.yaml:9): ".123v"

The pipe symbol at the end of a line in YAML signifies that any indented text that follows should be interpreted as a multi-line scalar value. See the YAML spec . This is also mentioned in the helm doc |-

{{ $models }} is a value behind a pipe symbol of myconfig>data>test.yml .

So, the value of the expression {{ $models }} is a string instead of a map. In other words, {{ $models. map_a }} {{ $models. map_a }} is an illegal operation.

The real value of {{ $models }} is a multi-line string, the string content is:

map_a:
  "123v1":
    "Version": 12301
    "Type": "abc"

This can work here, of course the result is not what you want:

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-config
data:
  {{- $configmap := (lookup "v1" "ConfigMap" "default" "myconfig") }}
  {{- if $configmap }}
  {{- $models := get $configmap.data "test.yml" }}
  version: {{ $models | quote }}
  {{- end }}

output:

apiVersion: v1
data:
  version: |
    map_a:
      "123v1":
        "Version": 12301
        "Type": "abc"
kind: ConfigMap
metadata:
  annotations:
...

So in order to achieve your purpose, you have to operate {{ $models }} in accordance with the method of operating strings.

config.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: test-config
data:
  {{- $configmap := (lookup "v1" "ConfigMap" "default" "myconfig") }}
  {{- if $configmap }}
  {{- $models := get $configmap.data "test.yml" }}
  {{- range ( split "\n" $models) }}
  {{- if ( contains "Version" .) }}
  version: {{ (split ":" .)._1 | trim | quote }}
  {{- end }}
  {{- end }}
  {{- end }}

output:

apiVersion: v1
data:
  version: "12301"
kind: ConfigMap
metadata:
  annotations:
...

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM