通过 Ansible Playbook 配置系统日志服务器
Configure a syslog server through Ansible Playbook
我是学生系统和网络管理员,我必须在 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: ''
- regexp: '^#(.*input(type="imudp" port="514").*)'
replace: ''
- regexp: '^#(.*module(load="imtcp").*)'
replace: ''
- regexp: '^#(.*input(type="imtcp" port="514").*)'
replace: ''
################
### 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
或使用特殊字符 .
regexp: '#module.load="imudp".' #old text
ansible.builtin.replace
可以使用:
- name: replace
replace:
path: /etc/rsyslog.conf
regexp: "{{ item }}"
replace: "\1"
loop:
- '#(module\(load=”imudp”\))'
- '#(input\(type=”imudp” port=”514”\))'
- '#(module\(load=”imtcp”\))'
- '#(input\(type=”imtcp” port=”514”\))'
我是学生系统和网络管理员,我必须在 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: ''
- regexp: '^#(.*input(type="imudp" port="514").*)'
replace: ''
- regexp: '^#(.*module(load="imtcp").*)'
replace: ''
- regexp: '^#(.*input(type="imtcp" port="514").*)'
replace: ''
################
### 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
或使用特殊字符 .
regexp: '#module.load="imudp".' #old text
ansible.builtin.replace
可以使用:
- name: replace
replace:
path: /etc/rsyslog.conf
regexp: "{{ item }}"
replace: "\1"
loop:
- '#(module\(load=”imudp”\))'
- '#(input\(type=”imudp” port=”514”\))'
- '#(module\(load=”imtcp”\))'
- '#(input\(type=”imtcp” port=”514”\))'