根据范围查找舵值

问题描述 投票:0回答:2

我正在创建一个具有多个容器的舵图。

我的值文件如下所示:

# environment variables
rabbitmqhost : "rabbitmq"
db-host : "mongo"
db-username : "root"
db-password : "root"


deployments: 
  - name: "service1"
    image: "Some-repo"
    pullPolicy: IfNotPresent
    tag: "latest"
    env: 
      rabbitmqhost 


  - name: "api"
    image: "Some-repo"
    pullPolicy: IfNotPresent
    tag: "latest"
    env: 
      rabbitmqhost 
      db-host 
      db-username 
      db-password 


我的部署.yaml 如下所示:

{{ range $.Values.deployments}}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ .name }}
  labels:
    app: {{ .name }}

spec:
  replicas: 1
  selector:
    matchLabels:
      app: {{ .name }}
  template:
     spec:
        containers:
        - name: {{.name}}
          image: "{{ .image }}:{{ .tag }}"
          imagePullPolicy: Always
          env: {{ range $key, $val := .env}}
            - name: "{{ $key }}"
              value: "{{ $.Values.$key }}"
            {{- end}}

{{- end}}

我发现这不起作用,我因为

value: "{{ $.Values.$key }}"
不评估。 有没有办法动态评估 $key ? 或者我是否需要以不同的方式构建它来实现这一目标?

kubernetes-helm
2个回答
0
投票

仅当

$map.key
是已知的固定字符串时,
key
语法才有效,但您可以将标准模板
index
函数与变量字符串一起使用

value: "{{ index $.Values $key }}"

0
投票

我通过扩展逻辑以使用“if has”解决了这个问题

在我的值文件中,我定义了这样的环境变量:

# environment variables
env:
  rabbitmqhost : "rabbitmq"
  db-host : "mongo"
  db-username : "root"
  db-password : "root"

deployments: 
  - name: "service1"
    image: "Some-repo"
    pullPolicy: IfNotPresent
    tag: "latest"
    env: 
      - rabbitmqhost 


  - name: "api"
    image: "Some-repo"
    pullPolicy: IfNotPresent
    tag: "latest"
    env: 
      - rabbitmqhost 
      - db-host 
      - db-username 
      - db-password 

在部署模板中我将其更改如下:

{{ range $deployment := $.Values.deployments}}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: {{ $deployment.name }}
  labels:
    app: {{ $deployment.name }}

spec:
  replicas: 1
  selector:
    matchLabels:
      app: {{ $deployment.name }}
  template:
     spec:
        containers:
        - name: {{$deployment.name}}
          image: "{{ $deployment.image }}:{{ $deployment.tag }}"
          imagePullPolicy: Always
          env: {{ range $key, $val := $.Values.env}}
            {{ if has $key  $deployment.env }}
            - name: "{{ $key }}"
              value: "{{ $val }}"
            {{- end}}

          {{- end}}

{{- end}}

© www.soinside.com 2019 - 2024. All rights reserved.