首页 > 解决方案 > 通过 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   

标签: linuxansiblersyslog

解决方案


你的正则表达式中有括号,它在正则表达式中有特殊的字符,所以你必须转义它:

  - 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

推荐阅读