使用 ansible.builtin.lineinfile 在块的末尾插入行

时间:2021-04-27 06:34:45

标签: regex ansible

我正在尝试将几个配置项添加到默认的 containerd 配置文件中。这是文件的片段。

      [plugins."io.containerd.grpc.v1.cri".containerd.default_runtime]
        runtime_type = ""
        runtime_engine = ""
        runtime_root = ""
        privileged_without_host_devices = false
      [plugins."io.containerd.grpc.v1.cri".containerd.untrusted_workload_runtime]
        runtime_type = ""
        runtime_engine = ""
        runtime_root = ""
        privileged_without_host_devices = false
      [plugins."io.containerd.grpc.v1.cri".containerd.runtimes]
        [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc]
          runtime_type = "io.containerd.runc.v1"
          runtime_engine = ""
          runtime_root = ""
          privileged_without_host_devices = false
    [plugins."io.containerd.grpc.v1.cri".cni]

我想在 [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc] 块的末尾插入以下两行。

          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]
            SystemdCgroup = true

我已经设法使用以下代码将它们插入到块的开头。它很乱,我正在手动计算我想要避免的空格。有没有更好的方法来做到这一点?

---
- name: Replace line in file
  hosts: control
  gather_facts: false
  tasks:
    - name: Replacing first line
      ansible.builtin.lineinfile:
        path: /root/config.toml
        insertafter: '^(\s+)\[plugins.+\w\.runc\]'
        line: '          [plugins."io.containerd.grpc.v1.cri".containerd.runtimes.runc.options]'
    - name: Replacing second line
      ansible.builtin.lineinfile:
        path: /root/config.toml
        insertafter: '^(\s+)\[plugins.+\w\.runc\.options\]'
        line: '            SystemdCgroup = true'

我尝试使用 backrefs 但最终替换而不是添加。

1 个答案:

答案 0 :(得分:0)

似乎还没有合乎逻辑的方法来做到这一点。最好的解决方案似乎是使用模板(似乎是首选方式)或使用 insertbefore

相关问题