我正在尝试使用Ansible Jinja模板将ansible Vault文件加载到k8 configmap YAML文件中,但是面临一个问题,即在YAML文件内容的末尾添加了尾随空格。这将导致以下错误:
Vault format unhexlify error: Odd-length string
正在使用的ansible模板示例为:
- name: display multiple files shell: cat /tmp/test.yml register: test
apiVersion: v1 data: test.yml: |- {{ test.stdout.splitlines()|indent(4, false)|trim|replace(' ','') }} kind: ConfigMap metadata: name: test namespace: test-namespace
$ANSIBLE_VAULT;1.1;AES256 62313365396662343061393464336163383764373764613633653634306231386433626436623361 6134333665353966363534333632666535333761666131620a663537646436643839616531643561 63396265333966386166373632626539326166353965363262633030333630313338646335303630 3438626666666137650a353638643435666633633964366338633066623234616432373231333331 6564
apiVersion: v1 data: test.yml: $ANSIBLE_VAULT;1.1;AES256 62313365396662343061393464336163383764373764613633653634306231386433626436623361 6134333665353966363534333632666535333761666131620a663537646436643839616531643561 63396265333966386166373632626539326166353965363262633030333630313338646335303630 3438626666666137650a353638643435666633633964366338633066623234616432373231333331 6564 kind: ConfigMap metadata: name: test namespace: test-namespace
您能告诉我我的ansible模板文件中可能缺少什么来解决上述尾随空白问题吗?
答案 0 :(得分:1)
我正在尝试使用jinja2模板将Ansible Vault加密文件加载到configmap中
那么您正在解决错误的问题;让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
以便您可以插入{{1 }}放入test.yml
,然后使用dict
过滤器重新序列化:
to_yaml