首页 > 解决方案 > 如何在 Ansible 中取消注释多行?

问题描述

我想取消注释这一行,但留下“privides UDP/TCP ...”评论道:

# provides UDP syslog reception
# module(load="imudp")
# input(type="imudp" port="514")

# provides TCP syslog reception
# module(load="imudp")
# input(type="imudp" port="514")

这是我当前取消注释一行的任务:

- name: Change rsyslog configuration
  lineinfile:
    dest: /etc/rsyslog.conf
    regex: '^module(load="imudp")'
    line: 'module(load="imudp")'

但是如何扩展此任务以取消注释更多行?我认为可以在正则表达式中添加变量并使用循环with_items解析值,但不知道如何实现。这样做的最佳做法是什么?

标签: variablesansiblersyslog

解决方案


即使正则表达式不匹配,模块lineinfile也会将该行放入文件中。

下面的任务

  tasks:
    - lineinfile:
        # firstmatch: true
        dest: rsyslog.conf
        regex: '^#\s*{{ item.regex }}(.*)$'
        line: '{{ item.line }}'
      loop:
        - regex: 'module\(load="imudp"\)'
          line: 'module(load="imudp")'
        - regex: 'input\(type="imudp" port="514"\)'
          line: 'input(type="imudp" port="514")'

# provides UDP syslog reception
# module(load="imudp")
# input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imudp")
input(type="imudp" port="514")

并用“firstmatch:true”给出

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
# module(load="imudp")
# input(type="imudp" port="514")

模块替换将替换文件中模式的所有实例

- replace:
    dest: rsyslog.conf
    regexp: '^#\s*{{ item.regex }}(.*)$'
    replace: '{{ item.replace }}'
  loop:
    - regex: 'module\(load="imudp"\)'
      replace: 'module(load="imudp")'
    - regex: 'input\(type="imudp" port="514"\)'
      replace: 'input(type="imudp" port="514")'

# provides UDP syslog reception
module(load="imudp")
input(type="imudp" port="514")

# provides TCP syslog reception
module(load="imudp")
input(type="imudp" port="514")

推荐阅读