【问题标题】:How to add spaces at beginning of block in Ansible's blockinfile?如何在 Ansible blockinfile 的块开头添加空格?
【发布时间】:2016-09-27 18:35:46
【问题描述】:

我发现了这个blockinfile issue,其中一位用户建议在“|”之后添加一个数字在“块:|”行,但给出语法错误。基本上,我想使用 blockinfile 模块在文件中添加一行行,但我希望该块在文件中缩进 6 个空格。这是任务

- name: Added a block of lines in the file
  blockinfile:
  dest: /path/some_file.yml
  insertafter: 'authc:'
  block: |
    line0
      line1
      line2
      line3
        line4

我期待

  authc:
    line0
      line1
      line2
      line3
        line4

但得到

  authc:
line0
  line1
  line2
  line3
    line4

在行首添加空格不会这样做。我怎样才能做到这一点?

【问题讨论】:

    标签: ansible ansible-2.x


    【解决方案1】:

    您可以使用称为“块缩进指示器”的 YAML 功能:

    - name: Added a block of lines in the file
      blockinfile:
      dest: /path/some_file.yml
      insertafter: 'authc:'
      block: |2
          line0
            line1
            line2
            line3
              line4
    

    都是关于|之后的2

    参考资料:

    【讨论】:

    • Currently broken 自 Ansible 版本 2.1 起至少达到 2.3.1.0
    • 几件事,首先这应该是正确的答案!其次,这是not broken,而是对块的解释从“块缩进指示器”开始,因为答案正确地表明了这一点。请注意,答案中代码的第一行在block: |2 行下方有四个空格。这被解释为意味着以下要插入的块在 2 个空格之后(每行)开始,这将导致文件在插入时在第一行之前有 2 个空格。
    • 竖线是块的虚拟左边距。整数指定相对于左边距缩进的空格数。只需将栏下的内容对齐,再加一个空格。结果将缩进 2 或 4 或为整数提供的任何值。
    【解决方案2】:

    | 后面的数字描述了该块缩进的行数。 例如:

      block: |2
        insert some stuff
      ^^ 2 spaces here.
    
      block: |4
          insert some stuff
      ^^^^ 4 spaces here.
    

    如果你想在目标文件中缩进你的行,你可以使用这个解决方法:

      block: |
        # this is a comment
          insert some stuff
    

    在本例中,# this is a comment 行不会缩进,insert some stuff 行将有 2 个前导空格。

    【讨论】:

    • 此示例失败。垂直条充当内容的左边距。与“块:”或其他任何内容无关。如果要缩进 N 个空格,请将栏下的内容对齐,向右一个空格。将缩进值 N 放在竖线的右侧。
    【解决方案3】:

    我试图使用另一个答案中称为“块缩进指示器”的 YAML 功能,但它对我不起作用(ansible 2.9.10.post0)。丑陋,但可行的解决方案是:

    - name: docker-compose.yml - service has links to another container
      lineinfile:
        path: "/path/to/docker-compose.yml"
        insertafter: "service:"
        line: "    links:\n      - apache2:proxy.example.com\n      - apache2:proxy2.example.com"
    

    您基本上需要在元素之前放置尽可能多的空格。并使用 \n 换行。

    【讨论】:

      猜你喜欢
      • 2013-06-13
      • 2021-08-14
      • 2016-03-28
      • 1970-01-01
      • 2021-11-27
      • 2016-04-08
      • 2014-11-05
      • 2021-10-22
      • 1970-01-01
      相关资源
      最近更新 更多