ansible - Ansible Jinja2 模板 - 删除尾随空格
问题描述
我正在尝试使用 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
过滤器为您完成所有转义,而不是试图通过它进行 jinja。
- 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
如果你有其他东西要模板化到 that 中ConfigMap
,很好,你仍然可以这样做,但是反序列化到 a 中dict
,这样你就可以将文字内容插入test.yml
到 the 中,然后使用过滤器dict
重新序列化:to_yaml
- set_fact:
cm_skeleton: '{{ lookup("template", "cm.j2") | from_yaml }}'
- copy:
contents: '{{ cm_sketeton | combine({"data"...}) | to_yaml }}'
推荐阅读
- verilog - 功能覆盖 - 收集所有未在其他 bin 中收集的值的 bin
- android - 应用程序操作不适用于内部测试版的谷歌助手
- php - 找不到驱动程序 sqlsrv PHP 8.0.1
- python - Python AttributeError: 'QCheckBox' 对象没有属性 'ischecked'
- android - Android Room:动态决定要搜索的表格
- android - Socket.io 在 Ionic Android 构建中不起作用
- mongodb - findByIdAndUpdate 不更新文档
- azure - kubectl 错误:您必须在 AKS 中一段时间后登录到服务器(未经授权)
- gradle - 带有 JacocoPluginExtension 的 NullPointerException
- youtube - 无法再访问 Google 品牌帐户的所有者