Helm模板中如何缩短重复的表达式

47次阅读
没有评论

问题描述

正在编写一个外部密钥的Helm模板。这些密钥存储在AWS Secrets Manager中,并且以”dev”或”prod”为前缀。命名空间用于区分环境,但不仅限于”dev”或”prod” — “prod”和”prod-phi”应该使用”prod”密钥,而其他所有环境应该使用”dev”密钥。
为了实现这一点,用户在模板中使用了一个非常长的表达式,你可以在这里看到它作为密钥名称的前缀:

- secretKey: RdsDataUsername
  remoteRef:
    key: {{ or (eq .Release.Namespace "prod") (eq .Release.Namespace "prod-phi") | ternary "prod" "dev" }}/rds/data/primary
  property: username

用户在文件中多次重复使用了这个表达式”{{ or (eq .Release.Namespace “prod”) (eq .Release.Namespace “prod-phi”) | ternary “prod” “dev” }}”,这影响了可读性。
用户想知道是否有一种方法可以在文件中使用这个表达式设置一个变量,然后引用该变量。
类似于:

variables:
  prefix: {{ or (eq .Release.Namespace "prod") (eq .Release.Namespace "prod-phi") | ternary "prod" "dev" }}
spec:
  data:
    - secretKey: RdsDataUsername
      remoteRef:
        key: {{ $prefix }}/rds/data/primary
      property: username

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在Helm模板中,你可以使用Helm的模板函数来设置一个变量,然后在整个文件中引用该变量。
以下是如何使用Helm模板函数来缩短重复的表达式的步骤:
1. 在Helm模板文件的顶部定义一个变量,使用Helm模板函数来计算表达式的值。
2. 在需要使用表达式的地方,使用变量来代替表达式。
下面是一个示例Helm模板文件:

{{- $prefix := or (eq .Release.Namespace "prod") (eq .Release.Namespace "prod-phi") | ternary "prod" "dev" -}}
spec:
  data:
    - secretKey: RdsDataUsername
      remoteRef:
        key: {{ $prefix }}/rds/data/primary
      property: username

在上面的示例中,我们使用$prefix变量来存储表达式的值。通过在模板文件的顶部使用{{- $prefix := ... -}}语法,我们可以将表达式的计算结果赋值给$prefix变量。然后,在需要使用表达式的地方,我们使用{{ $prefix }}来引用该变量。
这样,我们就可以在整个文件中使用{{ $prefix }}来代替重复的表达式,提高了文件的可读性。

方案2

使用Helm的模板函数可以帮助缩短重复的表达式,提高文件的可读性。
另一种方法是使用Helm的模板函数来缩短重复的表达式。
以下是如何使用Helm模板函数来缩短重复的表达式的步骤:
1. 在Helm模板文件的顶部定义一个自定义函数,使用Helm模板函数来计算表达式的值。
2. 在需要使用表达式的地方,使用自定义函数来代替表达式。
下面是一个示例Helm模板文件:

{{- define "getPrefix" -}}
  {{ or (eq .Release.Namespace "prod") (eq .Release.Namespace "prod-phi") | ternary "prod" "dev" }}
{{- end -}}
spec:
  data:
    - secretKey: RdsDataUsername
      remoteRef:
        key: {{ template "getPrefix" . }}/rds/data/primary
      property: username

在上面的示例中,我们定义了一个名为”getPrefix”的自定义函数,该函数计算表达式的值。通过使用{{- define "getPrefix" -}} ... {{- end -}}语法,我们可以定义一个名为”getPrefix”的自定义函数,并在其中使用Helm模板函数来计算表达式的值。
然后,在需要使用表达式的地方,我们使用{{ template "getPrefix" . }}来调用自定义函数,并将其结果作为表达式的值。
这样,我们就可以在整个文件中使用自定义函数来代替重复的表达式,提高了文件的可读性。

总结

在Helm模板中,你可以使用Helm的模板函数或自定义函数来缩短重复的表达式。通过设置一个变量或定义一个自定义函数来计算表达式的值,并在需要使用表达式的地方引用该变量或调用该函数,可以提高文件的可读性。

正文完