Рулевые диаграммы вложенных циклов - PullRequest
0 голосов
/ 05 июня 2018

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

{{- range .Values.services }}
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: myapp-{{ . }}
spec:
  replicas: {{ .replicaCount }}
  template:
    metadata:
      labels:
        app: myapp-{{ . }}
        chart: myapp-{{ $.Values.cluster }}-{{ $.Values.environment }}
    spec:
      containers:
      - name: myapp-{{ . }}
        image: {{ $.Values.containerRegistry }}/myapp-{{ . }}:latest
        ports:
        - containerPort: {{ .targetPort }}
        env:
  {{- with .environmentVariables }}
  {{ indent 10 }}
  {{- end }}
      imagePullSecrets:
       - name: myregistry
{{- end }}

для 2 моих служб.В values.yaml я получил

environment: dev

cluster: sandbox

ingress:
  enabled: true

containerRegistry: myapp.io

services:
- backend:
    port: 80
    targetPort: 8080
    replicaCount: 1
    environmentVariables:
      - name: SOME_VAR
        value: "hello"
- web:
    port: 80
    targetPort: 8080
    replicaCount: 1
    environmentVariables:
      - name: SOME_VAR
        value: "hello"

... но вывод неправильно форматируется

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: myapp-map[backend:map[replicaCount:1 targetPort:8080 environmentVariables:[map[name:SOME_VAR value:hello] port:80]]

вместо

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: myapp-web
(...)

и другой конфигурации

apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: myapp-backend
(...)

какие функции я могу использовать или какую-то другую структуру данных?Ни одна из ссылок (т.е. .environmentVariables не работает правильно)

1 Ответ

0 голосов
/ 06 июня 2018

Я думаю, вам следует пересмотреть способ структурирования данных, это будет работать лучше:

  services:
  - name: backend
    settings:
      port: 80
      targetPort: 8080
      replicaCount: 1
      environmentVariables:
        - name: SOME_VAR
          value: "hello"

  - name: web
    settings:
      port: 80
      targetPort: 8080
      replicaCount: 1
      environmentVariables:
        - name: SOME_VAR
          value: "hello"

И ваше развертывание будет выглядеть так:

{{- range .Values.services }}
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: myapp-{{ .name }}
spec:
  replicas: {{ .settings.replicaCount }}
  template:
    metadata:
      labels:
        app: myapp-{{ .name }}
    spec:
      containers:
      - name: myapp-{{ .name }}
        image: {{ $.Values.containerRegistry }}/myapp-{{ .name }}:latest
        ports:
        - containerPort: {{ .settings.targetPort }}
        env:
  {{- with .settings.environmentVariables }}
  {{ toYaml . | trim | indent 6 }}
  {{- end }}
      imagePullSecrets:
       - name: myregistry
{{- end }}

фактически создаст дваразвертывания, добавив разделитель ---.

...