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?
You basically need to put as many spaces as necessary before elements. And use \n for newlines.
Ansible blockinfile module is used to insert/update/remove a block of lines. The block will be surrounded by a marker, like begin and end, to make the task idempotent. If you want to modify/ insert only a line, use lineinfile module.
blockinfile module – Insert/update/remove a text block surrounded by marker lines.
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:
The number after the | describes how many lines the block is indented. For example:
  block: |2     insert some stuff   ^^ 2 spaces here.    block: |4       insert some stuff   ^^^^ 4 spaces here.  If you like to indent your line in the destination file you can use this workaround:
  block: |     # this is a comment       insert some stuff  In this example, the line # this is a comment will not be indented and the line insert some stuff will have 2 leading spaces.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With