如何用Ansible 2.16修改RHEL 8/9/10的rsyslog.conf多行配置
用Ansible 2.16修改RHEL 8/9/10的rsyslog.conf多行配置
方法一:使用ansible.builtin.replace模块精准匹配更新
该方法通过正则匹配整个imjournal模块的多行配置,替换为带限流参数的目标配置,同时保证幂等性(重复执行不会重复添加参数)。
Playbook示例
- name: Update imjournal module configuration in rsyslog.conf hosts: all become: true tasks: - name: Replace imjournal module block with rate limiting settings ansible.builtin.replace: path: /etc/rsyslog.conf regexp: | ^module\(load="imjournal" .*?StateFile="imjournal\.state".*?\) replace: | module(load="imjournal" # provides access to the systemd journal StateFile="imjournal.state" # File to store the position in the journal Ratelimit.Interval="300" Ratelimit.Burst="30000") flags: - DOTALL # 让正则的.匹配换行符 - MULTILINE backup: true # 自动备份原文件,可选
说明
- 正则通过
DOTALL和MULTILINE标记,精准匹配从module(load="imjournal"起始,到包含StateFile="imjournal.state"的闭合)结束的整个块。 - 仅当原有块未包含限流参数时才会触发替换,避免重复执行时的冗余操作。
方法二:使用ansible.builtin.blockinfile模块替换整个模块块
若允许调整配置格式,可先删除原有imjournal配置,再插入带限流参数的新块,利用标记实现幂等性。
Playbook示例
- name: Update imjournal module configuration in rsyslog.conf hosts: all become: true tasks: - name: Remove existing imjournal module block ansible.builtin.lineinfile: path: /etc/rsyslog.conf regexp: ^module\(load="imjournal".*?\) state: absent flags: DOTALL - name: Insert updated imjournal module block ansible.builtin.blockinfile: path: /etc/rsyslog.conf block: | module(load="imjournal" StateFile="imjournal.state" Ratelimit.Interval="300" Ratelimit.Burst="30000") marker: "# {mark} ANSIBLE MANAGED IMJOURNAL CONFIG" insertafter: "^# Include all config files in /etc/rsyslog.d/" # 根据实际文件结构调整插入位置 backup: true
说明
- 先通过
lineinfile清除原有imjournal模块配置。 - 再用
blockinfile插入新配置,标记会确保后续执行不会重复插入,同时方便识别Ansible管理的配置段。 insertafter参数需根据目标系统rsyslog.conf的实际结构调整,确保插入到合适位置。
方法三:简化为单行配置(可选)
如果不介意将多行配置改为单行,可大幅简化操作,rsyslog完全支持单行格式的模块配置。
Playbook示例
- name: Update imjournal module configuration in rsyslog.conf hosts: all become: true tasks: - name: Replace imjournal module with rate limiting settings (single line) ansible.builtin.replace: path: /etc/rsyslog.conf regexp: ^module\(load="imjournal".*?StateFile="imjournal\.state".*?\) replace: 'module(load="imjournal" StateFile="imjournal.state" Ratelimit.Interval="300" Ratelimit.Burst="30000")' flags: DOTALL backup: true
内容的提问来源于stack exchange,提问作者Kevin Keane
相关产品推荐
相关产品推荐

