如何在Ansible中取消注释多行?

问题描述 投票:0回答:1

我想取消这行内容,但保留“ 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")'

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

variables ansible rsyslog
1个回答
1
投票

Module lineinfile会将line放入文件中,即使regex不匹配。

以下任务

  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")
© www.soinside.com 2019 - 2024. All rights reserved.