ansible-jsonpatch
ansible-jsonpatch copied to clipboard
Changed always true for some reason
I'm trying to write task to change docker config, and restart docker service only if it was changed - and json_patch task for some reason always return changed: True
Return:
{
"changed": false,
"dest": "/etc/docker/daemon.json",
"diff": {
"after": "{\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"10m\",\n \"max-file\": \"10\"\n }\n}",
"after_header": "/etc/docker/daemon.json (content)",
"before": "{\n \"log-driver\": \"json-file\",\n \"log-opts\": {\n \"max-size\": \"10m\",\n \"max-file\": \"10\"\n }\n}",
"before_header": "/etc/docker/daemon.json (content)"
},
"failed": false,
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"secontext": "system_u:object_r:container_config_t:s0",
"size": 110,
"state": "file",
"uid": 0
}
Task example:
- name: Configure docker
become: true
block:
- name: Setup docker logrotation by default
json_patch:
src: "/etc/docker/daemon.json"
operations:
- op: add
path: "/log-driver"
value: "json-file"
- op: add
path: "/log-opts"
value: {}
- op: add
path: "/log-opts/max-size"
value: "10m"
- op: add
path: "/log-opts/max-file"
value: "10"
pretty: true
create: true
register: json_patch_output
changed_when: json_patch_output.diff.before != json_patch_output.diff.after
- name: Set is_docker_config_changed
ansible.builtin.set_fact:
is_docker_config_changed: "{{ json_patch_output.diff.before != json_patch_output.diff.after }}"
- name: Restart docker
when: is_docker_config_changed
ansible.builtin.systemd:
name: docker
state: restarted