yaml - Helm 值.yaml : Use Anchors in multiline string

标签 yaml kubernetes-helm anchor helm3

设置多行字符串时,例如

mariadb:
  database: &databaseName keycloakdb
  port: &databaseServicePort 3306

extraEnv: |
  - name: DB_PORT
    value: *databaseServicePort
  - name: DB_DATABASE
    value: *databaseName

构建values.yaml时,extraEnv中的 anchor 不会扩展。它们被“按原样”传递到模板,解析器会在模板中抛出错误,因为它找不到 anchor 。 将 extraEnv 更改为数组而不是字符串不是一个选项,因为它需要传递到外部 helm 图表。

最佳答案

这实际上就是 YAML 的工作原理。 anchor 不是通用的替换机制;它们是指定相同的完整列表、映射或标量值出现在文件中多个位置的方法。您只能使用 alias node作为其他字段的完整值。

mariadb: &mariadb
  database: &databaseName keycloakdb

options: *mariadb                     # the mapping including a `database:` key
dbName: *databaseName                 # the scalar string "keycloakdb"
aString: text including *databaseName # literally the string "*databaseName"

在大多数情况下,我会避免使用 YAML anchor 。在 Helm 上下文中更是如此,您可以使用其模板系统来填充内容。

在这里,我会避免尝试在 Helm 值中提供任意大的 Kubernetes YAML block 。相反,在模板文件中设置环境变量:

# templates/deployment.yaml
env:
  - name: DB_PORT
    value: {{ .Values.mariadb.port }}
  - name: DB_DATABASE
    value: {{ .Values.mariadb.database }}
{{- with .Values.extraEnv }}
{{- toYaml . | indent 2 }}
{{- end }}

关于yaml - Helm 值.yaml : Use Anchors in multiline string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73538649/

相关文章:

nginx.conf 忽略了 nginx-ingress 配置映射片段

configuration - 存储配置和 secret

javascript - anchor 标记 jQuery Click

amazon-web-services - 使用替换的顶级参数的类型

ruby-on-rails - ruby 包括?使用 YAML 数组

.net - 使用Helm安装时如何配置nginx?

CSS anchor 颜色变化在悬停和焦点时不变

javascript - 使用javascript创建 anchor href并且链接中没有主机url

GoYAML 结构 slice

ssl - 无法在大使上启用 TLS