Hi, I want to have a discussion about "lineinfile" module specifications, and the behavior in several cases.
Here's the algorithm of lineinfile module, when "state=present" : *1) line mentioned* Searching for "line". If line is found, then do nothing If line is not found, then add the line at the very end of the file (because if insertafter and insertbefore are not filled, then insertafter is forced to EOF). *2a) line mentioned and insertbefore=BOF* If line is found, then do nothing If line is not found, then add the line at the beginning of the file *2b) **line mentioned and insertbefore=BOF and regexp = regexp2* if line is found then do nothing if line is not found and regexp is found then change the "regexp2" line by "line" (insertbefore is ignored) if line is not found and regexp is not found, then line is added at the beginning of the file. *2c) line mentioned and insertbefore = regexp* if line is found, then do nothing if line is not found, and insertbefore regexp is not found, then add the line at the end of the file If line is not found, and insertbefore regexp is found, then add the line before the 'insertbefore' line. *2d) ** line mentioned and insertbefore = regexp and regexp = regexp2* if line is found, then do nothing if line is not found and insertbefore regexp is found and regexp is found then change the "regepx2" line by "line" if line is not found and insertbefore regexp is found and regexp is not found, then insert "line" before "regexp" line if line is not found and insertbefore regexp is not found and regexp is found, then change "regexp2" by "line" if line is not found and insertbefore regexp is not found and regexp is not found, then add the line at the end of the file. *3a, 3b, 3c and 3d) same as 2 but with insertafter in spite of insertbefore* see relevant 2x) section. Now, considering the behavior describes here-before, I have several comments : - I can understand that, if you search for a line without mentioning "regexp", and you don't find the line in the file, you add it at the end of the file. The description of the module is pretty explicit "This module will search a file for a line, and ensure that it is present or absent." - However, IMHO, when you specify a regexp, it means that you want to change a line. So, to me, if the regexp is not matched, the file should be left intact, without any addition / modification. The documentation is not clear about the behavior of the module in this case. So I would like to discuss with you guys, the behavior of the module when you use "regexp" (and possibly insertbefore, insertafter). I would like also to hear the thoughts of the some Ansible users that think it's a normal behavior to have regexp mentioned, that doesn't matched, but have the line still added at the end of the file. Thanks, -- 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/2e373406-c7b7-4a61-bc8c-214b0305325e%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.
