Вставить многострочную строку json в шаблон helm для кодирования base64 - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь вставить многострочную строку json в шаблон helm для кодировки base64, необходимой для секрета Kubernetes.

Цели:

  • значение штурвала вводится в строку json
  • многострочная строка json должна быть закодирована в base64 с использованием b64enc

myfile1.json не работает, но myfile2.json работает. Я предпочитаю не помещать весь файл JSON в values.yaml.

apiVersion: v1
kind: Secret
metadata:
  name: {{ template "mychart.fullname" . }}
  labels:
    app: {{ template "mychart.name" . }}
    chart: {{ template "mychart.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
type: Opaque
data:
  myfile.json: {{ |-
    {
      "item1": {
          "name": "{{ .Values.item1.name }}"
      },
      "item2": {
      }
    } | b64enc }}
  myfile2.json: {{ .Values.myfile2 | b64enc }}

Ответы [ 2 ]

0 голосов
/ 15 января 2019

Я нашел решение. Вы можете использовать функцию tpl в файле json для рендеринга шаблона.

apiVersion: v1
kind: Secret
metadata:
  name: {{ template "mychart.fullname" . }}
  labels:
    app: {{ template "mychart.name" . }}
    chart: {{ template "mychart.chart" . }}
    release: {{ .Release.Name }}
    heritage: {{ .Release.Service }}
type: Opaque
data:
  myfile.json: {{ tpl(.Files.Get "myfile.json") . | b64enc }}

myfile.json

{
  "item1": {
    "name": "{{ .Values.item1.name }}"
  },
  "item2": {
  }
}
0 голосов
/ 11 января 2019

Мое впечатление (и другие, кажется, тоже его поразили) - вы должны пойти на компромисс либо в том, что он многострочный, либо в том, что он не помещен в файл. Я думаю, проблема в том, что вам нужно использовать инструкцию yaml (|-), чтобы получить несколько строк, и это является частью самого шаблона, поэтому вы не можете получить «выходные данные» таким образом, чтобы потом подача в b64enc.

Если бы это был ConfigMap, вам не нужно было бы вводить в b64enc, поэтому это было бы так просто:

  myfile.json: |
    {
      "item1": {
          "name": "{{ .Values.item1.name }}"
      },
      "item2": {
      }
    }

Или, если бы вы пошли на компромисс в отношении однострочного подхода, это могло бы быть:

myfile.json: {{ tpl ("{ 'item1': { 'name': '{{ .Values.item1.name }}' }, 'item2': { } }") . | toJson | b64enc }}

Если бы он исходил из файла, вы могли бы использовать {{ tpl (.Files.Get "files/myfile.json") . | b64enc | quote }}

Другим вариантом будет поместить весь JSON в файл значений

Или в вашем файле значений может быть запись myfile, например:

myfile:
  item1:
    name: "bob"
  item2:
    name: "fred"

А затем используйте его с myfile.json: {{ .Values.myfile | toJson | b64enc }}

...