skip to Main Content

I want to add below docker log rotation specs into daemon.json file using ansible-playbook

"log-driver": "json-file",
"log-opts": {
  "max-size": "1m",
  "max-file": "4"
}

What if daemon.json is already present on the node which I am applying the playbook to. I dont want to mess up existing configuration. How do I add above block at line no. 2 ( that is after ‘{‘ or before last line i.e. ‘}’ ) ?

3

Answers


  1. You can use the lineinfile module

    - name: Add logrotate to daemon.json
      lineinfile:
        path: "<location of the docker daemon.json>"
        insertafter: '"log-opts": {'         # not sure about the escaping
        line: <your custom line>
    
    
    
    Login or Signup to reply.
  2. I’d use for blocks blockinfile:

    - name: Add config to daemon.json
      ansible.builtin.blockinfile:
        path: "<location of the docker daemon.json>"
        insertafter: '"log-opts": {' # not sure about the escaping
        block: |
          "log-driver": "json-file",
          "log-opts": {
            "max-size": "1m",
            "max-file": "4"
          }
    
    Login or Signup to reply.
  3. ansible.builtin.lineinfile

    • This module ensures a particular line is in a file, or replace an existing line using a back-referenced regular expression.
    • This is primarily useful when you want to change a single line in a file only.

    ansible.builtin.blockinfile

    • This module will insert/update/remove a block of multi-line text surrounded by customizable marker lines.

    As @malpanez explains, I think it would be more accurate to use the ansible.builtin.blockinfile module for this. You can look at the example usage from the link below.

    https://docs.ansible.com/ansible/latest/collections/ansible/builtin/blockinfile_module.html

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search