Цикл управления с конкретными значениями

Я хочу создать несколько шаблонов KafkaConnector из значений.yaml, но с конкретной картой.

экземплярvalues.yaml:

Definition:
  Information:
    - db.user:
        name: aaa
        key: bbb
    - db.secret:
        name: aaa
        key: ccc
    - db.host: hosntame
    - db.port: 1234
  Information1:
    - db.user:
        name: zzz
        key: yyy
    - db.secret:
        name: zzz
        key: vvv
    - db.host: hosntame1
    - db.port: 1235

Файл Connector.yaml

{{- range .Value.Definition }}
---
apiVersion: {{ $.Values.apiVersion }}
kind: KafkaConnector
metadata:
  name: {{ include "common.names.fullname" $ }}-{{ .name }}    
spec:
  class: need
  config: 
  {{ range $k, $v := .Value }}
  {{ $k }}:
    {{ if eq  $k "db.secret" }}
    ${secrets:{{ $v.name }}/{{ $v.value }}}
    {{ else }}
    {{ $v.value }}
  {{ end }}
{{ end }}
{{ end }}

В конце концов, мне хотелось бы получить что-то вроде этого:

apiVersion: apps/v1
kind: KafkaConnector
metadata:
  name: connect-Information
spec:
  class: need
  config:
    db.user: bbb
    db.secret: ${secrets:aaa/ccc}
    db.hostname: hostname
    db.port: 1234

apiVersion: apps/v1
kind: KafkaConnector
metadata:
  name: connect-Information1
spec:
  class: need
  config:
    db.user: yyy
    db.secret: ${secrets:zzz/vvv}
    db.hostname: hostname1
    db.port: 1235

Мне удалось выполнить цикл один раз только с информацией, но я не могу выполнить цикл по двум ключевым данным/информации1

потому что мне нужно сделать две петли.

Зачем вам использовать Information, Information1 (и т. д.) в виде списков, а Definition в качестве словаря? Должно быть наоборот, чтобы быть эффективным и соответствовать вашим потребностям.

Alexander Pletnev 19.06.2024 07:39

это всего лишь модель, я могу ее изменить, мне просто хотелось бы успешно выполнить цикл и получить окончательный шаблон

esefe sgrgrz 19.06.2024 09:39
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
0
2
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы решить эту проблему, вам необходимо организовать ваши значения в подходящую структуру данных. Затем вам следует использовать диапазон для соответствующего перебора этого списка или словаря.

Вот решение:

значения.yaml

Definition:
  Information:
    db.user:
      name: aaa
      key: bbb
    db.secret:
      name: aaa
      key: ccc
    db.host: hosntame
    db.port: 1234
  Information1:
    db.user:
      name: zzz
      key: yyy
    db.secret:
      name: zzz
      key: vvv
    db.host: hosntame1
    db.port: 1235

Обратите внимание, что в values.yaml под Definition.Information вместо исходной структуры list используется словарь. Это изменение было сделано потому, что исходная структура имела неоднородные ключи, что делало ненужным использование списка. Использование dictionary — лучший подход.

соединитель.yaml

{{- range $infoKey, $infoVal := .Values.Definition }}
---
apiVersion: {{ $.Values.apiVersion }}
kind: KafkaConnector
metadata:
  name: test-{{ $infoKey }}    
spec:
  class: need
  config:  
    {{- range $k, $v := $infoVal }}
    {{- if eq $k "db.secret" }}
    {{ $k }}: ${secrets: {{ $v.name }}/{{ $v.key }}}
    {{- else if eq $k "db.user" }}
    {{ $k }}: {{ $v.key }}
    {{- else }}
    {{ $k }}: {{ $v }}
    {{- end }}
    {{- end }}
{{- end }}

Кроме того, вам необходимо помнить об использовании символа «-» внутри {{- }}, чтобы правильно удалить ненужные символы пробелов.

выход

---
apiVersion: 
kind: KafkaConnector
metadata:
  name: test-Information    
spec:
  class: need
  config:
    db.host: hosntame
    db.port: 1234
    db.secret: ${secrets: aaa/ccc}
    db.user: bbb
---
apiVersion: 
kind: KafkaConnector
metadata:
  name: test-Information1    
spec:
  class: need
  config:
    db.host: hosntame1
    db.port: 1235
    db.secret: ${secrets: zzz/vvv}
    db.user: yyy

ps: helm doc: Помимо списков и кортежей, range можно использовать для перебора коллекций, у которых есть ключ и значение (например, карта или словарь).

Другие вопросы по теме