有人知道使用环境变量在values.yaml中引用名称空间的方法吗?
例如,映射秘密
secret:
# RabbitMQ password
V_RABBIT_PASSWORD:
secretKeyRef:
name: jx-staging-rabbit //<--- this needs to work for staging and prod
key: rabbitmq-password
这是Deployment.yaml中的部分
- name: {{ $name | quote }}
valueFrom:
secretKeyRef:
name: {{ $value.secretKeyRef.name | quote }} //<-- trying different combinations here
key: {{ $value.secretKeyRef.key | quote }}
尝试:
${NAMESPACE}-{{ $value.secretKeyRef.name | quote }}
和
{{ template "namespace" . }}-{{ $value.secretKeyRef.name | quote }}
谢谢
答案 0 :(得分:1)
我想这是在您使用jenkins-x部署的应用程序的掌舵图中。 Helm具有一个Release.Namespace值,您可以访问。因此,在deployment.yaml中,您可以使用{{ .Release.Namespace }}
,尽管jx-staging
也是该发行版的名称,因此{{ .Release.Name}}
可以在此处同样适用。我希望这看起来像:
valueFrom:
secretKeyRef:
name: {{ .Release.Name }}-{{ .Values.rabbitmq.name }}
key: rabbitmq-password
其中{{ .Values.rabbitmq.name }}
等于rabbitmq
或您在requirements.yaml中称为rabbitmq的任何地方。 (Here's这样的示例图表适用于Postgres,它也使用Rabbit,但是以不同的方式访问Rabbit密码。)
如果您正确加载了机密但仍然遇到密码问题,请确保设置了一个明确的密码值,否则您可能会碰到https://github.com/helm/charts/issues/5167
在{values.yaml中使用{{ .Release.Name }}
是行不通的,但是我不确定是否可以在Deployment.yaml中使用它。
(如果您确实确实需要从values.yaml访问功能,则需要在values.yaml中输入一个字符串值,然后在pass it through the tpl
function within the template中输入。)