【问题标题】:YAML Multiline String While Retaining Indentation and NewlinesYAML 多行字符串,同时保留缩进和换行
【发布时间】:2019-03-29 05:34:12
【问题描述】:

背景:

这是一个使用模板从模板构建 yaml 文件的 Ansible 剧本。所以基本上我有一个 jinja2 模板文件,其中包含这样一行:

private_key: {{ myvar }}

Ansible 使用 yaml 来定义变量。所以我将像这样填写myvar 值。这里我使用|这个特殊字符来定义一个多行字符串:

myvar: |

        - "-----BEGIN PRIVATE KEY-----"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "zzzzzzzzzzzzzzzzzz="
        - "-----END PRIVATE KEY-----"

但是输出会修剪缩进:

  private_key:
- "-----BEGIN PRIVATE KEY-----"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
- "zzzzzzzzzzzzzzzzzz="
- "-----END PRIVATE KEY-----"

由于输出文件本身就是一个yaml,所以我需要保留缩进。看来无论如何我都会失去缩进。

我需要最终结果看起来像这样完全

  private_key:
    - "-----BEGIN PRIVATE KEY-----"
    - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
    - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
    - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
    - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
    - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
    - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
    - "zzzzzzzzzzzzzzzzzz="
    - "-----END PRIVATE KEY-----"

【问题讨论】:

    标签: ansible yaml jinja2


    【解决方案1】:

    我在发布问题后立即在 Google 搜索中找到了答案。

    本质上,yaml 字符串会去除缩进,所以在这种情况下,我们必须使用 Jinja 在它们被去除的地方插入空格。幸运的是,这非常容易做到:

    在模板文件中,我替换了这个:

    private_key: {{ myvar }}
    

    有了这个:

    private_key: {{ myvar | indent( width=4, indentfirst=True) }}
    

    width 字段可以根据需要多少缩进空间进行调整。

    实际的变量声明与我在问题中发布的完全一样。但是现在在模板中添加了缩进,我现在有了所需的缩进输出:

      private_key:
        - "-----BEGIN PRIVATE KEY-----"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "asdfasdfasdfasdfasdfasdfadfasdfasdfasdfasdfasdfssadf"
        - "zzzzzzzzzzzzzzzzzz="
        - "-----END PRIVATE KEY-----"
    

    【讨论】:

    猜你喜欢
    • 2013-09-02
    • 1970-01-01
    • 2021-05-13
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多