Как я могу итеративно создавать модули из списка, используя Helm? - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь создать несколько стручков из цикла yaml в helm.если я запускаю с --debug --dry-run, выходные данные соответствуют моим ожиданиям, но когда я фактически развертываюсь в кластере, присутствует только последняя итерация цикла.

некоторые yaml для вас:

{{ if .Values.componentTests }}
{{- range .Values.componentTests }}
apiVersion: v1
kind: Pod
metadata:
  name: {{ . }}
  labels:
    app: {{ . }}
    chart: {{ $.Chart.Name }}-{{ $.Chart.Version | replace "+" "_" }}
    release: {{ $.Release.Name }}
    heritage: {{ $.Release.Service }}
spec:
{{ toYaml $.Values.global.podSpec | indent 2 }}
  restartPolicy: Never
  containers:
  - name: {{ . }}
    ports:
      - containerPort: 3000
    image: 123456789012.dkr.ecr.eu-west-1.amazonaws.com/{{ . }}:latest
    imagePullPolicy: Always
    command: ["sleep"]
    args: ["100d"]
    resources:
      requests:
        memory: 2000Mi
        cpu: 500m
{{- end }}
{{ end }}

при запуске helm upgrade --install --set componentTests="{a,b,c}" --debug --dry-run

я получаю следующий вывод:

# Source: <path-to-file>.yaml
apiVersion: v1
kind: Pod
metadata:
  name: a
  labels:
    app: a
    chart: integrationtests-0.0.1
    release: funny-ferret
    heritage: Tiller
spec: 
  restartPolicy: Never
  containers:
  - name: content-tests
    ports:
      - containerPort: 3000
    image: 123456789012.dkr.ecr.eu-west-1.amazonaws.com/a:latest
    imagePullPolicy: Always
    command: ["sleep"]
    args: ["100d"]
    resources:
      requests:
        memory: 2000Mi
        cpu: 500m
apiVersion: v1
kind: Pod
metadata:
  name: b
  labels:
    app: b
    chart: integrationtests-0.0.1
    release: funny-ferret
    heritage: Tiller
spec:  
  restartPolicy: Never
  containers:
  - name: b
    ports:
      - containerPort: 3000
    image: 123456789012.dkr.ecr.eu-west-1.amazonaws.com/b:latest
    imagePullPolicy: Always
    command: ["sleep"]
    args: ["100d"]
    resources:
      requests:
        memory: 2000Mi
        cpu: 500m
apiVersion: v1
kind: Pod
metadata:
  name: c
  labels:
    app: users-tests
    chart: integrationtests-0.0.1
    release: funny-ferret
    heritage: Tiller
spec:
  restartPolicy: Never
  containers:
  - name: c
    ports:
      - containerPort: 3000
    image: 123456789012.dkr.ecr.eu-west-1.amazonaws.com/c:latest
    imagePullPolicy: Always
    command: ["sleep"]
    args: ["100d"]
    resources:
      requests:
        memory: 2000Mi
        cpu: 500m
---

(некоторые части были отредактированы / удалены из-за чувствительности / неактуальности)

который выглядит мне так, как будто я делаю то, что хочу, а именно: создаю модуль для a, другой для b и третий для c.

, однако, при фактической установке этого в кластерЯ всегда получаю только стручок, соответствующий последнему элементу в списке.(в данном случае c) это почти как если бы они перезаписывали друг друга, но, учитывая, что у них разные имена, я не думаю, что они должны?даже при работе с --debug, но не --dry-run вывод говорит мне, что у меня должно быть 3 модуля, но при использовании kubectl get pods я вижу только один.

Как я могу итеративно создавать модули из списка, используя Helm?

1 Ответ

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

нашел это!

так что очевидно, что helm использует --- в качестве разделителя между спецификациями pods / services / whatHaveYou.

, если несколько раз указывать одни и те же поля в одной диаграмме, допустимо, он будет использовать последнийуказанное значение для любого данного поля.Чтобы избежать перезаписи значений и вместо этого создать несколько модулей, просто добавьте разделитель в конце цикла:

{{ if .Values.componentTests }}
{{- range .Values.componentTests }}
apiVersion: v1
kind: Pod
metadata:
  name: {{ . }}
  labels:
    app: {{ . }}
    chart: {{ $.Chart.Name }}-{{ $.Chart.Version | replace "+" "_" }}
    release: {{ $.Release.Name }}
    heritage: {{ $.Release.Service }}
spec:
{{ toYaml $.Values.global.podSpec | indent 2 }}
  restartPolicy: Never
  containers:
  - name: {{ . }}
    ports:
      - containerPort: 3000
    image: 123456789012.dkr.ecr.eu-west-1.amazonaws.com/{{ . }}:latest
    imagePullPolicy: Always
    command: ["sleep"]
    args: ["100d"]
    resources:
      requests:
        memory: 2000Mi
        cpu: 500m
---
{{- end }}
{{ end }}
...