Ansible Jinja2 模板 - 删除尾随空格
Ansible Jinja2 template - Remove trailing whitespace
我正在尝试使用 Ansible Jinja 模板将一个 ansible 保险库文件加载到 k8 configmap YAML 文件中,但遇到在 YAML 文件内容末尾添加尾随空格的问题。这导致如下错误:
Vault format unhexlify error: Odd-length string
我使用的 ansible 模板示例是:
剧本main.yml -
- name: display multiple files
shell: cat /tmp/test.yml
register: test
Ansible Jinja 模板
apiVersion: v1
data:
test.yml: |-
{{ test.stdout.splitlines()|indent(4, false)|trim|replace(' ','') }}
kind: ConfigMap
metadata:
name: test
namespace: test-namespace
test.yml 示例:
$ANSIBLE_VAULT;1.1;AES256
62313365396662343061393464336163383764373764613633653634306231386433626436623361
6134333665353966363534333632666535333761666131620a663537646436643839616531643561
63396265333966386166373632626539326166353965363262633030333630313338646335303630
3438626666666137650a353638643435666633633964366338633066623234616432373231333331
6564
从 Jinja 模板创建的输出 YAML 如下
apiVersion: v1
data:
test.yml:
$ANSIBLE_VAULT;1.1;AES256
62313365396662343061393464336163383764373764613633653634306231386433626436623361
6134333665353966363534333632666535333761666131620a663537646436643839616531643561
63396265333966386166373632626539326166353965363262633030333630313338646335303630
3438626666666137650a353638643435666633633964366338633066623234616432373231333331
6564
kind: ConfigMap
metadata:
name: test
namespace: test-namespace
能否让我知道我的 ansible 模板文件中可能缺少什么来修复上述尾随空格问题。
I am trying to load a Ansible Vault encrypted file into a configmap using jinja2 templating
那你解错题了;让 to_yaml
过滤器为您完成所有这些转义,而不是试图通过它来进行 jinja。
- command: cat /tmp/test.yml
register: tmp_test
- set_fact:
cm_skeleton:
apiVersion: v1
data:
kind: ConfigMap
metadata:
name: test
namespace: test-namespace
- copy:
content: >-
{{ cm_skeleton | combine({"data":{"test.yml": tmp_test.stdout}}) | to_yaml }}
dest: /tmp/test.configmap.yml
如果您尝试将其他内容模板化到 ConfigMap
中,很好,您仍然可以这样做,但是反序列化到 dict
中,这样您就可以插入 test.yml
到 dict
然后使用 to_yaml
过滤器重新序列化:
- set_fact:
cm_skeleton: '{{ lookup("template", "cm.j2") | from_yaml }}'
- copy:
contents: '{{ cm_sketeton | combine({"data"...}) | to_yaml }}'
我正在尝试使用 Ansible Jinja 模板将一个 ansible 保险库文件加载到 k8 configmap YAML 文件中,但遇到在 YAML 文件内容末尾添加尾随空格的问题。这导致如下错误:
Vault format unhexlify error: Odd-length string
我使用的 ansible 模板示例是:
剧本main.yml -
- name: display multiple files shell: cat /tmp/test.yml register: test
Ansible Jinja 模板
apiVersion: v1 data: test.yml: |- {{ test.stdout.splitlines()|indent(4, false)|trim|replace(' ','') }} kind: ConfigMap metadata: name: test namespace: test-namespace
test.yml 示例:
$ANSIBLE_VAULT;1.1;AES256 62313365396662343061393464336163383764373764613633653634306231386433626436623361 6134333665353966363534333632666535333761666131620a663537646436643839616531643561 63396265333966386166373632626539326166353965363262633030333630313338646335303630 3438626666666137650a353638643435666633633964366338633066623234616432373231333331 6564
从 Jinja 模板创建的输出 YAML 如下
apiVersion: v1 data: test.yml: $ANSIBLE_VAULT;1.1;AES256 62313365396662343061393464336163383764373764613633653634306231386433626436623361 6134333665353966363534333632666535333761666131620a663537646436643839616531643561 63396265333966386166373632626539326166353965363262633030333630313338646335303630 3438626666666137650a353638643435666633633964366338633066623234616432373231333331 6564 kind: ConfigMap metadata: name: test namespace: test-namespace
能否让我知道我的 ansible 模板文件中可能缺少什么来修复上述尾随空格问题。
I am trying to load a Ansible Vault encrypted file into a configmap using jinja2 templating
那你解错题了;让 to_yaml
过滤器为您完成所有这些转义,而不是试图通过它来进行 jinja。
- command: cat /tmp/test.yml
register: tmp_test
- set_fact:
cm_skeleton:
apiVersion: v1
data:
kind: ConfigMap
metadata:
name: test
namespace: test-namespace
- copy:
content: >-
{{ cm_skeleton | combine({"data":{"test.yml": tmp_test.stdout}}) | to_yaml }}
dest: /tmp/test.configmap.yml
如果您尝试将其他内容模板化到 ConfigMap
中,很好,您仍然可以这样做,但是反序列化到 dict
中,这样您就可以插入 test.yml
到 dict
然后使用 to_yaml
过滤器重新序列化:
- set_fact:
cm_skeleton: '{{ lookup("template", "cm.j2") | from_yaml }}'
- copy:
contents: '{{ cm_sketeton | combine({"data"...}) | to_yaml }}'