Ansible Jinja2模板-删除尾部空白



我正试图使用ansible Jinja模板将一个ansible vault文件加载到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模板文件中可能缺少什么吗。

我正在尝试使用jinja2模板将Ansible Vault加密文件加载到配置映射中

那么你解决了错误的问题;让to_yaml过滤器为你做所有的逃避,而不是试图通过它来欺骗你。

- 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 }}'

最新更新