linux - 通过 Ansible Playbook 配置 syslog 服务器
问题描述
我是一名学生系统和网络管理员,我必须在 linux 虚拟机上安装系统日志服务器。在我的剧本中,我配置了一些被注释的配置行,应该是“未注释的”(也就是从#example 到 example)。我的代码应该可以工作,但由于某种原因它不能。当我运行它时它不会给出错误,但它不会改变任何东西。这是我尝试过的 3 个不同选项的剧本。
---
- name: Configure syslog server
hosts: servers
become: true
tasks:
- name: Install rsyslog
apt:
name: rsyslog
state: present
- name: Start service rsyslog, if not started
ansible.builtin.service:
name: rsyslog
state: started
- name: Enable service rsyslog to start on boot
ansible.builtin.service:
name: rsyslog
enabled: yes
这部分有效。现在我必须在 /etc/rsyslog.conf 文件中更改这些行:
#module(load=”imudp”)
#input(type=”imudp” port=”514”)
#module(load=”imtcp”)
#input(type=”imtcp” port=”514”)
以下是我尝试过的 3 个选项:
################
### Option 1 ###
################
- name: Swap/ edit lines in config
lineinfile:
dest: /etc/rsyslog.conf
line: 'module(load="imudp")' #new text
regexp: '#module(load="imudp")' #old text
state: present
create: true
################
### Option 2 ###
################
- name: delete comment out lines in config
ansible.builtin.replace:
dest: /etc/rsyslog.conf
regexp: '^#\s*{{ item.regexp }}(.*)$'
replace: '{{ item.replace }}'
loop:
- regexp: '^#(.*module(load="imudp").*)'
replace: '\1'
- regexp: '^#(.*input(type="imudp" port="514").*)'
replace: '\1'
- regexp: '^#(.*module(load="imtcp").*)'
replace: '\1'
- regexp: '^#(.*input(type="imtcp" port="514").*)'
replace: '\1'
################
### Option 3 ###
################
- name: delete comment out lines in config
ansible.builtin.replace:
dest: /etc/rsyslog.conf
regexp: '^#(.*module(load="imudp").*)'
replace: 'module(load="imudp")'
因此,为此它说一切正常,但没有任何改变。下一部分工作正常。
- name: Restart service rsyslog
ansible.builtin.service:
name: rsyslog
state: restarted
有人知道我的代码有什么问题吗?非常感谢你!
所有 3 个选项的输出都是相同的:
jess@jess-client1:~$ ansible-playbook -i hosts.ini syslog.yaml --ask-become-pass
BECOME password:
PLAY [Configure syslog server] **********************************************************************************************************************
TASK [Gathering Facts] ******************************************************************************************************************************
ok: [naserver]
TASK [Install rsyslog] ******************************************************************************************************************************
ok: [naserver]
TASK [Start service rsyslog, if not started] ********************************************************************************************************
ok: [naserver]
TASK [Enable service rsyslog to start on boot] ******************************************************************************************************
ok: [naserver]
TASK [delete comment out lines in config] ***********************************************************************************************************
ok: [naserver]
TASK [Restart service rsyslog] **********************************************************************************************************************
changed: [naserver]
PLAY RECAP ******************************************************************************************************************************************
naserver : ok=6 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
解决方案
你的正则表达式中有括号,它在正则表达式中有特殊的字符,所以你必须转义它:
- name: Swap/ edit lines in config
lineinfile:
dest: logs/testfile.log
line: 'module(load="imudp")' #new text
regexp: '#module\(load="imudp"\)' #old text
state: present
create: true
或使用特殊的 char 。
regexp: '#module.load="imudp".' #old text
推荐阅读
- javascript - 如何在 Linux 环境中访问 JSON RPC API Solana Javascript?
- javascript - 生成新字段时不显示日期选择器 [jquery]
- android - 我可以控制 ACTION_DIAL 的 onDestroy 吗?
- node.js - 每次我调用我的函数时,SAM CLI 都会在 /var/runtime/index.js 处中断
- reactjs - 我想了解反应 useEffect 钩子
- c++ - 是否可以在 .nativs 文件中输入 VSCode 映射 [IDs, Strings] 并在调试时输出关联的字符串?
- sql - 计数(不同)超过(分区)sql server 2016
- jetbrains-ide - 更改结果中的列标题以仅显示列名,而不是表名。列名
- spring - Spring Security Oauth2 使用基于令牌的会话登录
- r - 按特定列对数据框进行排序