summaryrefslogtreecommitdiff
path: root/src/conf_mode/system-syslog.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/conf_mode/system-syslog.py')
-rwxr-xr-xsrc/conf_mode/system-syslog.py96
1 files changed, 16 insertions, 80 deletions
diff --git a/src/conf_mode/system-syslog.py b/src/conf_mode/system-syslog.py
index 2d47cc061..25b9b5bed 100755
--- a/src/conf_mode/system-syslog.py
+++ b/src/conf_mode/system-syslog.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2018 VyOS maintainers and contributors
+# Copyright (C) 2018-2020 VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
@@ -13,84 +13,17 @@
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
-#
-#
-import sys
import os
import re
-import subprocess
-import jinja2
+
+from jinja2 import FileSystemLoader, Environment
+from sys import exit
from vyos.config import Config
+from vyos.defaults import directories as vyos_data_dir
from vyos import ConfigError
-
-# config templates
-
-# /etc/rsyslog.d/vyos-rsyslog.conf ###
-configs = '''
-## generated by syslog.py ##
-## file based logging
-{% if files['global']['marker'] -%}
-$ModLoad immark
-{% if files['global']['marker-interval'] %}
-$MarkMessagePeriod {{files['global']['marker-interval']}}
-{% endif %}
-{% endif -%}
-{% if files['global']['preserver_fqdn'] -%}
-$PreserveFQDN on
-{% endif -%}
-{% for file in files %}
-$outchannel {{file}},{{files[file]['log-file']}},{{files[file]['max-size']}},{{files[file]['action-on-max-size']}}
-{{files[file]['selectors']}} :omfile:${{file}}
-{% endfor %}
-{% if console %}
-## console logging
-{% for con in console %}
-{{console[con]['selectors']}} /dev/console
-{% endfor %}
-{% endif %}
-{% if hosts %}
-## remote logging
-{% for host in hosts %}
-{% if hosts[host]['proto'] == 'tcp' %}
-{% if hosts[host]['port'] %}
-{{hosts[host]['selectors']}} @@{{host}}:{{hosts[host]['port']}}
-{% else %}
-{{hosts[host]['selectors']}} @@{{host}}
-{% endif %}
-{% else %}
-{% if hosts[host]['port'] %}
-{{hosts[host]['selectors']}} @{{host}}:{{hosts[host]['port']}}
-{% else %}
-{{hosts[host]['selectors']}} @{{host}}
-{% endif %}
-{% endif %}
-{% endfor %}
-{% endif %}
-{% if user %}
-{% for u in user %}
-{{user[u]['selectors']}} :omusrmsg:{{u}}
-{% endfor %}
-{% endif %}
-'''
-
-logrotate_configs = '''
-{% for file in files %}
-{{files[file]['log-file']}} {
- missingok
- notifempty
- create
- rotate {{files[file]['max-files']}}
- size={{files[file]['max-size']//1024}}k
- postrotate
- invoke-rc.d rsyslog rotate > /dev/null
- endscript
-}
-{% endfor %}
-'''
-# config templates end
-
+from vyos.util import run
def get_config():
c = Config()
@@ -259,14 +192,19 @@ def generate(c):
if c == None:
return None
- tmpl = jinja2.Template(configs, trim_blocks=True)
+ # Prepare Jinja2 template loader from files
+ tmpl_path = os.path.join(vyos_data_dir['data'], 'templates', 'syslog')
+ fs_loader = FileSystemLoader(tmpl_path)
+ env = Environment(loader=fs_loader, trim_blocks=True)
+
+ tmpl = env.get_template('rsyslog.conf.tmpl')
config_text = tmpl.render(c)
with open('/etc/rsyslog.d/vyos-rsyslog.conf', 'w') as f:
f.write(config_text)
# eventually write for each file its own logrotate file, since size is
# defined it shouldn't matter
- tmpl = jinja2.Template(logrotate_configs, trim_blocks=True)
+ tmpl = env.get_template('logrotate.tmpl')
config_text = tmpl.render(c)
with open('/etc/logrotate.d/vyos-rsyslog', 'w') as f:
f.write(config_text)
@@ -315,10 +253,8 @@ def verify(c):
def apply(c):
if not c:
- subprocess.call(['sudo', 'systemctl', 'stop', 'syslog'])
- return 0
-
- subprocess.call(['sudo', 'systemctl', 'restart', 'syslog'])
+ return run('systemctl stop syslog')
+ return run('systemctl restart syslog')
if __name__ == '__main__':
try:
@@ -328,4 +264,4 @@ if __name__ == '__main__':
apply(c)
except ConfigError as e:
print(e)
- sys.exit(1)
+ exit(1)