Lineinfile always reporting changed

The lineinfile module is consistently reporting changed on a step. The actual replace works fine the first time, and it’s not harming anything on subsequent runs so I guess it’s mostly a cosmetic issue, but still I am trying to keep changes to, you know, actual changes.

I am wondering if this is from the variable used in the line file (“inventory_hostname”). Any ideas? Or is this bug report worthy?

Version of Ansible: 2.0.0.2

Playbook snippet:

  • name: configure hostname for checks

lineinfile:
dest: ‘/etc/monit.d/system.conf’
regexp: ‘^check system’
line: ‘check system {{ inventory_hostname }}’

Original file:

check system test
if MEMORY > 80% for 6 cycles then alert
if LOADAVG(15min) > 20 for 12 cycles then alert
if SWAP > 20% for 6 cycles then alert

File after first run (and all subsequent runs):

check system 192.168.50.3
if MEMORY > 80% for 6 cycles then alert
if LOADAVG(15min) > 20 for 12 cycles then alert
if SWAP > 20% for 6 cycles then alert

Why wouldn’t it change it every time, your regex is looking for lines starting with ‘check system’, and even after the change the line still starts with that. I’m just getting started with ansible myself, so I don’t have a quick solution for you, but given the snippet you provided, that would be expected behavior.

—Jim

I cannot reproduce this with the exact same files you provided.
For me it works fine as expected with v1.9.4 and v2.0.0.2.
Only the first run reports a change, subsequent runs return ok.

I wonder what might be different that could influence the behaviour.

I get that it will match the search every time, but I guess it doesn’t see that it would be “changed” to the exact same text already there. AKA even if it matches, nothing actually changes. Maybe that’s how it’s supposed to work and I am just misunderstanding that, though.