On 25.01.2017 23:37, [email protected] wrote:
I have a problem where a line that contains a certain space delimited
string must exist in a file.  The string can be anywhere in the line:
start, middle, or end. If a line that contains that string does not exist, then a line with that string needs to be inserted into the file. I have been trying to use the lineinfile module to solve this, but so far I have
been unsuccessful.  Below is the code I have tried:

- lineinfile:
dest: "/path/to/myfile"
regexp: '^(.*)(\s*this_string_must_exist)(\s+.*)$'
line: '\g<1> this_string_must_exist\g<3>'
backrefs: true
state: present

I have tried many variations of the regular expression and line, but
nothing I have tried totally achieves what I am looking for.  I have
verified that the regular expression can locate a line with the string
regardless of where the string is within the line, and if such a line is located it is not modified. But I have not been successful in getting a
new line inserted if it does not already exist.
Does anyone have any suggestions?

The reason it doesn't work is explained in the documentation.

https://docs.ansible.com/ansible/lineinfile_module.html#options

In the comments about the backrefs:
"... and if the regexp doesn't match anywhere in the file, the file will be left unchanged."

So you'll need to find a way to do it without backrefs: yes if you are going to use lineinfile.

--
Kai Stian Olstad

--
You received this message because you are subscribed to the Google Groups "Ansible 
Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/80f37017915143bd01efdb4ddb950742%40olstad.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to