简体   繁体   中英

How to insert block at specific line number using ansible

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 ie '}' )?

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

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>


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"
      }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM