particledecay / ansible-jsonpatch

An Ansible module for patching JSON files
MIT License
118 stars 27 forks source link

Changed always true for some reason #25

Open e-g1gor opened 1 year ago

e-g1gor commented 1 year ago

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