You need to enable JavaScript to run this app. Jinja2模板如何根据容器aditional_keys变量条件渲染配置段
优惠活动
大模型
产品
解决方案
定价
更多

Jinja2模板如何根据容器aditional_keys变量条件渲染配置段

需求可行性说明

这个需求完全可以实现,你之前的判断逻辑失效主要是三个可直接定位的问题,修复后就能正常生效:

  • 键名拼写不匹配
    你在容器变量定义中使用的字段名是aditional_keys(少一个字母d,为拼写变体),但在判断逻辑里写的是item.additional_keys(正确拼写,多一个d),两边字段名对不上,导致条件判断永远取不到对应值。
  • 变量类型不匹配
    你YAML中定义的aditional_keys值是带引号的字符串形式('true'/'false'),不是Jinja2识别的原生布尔值,直接和布尔类型的true做等值判断永远不成立。
  • 冗余空逻辑块
    你写的{% else %}块没有任何逻辑内容,完全可以省略,避免无意义的模板渲染开销。

正确实现方案

对齐三处规则即可正常运行:

  1. 统一字段名拼写(可以选择保留原变量的拼写写法,也可以修正为标准拼写,只要模板判断逻辑和变量定义的键名一致即可)
  2. 兼容字符串类型的布尔值判断,避免因为大小写、引号问题导致判断失效
  3. 保证新增的env字段和容器配置下的其他字段(envFrom、image等)保持相同YAML缩进,避免生成不合法的K8s配置

可直接使用的完整模板(匹配你现有变量的拼写)

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: {{ item.name }}
    environment: {{ location }}_{{ env }}
  name: {{ item.name }}
  namespace: "{{ item.namespace }}"
spec:
  replicas: {{ item.replicas }}
  selector:
    matchLabels:
      app: {{ item.name }}
      environment: {{ location }}_{{ env }}
  template:
    metadata:
      labels:
        app: {{ item.name }}
        environment: {{ location }}_{{ env }}
    spec:
      containers:
      - envFrom:
        - configMapRef:
            name: {{ item.name }}
        # 新增的条件判断逻辑:缩进与同级容器字段保持一致
        {% if item.aditional_keys | lower == 'true' %}
        env:
        - name: PRIVATE_KEY
          valueFrom:
            secretKeyRef:
              key: id_{{ item.name }}_rsa
              name: id-{{ item.name }}-rsa-priv
              optional: false
        - name: PUBLIC_KEY
          valueFrom:
            secretKeyRef:
              key: id_{{ item.name }}.pub
              name: id-{{ item.name }}-rsa-pub
              optional: false
        {% endif %}
        image: registry.com/{{ item.registry_path }}:{{ item.version }}
        imagePullPolicy: Always
        name: {{ item.name }}
        ports:
        - containerPort: {{ item.port }}
          protocol: TCP

渲染效果说明

  • 当容器的aditional_keys值为'false'(对应定义里的container1),渲染后的Deployment配置中不会出现env字段段,保持原有配置不变
  • 当容器的aditional_keys值为'true'(对应定义里的container2),会自动插入两个从Secret加载密钥的环境变量配置,和其他容器配置合并生效

内容的提问来源于stack exchange,提问作者Ydrab

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.31 10:06:02