Ansible Jinja2模板-删除尾随空格

时间:2018-12-07 19:44:24

标签: ansible jinja2 ansible-vault

我正在尝试使用Ansible Jinja模板将ansible Vault文件加载到k8 configmap YAML文件中,但是面临一个问题,即在YAML文件内容的末尾添加了尾随空格。这将导致以下错误:

Vault format unhexlify error: Odd-length string

正在使用的ansible模板示例为:

Playbook 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模板文件中可能缺少什么来解决上述尾随空白问题吗?

1 个答案:

答案 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