使用具有 helm 值的 ansible jinja2 模板时出错
Error using ansible jinja2 template with helm values
我正在使用 ansible jinja2 模板为 helm chart 创建值。我收到一个错误
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'.
你把这个 IMO 搞得太复杂了。
- 您正在遍历列表以在看似 yaml 模板的内容中重新创建完全相同的元素。为什么不直接使用列表?
- 您正在通过模板加载回 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 文件,在那里定义整个字典,加载它并在上面的值中使用字典。
我正在使用 ansible jinja2 模板为 helm chart 创建值。我收到一个错误
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'.
你把这个 IMO 搞得太复杂了。
- 您正在遍历列表以在看似 yaml 模板的内容中重新创建完全相同的元素。为什么不直接使用列表?
- 您正在通过模板加载回 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 文件,在那里定义整个字典,加载它并在上面的值中使用字典。