Шаблон Ansible Jinja2 - удаление замыкающих пробелов - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь загрузить файл ansible vault в YAML-файл конфигурации k8 с использованием шаблона Ansible Jinja, но столкнулся с проблемой, когда в конце содержимого 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

Выходной YAML, созданный из шаблона Jinjaниже

apiVersion: v1
data:
 test.yml:
     $ANSIBLE_VAULT;1.1;AES256
  62313365396662343061393464336163383764373764613633653634306231386433626436623361
  6134333665353966363534333632666535333761666131620a663537646436643839616531643561
  63396265333966386166373632626539326166353965363262633030333630313338646335303630
  3438626666666137650a353638643435666633633964366338633066623234616432373231333331
  6564   
kind: ConfigMap
metadata: 
  name: test
  namespace: test-namespace

Не могли бы вы сообщить мне, что мне может не хватать в моем файле шаблона поиска, чтобы устранить вышеуказанные проблемы с пробелами.

1 Ответ

0 голосов
/ 11 декабря 2018

Я пытаюсь загрузить зашифрованный файл Ansible Vault в конфигурационную карту, используя шаблоны jinja2

Тогда вы решаете не ту проблему;позвольте фильтру 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 }}'
...