【问题标题】:Jinja2 nested variblesJinja2 嵌套变量
【发布时间】:2021-03-08 15:41:49
【问题描述】:

下面是我的 jinja2 模板文件和用于填充它的变量。但是,我只想在aditional_keys = true 时包含一个新部分。这可能吗?

我的变量

  - { name: 'container1', version: '1.0.0.0', port: '', registry_path: 'container1', replicas: '1', namespace: 'general', aditional_keys: 'false'}  
  - { name: 'container2', version: '3.6.14.1', port: '8080', registry_path: 'container2', replicas: '1', namespace: 'general', aditional_keys: 'true'}   

我的模板

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 }}      
        image: registry.com/{{ item.registry_path }}:{{ item.version }}
        imagePullPolicy: Always
        name: {{ item.name }}
        ports:
        - containerPort: {{ item.port }}
          protocol: TCP

我尝试添加这个,但我显然没有正确调用变量

        {% if item.additional_keys == 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
        {% else %}
        {% endif %}

【问题讨论】:

    标签: ansible jinja2 ansible-template


    【解决方案1】:

    首先,literal compare to boolean values 是您可能想要遵循的 ansible-lint 规则之一。

    现在你上面的例子有两个真正的问题。

    1. 您的变量定义中有错字 (aditional_keys),而您在模板中拼写正确 (additional_keys)
    2. 您的变量被指定为字符串 ('false'),而您期望的是布尔值 (false)。同时,在ansible中经常发生正确的布尔值可以在解析时转换为字符串(例如命令行上的extra_vars)。为了克服这个问题,当您不完全信任来源时,良好的做法是使用 bool 过滤器系统地将值转换为布尔值。

    一旦您将 var 文件中的变量名称和布尔定义修复为 additional_keys: false,模板中的以下条件将确保您不会再遇到这种麻烦:

    {% if item.additional_keys | bool %}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-14
      相关资源
      最近更新 更多