Шаблон Ansible Jinja2 - удаление замыкающих пробелов
Я пытаюсь загрузить файл ansible vault в файл YAML configmap k8, используя шаблон Ansible Jinja, но столкнулся с проблемой добавления конечного пробела в конце содержимого файла YAML. Это вызывает ошибки, как показано ниже:
Vault format unhexlify error: Odd-length string
Пример используемого шаблона:
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
Можете ли вы сообщить мне, что мне может не хватать в моем файле ANSIBLE шаблона для устранения вышеуказанных проблем с пробелами.
1 ответ
Я пытаюсь загрузить зашифрованный файл Ansible Vault в configmap с использованием шаблонов 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 }}'