【问题标题】:Configure a syslog server through Ansible Playbook通过 Ansible Playbook 配置 syslog 服务器
【发布时间】:2021-12-18 03:34:29
【问题描述】:

我是一名学生系统和网络管理员,我必须在 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   

【问题讨论】:

  • 您能否将每个选项的输出发布为文本而不是图像?请编辑您的问题。
  • 我已经改了,每个选项的输出都是一样的。

标签: linux ansible rsyslog


【解决方案1】:

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”\))'

【讨论】:

  • 我试过这个,但它似乎不起作用。输出说没关系,而不是改变任何东西。我用 with_items 编写了代码,并且有效。谢谢你的回答
【解决方案2】:

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

  - 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

【讨论】:

  • 效果很好,非常感谢!
猜你喜欢
  • 2022-12-19
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
  • 2022-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多