mirror of
https://github.com/rsyslog/rsyslog.git
synced 2026-06-19 18:42:59 +02:00
rsyslog now accepts .yaml/.yml files as configuration files
in addition to RainerScript (.conf). The format is triggered
automatically based on file extension, both for the main config
file (-f flag) and for include() directives.
Architecture:
- New runtime/yamlconf.c (libyaml event-based parser) builds the
same cnfobj+nvlst structures that the bison parser produces and
calls cnfDoObj() for each block.
- Ruleset script: keys are synthesised into a complete RainerScript
ruleset(name=...) { ... } block and pushed onto the flex buffer
stack so the existing lex/bison pipeline handles all filter
expressions and statements unchanged.
- routing in rsconf.c::load() and cnfDoInclude() detects .yaml/.yml
by extension and delegates to yamlconf_load().
- cnfHasPendingBuffers() (new) lets rsconf.c flush queued script
buffers after YAML-as-main-config loading.
- Guarded by #ifdef HAVE_LIBYAML throughout; graceful error when
libyaml is absent.
Schema (top-level YAML keys):
global, modules, inputs, templates, rulesets, mainqueue,
include, parser, lookup_table, dyn_stats, ratelimit, timezone
Parameter names are identical to RainerScript; all type coercion
and validation is reused via nvlstGetParams() unchanged.
Tests: yaml-basic, yaml-include, yaml-ruleset-script, yaml-error
Documentation: doc/source/configuration/yaml_config.rst
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
50 lines
1.5 KiB
Bash
Executable File
50 lines
1.5 KiB
Bash
Executable File
#!/bin/bash
|
|
# Tests basic YAML configuration support:
|
|
# - module loading via YAML modules: section
|
|
# - input definition via YAML inputs: section
|
|
# - action definition in a ruleset script: block
|
|
# - a YAML file included from the RainerScript testbench preamble
|
|
#
|
|
# The testbench instrumentation (imdiag, timeouts) lives in the generated
|
|
# .conf file; the test config itself lives in a .yaml file that is pulled in
|
|
# via include(). This exercises both YAML parsing and cross-format includes.
|
|
#
|
|
# Added 2025 by contributors, released under ASL 2.0
|
|
. ${srcdir:=.}/diag.sh init
|
|
export NUMMESSAGES=100
|
|
export QUEUE_EMPTY_CHECK_FUNC=wait_file_lines
|
|
generate_conf
|
|
add_conf '
|
|
# Pull in the YAML part of the config
|
|
include(file="'${RSYSLOG_DYNNAME}'.yaml")
|
|
'
|
|
# Write the YAML config fragment
|
|
cat > "${RSYSLOG_DYNNAME}.yaml" << 'YAMLEOF'
|
|
modules:
|
|
- load: "../plugins/imtcp/.libs/imtcp"
|
|
|
|
templates:
|
|
- name: outfmt
|
|
type: string
|
|
string: "%msg:F,58:2%\n"
|
|
|
|
rulesets:
|
|
- name: main
|
|
script: |
|
|
:msg, contains, "msgnum:" action(type="omfile"
|
|
template="outfmt" file="${RSYSLOG_OUT_LOG}")
|
|
YAMLEOF
|
|
# Substitute shell variables in the YAML (RSYSLOG_OUT_LOG is not expanded
|
|
# inside single-quoted HEREDOC, so we use sed)
|
|
sed -i "s|\${RSYSLOG_OUT_LOG}|${RSYSLOG_OUT_LOG}|g" "${RSYSLOG_DYNNAME}.yaml"
|
|
add_conf '
|
|
input(type="imtcp" port="0" listenPortFileName="'${RSYSLOG_DYNNAME}'.tcpflood_port"
|
|
ruleset="main")
|
|
'
|
|
startup
|
|
tcpflood -m $NUMMESSAGES
|
|
shutdown_when_empty
|
|
wait_shutdown
|
|
seq_check
|
|
exit_test
|