You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ansible Jinja2模板转YAML时行合并空格问题求助

解决Ansible Template渲染YAML时caData与redirectURI同行问题

问题原因

渲染后caData内容与redirectURI挤在同一行,是因为YAML的|块字面量要求块内容以换行结尾来闭合块。如果你的caData变量本身没有末尾换行,或者模板中变量输出后没有预留换行,YAML解析器会把下一行的redirectURI当作caData块的一部分,导致格式异常。

解决方案

方案1:调整模板排版,给变量输出单独换行

修改cm.yaml.j2中caData的模板片段,用Jinja2的{%- ... %}控制模板空白,同时让每个变量输出单独占一行:

caData: |
          {%- if platform_name == 'gitops' and network_zone is defined and network_zone != '' %}
          {{ vars[ platform_name + '_' + network_zone + '_' + env + '_' + dc + '_sso_caData' ] }}
          {%- elif network_zone is defined and network_zone != '' %}
          {{ vars[ network_zone + '_' + env + '_' + dc + '_sso_caData' ] }}
          {%- elif platform_name == 'gitops' %}
          {{ vars[ platform_name + '_' + env + '_' + dc + '_sso_caData' ] }}
          {%- else %}
          {{ vars[ env + '_' + dc + '_sso_caData' ] }}
          {%- endif %}
        redirectURI: {% if platform_name == 'gitops' and network_zone is defined and network_zone != '' %}https://{{ vars[ platform_name + '_' + network_zone + '_' + env + '_' + dc + '_ingress_host' ] }}{% elif network_zone is defined and network_zone != '' %}https://{{ vars[ network_zone + '_' + env + '_' + dc + '_ingress_host' ] }}{% elif platform_name == 'gitops' %}https://{{ vars[ platform_name + '_' + env + '_' + dc + '_ingress_host' ] }}{% else %}https://{{ vars[ env + '_' + dc + '_ingress_host' ] }}{% endif %}/api/dex/callback

{%- ... %}会删除模板中语句前后的多余空白,避免渲染后出现无效空行,同时变量输出单独成行,自然在末尾生成换行,和redirectURI彻底分隔开。

方案2:强制给变量输出添加换行

在每个变量输出的末尾拼接\n,确保不管变量本身是否有换行,都强制添加一个结尾换行:

caData: |
          {% if platform_name == 'gitops' and network_zone is defined and network_zone != '' %}{{ vars[ platform_name + '_' + network_zone + '_' + env + '_' + dc + '_sso_caData' ] + '\n' }}{% elif network_zone is defined and network_zone != '' %}{{ vars[ network_zone + '_' + env + '_' + dc + '_sso_caData' ] + '\n' }}{% elif platform_name == 'gitops' %}{{ vars[ platform_name + '_' + env + '_' + dc + '_sso_caData' ] + '\n' }}{% else %}{{ vars[ env + '_' + dc + '_sso_caData' ] + '\n' }}{% endif %}
        redirectURI: {% if platform_name == 'gitops' and network_zone is defined and network_zone != '' %}https://{{ vars[ platform_name + '_' + network_zone + '_' + env + '_' + dc + '_ingress_host' ] }}{% elif network_zone is defined and network_zone != '' %}https://{{ vars[ network_zone + '_' + env + '_' + dc + '_ingress_host' ] }}{% elif platform_name == 'gitops' %}https://{{ vars[ platform_name + '_' + env + '_' + dc + '_ingress_host' ] }}{% else %}https://{{ vars[ env + '_' + dc + '_ingress_host' ] }}{% endif %}/api/dex/callback

方案3:确保caData变量本身以换行结尾

如果caData变量是从文件读取的,可以在定义变量时做处理,确保末尾有换行:

# 在变量定义或lookup时添加处理逻辑
sso_caData: "{{ lookup('file', 'ca.pem') | trim + '\n' }}"

trim会去掉变量前后的多余空白,再拼接\n强制添加结尾换行,从根源避免格式异常。

内容的提问来源于stack exchange,提问作者Surendar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:41:03