Свести словарь со шлемом - PullRequest
0 голосов
/ 18 апреля 2020

Есть ли способ выровнять словарь с помощью helm? Я хочу предоставить приложению переменные среды из диаграммы, сгладив конфигурацию YAML, расположенную в values.yaml. Конфиг может выглядеть так. (Не актуально)

config:
 server:
  port: 3333
 other:
  setting:
    name: test

И я хотел бы предоставить переменные окружения в виде

- name: CONFIG_SERVER_PORT
  value: 3333
- name: CONFIG_OTHER_SETTING_NAME
  value: test

Я рассмотрел вопрос об использовании карт конфигурации Kubernetes, но это означало бы развертывание немного разных экземпляров приложения со случайным выпустить имена, чтобы конфиг не был перезаписан. Эта библиотека https://github.com/jeremywohl/flatten предоставляет способ сглаживания map[string]interface{} с помощью разделителей. Есть ли способ предоставить пользовательский канал для helm, который использует библиотеку, или другой способ сгладить конфигурацию?

Ответы [ 3 ]

1 голос
/ 18 апреля 2020

Наверное, нет. Вы могли бы реализовать это в чистом Gotpl с некоторыми функциями Sprig и множеством локальных переменных, но ... нет. Вы не можете добавить пользовательские функции в Helm, не перекомпилировав его. Просто используйте родной формат напрямую.

0 голосов
/ 18 апреля 2020

Я не знаю ничего подобного встроенному. Sprig предоставляет большинство полезных функций для шаблонов руля, но dict функции просто охватывают примитивы.

Вы можете define назвать шаблон , который занимается бизнесом и рекурсивно указывает конфигурационный файл / карту. Затем include шаблон при необходимости:

{{- define "recurseFlattenMap" -}}
{{- $map := first . -}}
{{- $label := last . -}}
{{- range $key, $val := $map -}}
  {{- $sublabel := list $label $key | join "_" | upper -}}
  {{- if kindOf $val | eq "map" -}}
    {{- list $val $sublabel | include "recurseFlattenMap" -}}
  {{- else -}}
- name: {{ $sublabel | quote }}
  value: {{ $val | quote }}
{{ end -}}
{{- end -}}
{{- end -}}

Передача данных конфигурации немного сложна из-за добавления параметра label и шаблонам передается только одна область .

env: {{ list .Values.config "CONFIG" | include "recurseFlattenMap" | nindent 2 }}   

С примерами значений:

config:
  server:
    port: 3333
  first: astr
  other:
    setting:
      name: test

Результаты в

$ helm template . 
---
# Source: so61280873/templates/config.yaml
env: 
  - name: "CONFIG_FIRST" 
    value: "astr"
  - name: "CONFIG_OTHER_SETTING_NAME" 
    value: "test"
  - name: "CONFIG_SERVER_PORT" 
    value: "3333"
0 голосов
/ 18 апреля 2020

Вопрос, который вы задаете, возможен. нет источников поблизости. но попробуйте что-то вроде этого.

// chart

apiVersion: apps/v1beta1
kind: Deployment
spec:
  template:
    spec:
      containers:
        - name: {{ template "name" . }}          
          command: [{{ range $i, $e := .Values.container.command }}{{ if $i }}, {{$e|quote}}{{else}}{{$e|quote}}{{end}}{{end}}]          
          env:
          {{- range .Values.container.env }}
            - name: {{ .name }}
              value: "{{ .value }}"
          {{- end }}


// values

container:  
  command: ["cmd", "sub_cmd", "sub_sub_cmd"]    
  env:
      - name: CONFIG_SERVER_PORT
      value: 3333
      - name: CONFIG_OTHER_SETTING_NAME
      value: test

...