Do not pass the option "device" in rsyslog.conf by default when syslog server's source address is configured (#17616)

### Why I did it

An in-band syslog server will not receive any syslog if it is configured without a VRF specified, which is because `eth0` is always specified as the `device` of a syslog server and the syslog packets will be sent to `eth0` regardless of its destination IP address.

### How I did it

Pass the option "device" in rsyslog.conf only if when syslog server's source address is configured with a non-default VRF

#### How to verify it

Manually test:
1. Configuring a syslog server without VRF specified or with `default` as the VRF: no `device` passed in `rsyslog.conf`
2. Configuring a syslog server with non-default VRF: the configured VRF passed as `device` in `rsyslog.conf`
This commit is contained in:
Stephen Sun 2024-03-24 08:04:00 +08:00 committed by GitHub
parent 6324fe15b6
commit 610685d27b
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -107,7 +107,7 @@ $RepeatedMsgReduction on
{% set regex = conf.get('filter_regex') -%}
{% set fmodifier = '!' if filter == 'exclude' else '' %}
{% set device = 'eth0' if vrf == 'default' else vrf -%}
{% set device = vrf if vrf != '' and vrf != 'default' -%}
{% set template = 'WelfRemoteFormat' if format == 'welf' else 'SONiCFileFormat' -%}
{# Server extra options -#}
@ -115,11 +115,16 @@ $RepeatedMsgReduction on
{% if source -%}
{% set options = options ~ ' Address="' ~ source ~ '"'-%}
{% set device = device if device != 'eth0' else '' -%}
{% endif -%}
{% if device -%}
{% set options = options ~ ' Device="' ~ device ~ '"'-%}
{% endif -%}
{% if filter %}
:msg, {{ fmodifier }}ereregex, "{{ regex }}"
{% endif %}
*.{{ severity }}
action(type="omfwd" Target="{{ server }}" Port="{{ port }}" Protocol="{{ proto }}" Device="{{ device }}" Template="{{ template }}"{{ options }})
action(type="omfwd" Target="{{ server }}" Port="{{ port }}" Protocol="{{ proto }}" Template="{{ template }}"{{ options }})
{% endfor %}