使用环境变量

时间:2018-09-17 13:39:58

标签: kubernetes jenkins--x

有人知道使用环境变量在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 }}

谢谢

1 个答案:

答案 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中输入。)