如何在Ansible的blockinfile中的块开头添加空格?

时间:2016-09-27 18:35:46

标签: ansible ansible-2.x

我找到了这个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

在行的开头添加空格不会这样做。我怎么能做到这一点?

4 个答案:

答案 0 :(得分:23)

您可以使用名为“Block Indentation Indicator”的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

参考文献:

答案 1 :(得分:2)

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

  block: |2
    insert some stuff
  ^^ to 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 个前导空格。

我宁愿对已接受的解决方案发表评论,但我没有足够的赞成票...

答案 2 :(得分:0)

  

我该如何做到这一点?

请参阅this answer

通常,使用模板文件更具规范性。

答案 3 :(得分:0)

我试图从另一个答案中使用称为“块缩进指示器”的YAML功能,但是它对我不起作用(可使用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用作换行符。