Извлечение строки в `helm helper template` с помощью regexp - PullRequest
0 голосов
/ 14 января 2019

Я пытаюсь извлечь определенную строку, полученную из values.yaml в _helper.tpl. В основном я пытаюсь извлечь строку localhost из mongodb://localhost:30010

По моему _helper.tpl

{{- define "myservice.mongodbcache.bindip" -}}
{{- regexFind "\/\.(.*):" ( .Values.myservice.cachedb.uri | toString ) -}}
{{- end -}}

мой values.yml файл

myservice:
  cachedb:
    uri: "mongodb://localhost:30010"

и в моем configmap я хочу использовать его следующим образом

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-myservice-configmap
  namespace: {{ .Release.Namespace }}
data:
  myservice.mongodbcache.bind.ip: {{ template "myservice.mongodbcache.bindip" }}

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

Error: parse error in "tree-helm/templates/_helpers.tpl": template: tree-helm/templates/_helpers.tpl:35: invalid syntax

Строка 35 с regexFind

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Чтобы получить хост из URL, вам нужно будет использовать Lookahead и Lookbehind . Пожалуйста, смотрите пример

К сожалению, вы не можете написать этот тип регулярных выражений в helm. Вы получите следующую ошибку:

Error: rendering template failed: regexp: Compile(`(?<=://)(.*?)(?=:)`): error parsing regexp: invalid or unsupported Perl syntax: `(?<`

Из руководство по шаблону диаграммы :

Считается предпочтительным использовать include over template в шаблонах Helm просто для того, чтобы выходное форматирование могло лучше обрабатываться для документов YAML.

Работая с include , вы можете получить имя хоста или ip следующим образом:

configmap.yaml

apiVersion: v1
kind: ConfigMap
metadata:
  name: {{ .Release.Name }}-myservice-configmap
  namespace: {{ .Release.Namespace }}
data:
  myservice.mongodbcache.bind.ip: {{- include "myservice.mongodbcache.bindip" . -}}

_helpers.tpl

{{- define "myservice.mongodbcache.bindip" -}}
{{- $match := .Values.myservice.cachedb.uri | toString | regexFind "//.*:" -}}
{{- $match | trimAll ":" | trimAll "/" -}}
{{- end -}}

У руды даже все в одной строке.

Результат

$ helm install --debug --dry-run .
....
# Source: mychart/templates/configmap.yaml
apiVersion: v1
kind: ConfigMap
metadata:
  name: billowing-boxer-myservice-configmap
  namespace: default
data:
  myservice.mongodbcache.bind.ip:localhost
0 голосов
/ 14 января 2019
\/\/(.*):

Регулярное выражение, которое вы можете использовать для извлечения строки localhost из mongodb://localhost:30010

enter image description here

...