ansibleansible-2.x

How to add spaces at beginning of block in Ansible's blockinfile?


I found this blockinfile issue, where a user suggested adding a number after the "|" in the "block: |" line, but gives a syntax error. Basically, I want to use blockinfile module to add a block of lines in a file, but I want the block to be indented 6 spaces in the file. Here's the task

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

I expect

  authc:
    line0
      line1
      line2
      line3
        line4

but get

  authc:
line0
  line1
  line2
  line3
    line4

Adding spaces in the beginning of the lines does not do it. How can I accomplish this?


Solution

  • You can use a YAML feature called "Block Indentation Indicator":

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

    It's all about the 2 after the |

    References:

    Update:

    As Dave correctly pointed out, this does not work anymore in the current version 2.14.2 of ansible :( I'd suggest using the comment workaround from the next answer