我正试图使用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 }}'