使用regexp在`helm helper template`中提取字符串

时间:2019-01-14 05:32:38

标签: regex kubernetes-helm go-templates

我正在尝试提取从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 :(得分:0)

要从URL获取主机,您需要使用Lookahead and Lookbehind。请参阅example

不幸的是,您不能用掌舵人编写这种类型的正则表达式。您将收到以下错误:

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

来自chart template guide

  

在Helm模板中,最好使用 include 而不是 template ,以便可以更好地处理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

答案 1 :(得分:-1)

xsd

可用于从\/\/(.*): 中提取字符串localhost的正则表达式

enter image description here