使用带有 helm 值的 ansible jinja2 模板时出错

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

我正在使用 ansible jinja2 模板为 helm 图表创建值。我收到错误

template error while templating string: unexpected 'end of statement block'.
这种情况发生在 helm 使用值文件之后。 这是示例格式,而不是原始格式。

ansible vars 文件:

apartment:
  size: "2000"
  floor: "10"
  numbers:
    - 1
    - 2
    - 3

Ansible j2 模板:

floorconfig:
    enabled: true
    aptnumbers: {% for item in apartment.numbers +%}
        - {{ item }}
          {%- endfor %}

所需输出:

floorconfig:
    enabled: true
    aptnumbers: 
        - 1
        - 2
        - 3 

任务:

- name: Deploy version of helm chart
  local_action:
    module: kubernetes.core.helm
    host: "https://{{ inventory_hostname }}:6443"
    kubeconfig: "/etc/ansible/{{ inventory_hostname }}/etc/kubernetes/admin.conf"
    name: kube-apt
    chart_ref: apts/apt-stack
    chart_version: 26.0.0
    wait: True
    update_repo_cache: True
    wait_timeout: "10m"
    state: present
    values: "{{ lookup('template', 'templates/my_Values.yml.j2') | from_yaml }}"

输出错误:

FAILED! => {"msg": "An unhandled exception occurred while running the lookup plugin 'template'. Error was a <class 'ansible.errors.AnsibleError'>, original message: template error while templating string: unexpected 'end of statement block'.
ansible kubernetes-helm ansible-template
1个回答
1
投票

在我看来,你让这个过于复杂了。

  1. 您正在循环列表以在看似 yaml 模板的内容中重新创建完全相同的元素。为什么不直接使用列表?
  2. 您将通过一个模板来加载 yaml 值,您可以在其中定义所需的变量。

您可以完全删除模板并简化任务中的值声明,例如:

- name: Deploy version of helm chart
  kubernetes.core.helm:
    host: "https://{{ inventory_hostname }}:6443"
    kubeconfig: "/etc/ansible/{{ inventory_hostname }}/etc/kubernetes/admin.conf"
    name: kube-apt
    chart_ref: apts/apt-stack
    chart_version: 26.0.0
    wait: True
    update_repo_cache: True
    wait_timeout: "10m"
    state: present
    values:
      floorconfig:
        enabled: true
        aptnumbers: "{{ apartment.numbers }}"
  delegate_to: localhost

如果你真的想浏览一个单独的文件,只需将其设为另一个 var 文件,在那里定义整个字典,加载它并使用上面值中的字典。

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