l oop через строки простого текстового файла, переданные опцией --set-file helm, затем анализируют каждую строку по столбцу - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть файл cron, и я пытаюсь передать его через --set-file. Я хочу l oop через строки файла cron и создать для каждой строки новый объект Kubernetes вида CronJob.

Я использовал его так helm instal ... --set-file crons.file=mycron

, где файл mycron выглядит как типичный файл cron:

0,10,20,30,40,50 * * * * /usr/bin/cmd1 opta optb
35 2-23/3 * * * /usr/bin/cmd2

Я не могу перебрать строки этого простого простого текста:

{{- range $indx, $line := .Values.crons.file }}
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: hello
spec:
  schedule: {{ regexFind "[^/]+$" "$line"}}
  jobTemplate:
    spec:
      template:
        spec:
          containers:
          - name: cron-{{ $indx }}
            image: busybox
            args: 
            - /bin/sh
            - -c
            - {{ regexFind "[^/]+$" "$line"}}
          restartPolicy: OnFailure
{{- end  }}

Есть ли такая функция, как fromYaml, которая создает простой текстовый файл итерируется range функцией?

1 Ответ

3 голосов
/ 11 апреля 2020

Библиотека поддержки Sprig включает функции для разбиения и объединения строк в списки и для управления списками в целом . Если splitList файл на новых строках, вы получите список строк. Вы можете снова splitList каждую строку в пробелах получить отдельные части времени и команд из отдельных строк cron.

{{/* Iterate over individual lines in the string */}}
{{- range $line := splitList "\n" .Values.crons.file -}}

{{/* Break the line into words */}}
{{- $words := splitList " " $line -}}

{{/* Reconstitute the schedule and command parts from the words */}}
{{- $time := slice $words 0 5 | join " " -}}
{{- $command := slice $words 5 -}}

---
schedule: {{ $time }}
command: {{- $command | toYaml | nindent 2}}
{{ end -}}
...