我正在尝试实现一个入口 helm 模板,将当前应用程序版本编码到 url 中。这将允许用户通过向他们提供不同版本的应用程序来进行软迁移。
例子:
mydomain.org/1.0/applicationpath
mydomain.org/1.1/applicationpath
mydomain.org/2.0/applicationpath
Run Code Online (Sandbox Code Playgroud)
为了防止在每次更新的入口中手动配置它,我更喜欢使用正则表达式自动确定 major.minor 版本。该应用程序根据 Semver 2.0.0 进行了修订,因此应该使用像 \d+.\d+ 这样的模式。
我试过这样的事情:
apiVersion: extensions/v1beta1
kind: Ingress
spec:
backend:
serviceName: {{ .Release.Name }}-my-srv
servicePort: 80
rules:
- host: {{ .Values.app.ingress.host }}
http:
paths:
- path: /{{ .Chart.AppVersion | regex \d+.\d+ }}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我找不到正则表达式的函数。是否可以选择使用 helm 模板来实现这一点?
phe*_*mer 14
就在这里。然而,不幸的是它没有记录。
Helm 使用sprig库为模板提供附加功能。未记录的是许多已添加到代码中的 sprig 函数(参考问题 #84),正则表达式函数就是其中的一些。你可以在这里找到这些函数:https : //github.com/Masterminds/sprig/blob/master/regex.go
这样你就可以做到 {{ .Chart.AppVersion | regexFind "\d+\.\d+" }}
(请注意,我还在\
之前添加了一个以.
将其转义.
以匹配任何字符,这似乎不是您的意图)
不是您的用例,而是可能对使用regex*
sprig 中的函数感兴趣的其他人的一项注意事项,不幸的是,sprig 所有者将主题字符串作为所有函数的第二个参数,并且某些函数在之后还有其他参数它(例如regexReplaceAll
函数)。之所以会出现这个问题,是因为在管道中使用函数时,管道中前一个元素的结果成为该函数的最后一个参数。所以这不起作用: "foo subject string" | regexReplaceAll "foo" "bar"
,因为它将被bar
视为要操作的字符串,并foo subject string
作为替换任何出现的字符串foo
(在本例中不会有任何出现)。
归档时间: |
|
查看次数: |
11119 次 |
最近记录: |