#!/usr/bin/env python3 # converts 'set system syslog host
:' # to 'set system syslog host
port ' import sys import re from vyos.configtree import ConfigTree if (len(sys.argv) < 1): print("Must specify file name!") sys.exit(1) file_name = sys.argv[1] with open(file_name, 'r') as f: config_file = f.read() config = ConfigTree(config_file) cbase = ['system', 'syslog', 'host'] if not config.exists(cbase): sys.exit(0) else: config.set(cbase) config.set_tag(cbase) for host in config.list_nodes(cbase): h = None pt = None if re.search('^[a-zA-Z\-0-9\.]+', host): h = re.search('^[a-zA-Z\-0-9\.]+', host).group(0) if re.search(':[0-9]+$', host): pt = re.sub(':', '', re.search(':[0-9]+$', host).group(0)) config.set(cbase + [h]) for fac in config.list_nodes(cbase + [host, 'facility']): config.set(cbase + [h, 'facility', fac]) config.set_tag(cbase + [h, 'facility']) lvl = config.return_value(cbase + [host, 'facility', fac, 'level']) prot = config.return_value(cbase + [host, 'facility', fac, 'protocol']) config.set(cbase + [h, 'facility', fac, 'level'], value=lvl) # port can be be in each tag node and different, # that's something we can't fix here if prot: config.set(cbase + [h, 'protocol'], value=prot) config.set(cbase + [h, 'port'], value=pt) config.delete(cbase + [host]) try: open(file_name,'w').write(config.to_string()) except OSError as e: print("Failed to save the modified config: {}".format(e)) sys.exit(1)