Ansible showing task changed but the task has condition (creates: ) and does not actually execute

Q: The module shell shows changed every time I run it

A: In async mode the task can’t be skipped immediately. First, the module shell must find out whether the file /opt/assure1/logs/SetupWizard.log exists at the remote host or not. Then, if the file exists the module will decide to skip the execution of the command. But, you run the task asynchronously. In this case, Ansible starts the module and returns without waiting for the module to complete. That’s what the registered variable Assure1InstallWait says. The task started but didn’t finish yet.

    "msg": {
        "ansible_job_id": "637594935242.28556",
        "changed": true,
        "failed": false,
        "finished": 0,
        "results_file": "/root/.ansible_async/637594935242.28556",
        "started": 1
    }

The decision to set such a task changed is correct, I think because the execution on the remote host is going on.

Print the registered result of the module async. You’ll see, that the command was skipped because the file exists (you’ve printed the async file at the remote instead). Here the attribute changed is set false because now we know the command didn’t execute

  job_result:
    ...
    attempts: 1
    changed: false
    failed: false
    finished: 1
    msg: Did not run command since '/tmp/SetupWizard.log' exists
    rc: 0
    ...

CLICK HERE to find out more related problems solutions.

Leave a Comment

Your email address will not be published.

Scroll to Top