diff options
Diffstat (limited to 'src')
| -rwxr-xr-x | src/conf_mode/mdns_repeater.py | 44 | 
1 files changed, 23 insertions, 21 deletions
| diff --git a/src/conf_mode/mdns_repeater.py b/src/conf_mode/mdns_repeater.py index cef735c0d..f738cc6a6 100755 --- a/src/conf_mode/mdns_repeater.py +++ b/src/conf_mode/mdns_repeater.py @@ -1,6 +1,6 @@  #!/usr/bin/env python3  # -# Copyright (C) 2017 VyOS maintainers and contributors +# Copyright (C) 2017-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,45 +13,42 @@  #  # 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 jinja2 -import netifaces + +from sys import exit +from copy import deepcopy +from jinja2 import FileSystemLoader, Environment +from netifaces import ifaddresses, AF_INET  from vyos.config import Config +from vyos.defaults import directories as vyos_data_dir  from vyos import ConfigError  config_file = r'/etc/default/mdns-repeater' -config_tmpl = """ -### Autogenerated by mdns_repeater.py ### -DAEMON_ARGS="{{ interfaces | join(' ') }}" -""" -  default_config_data = {      'disabled': False,      'interfaces': []  }  def get_config(): -    mdns = default_config_data +    mdns = deepcopy(default_config_data)      conf = Config() -    if not conf.exists('service mdns repeater'): +    base = ['service', 'mdns', 'repeater'] +    if not conf.exists(base):          return None      else: -        conf.set_level('service mdns repeater') +        conf.set_level(base)      # Service can be disabled by user -    if conf.exists('disable'): +    if conf.exists(['disable']):          mdns['disabled'] = True          return mdns      # Interface to repeat mDNS advertisements -    if conf.exists('interface'): -        mdns['interfaces'] = conf.return_values('interface') +    if conf.exists(['interface']): +        mdns['interfaces'] = conf.return_values(['interface'])      return mdns @@ -69,8 +66,8 @@ def verify(mdns):      # For mdns-repeater to work it is essential that the interfaces has      # an IPv4 address assigned      for interface in mdns['interfaces']: -        if netifaces.AF_INET in netifaces.ifaddresses(interface).keys(): -            if len(netifaces.ifaddresses(interface)[netifaces.AF_INET]) < 1: +        if AF_INET in ifaddresses(interface).keys(): +            if len(ifaddresses(interface)[AF_INET]) < 1:                  raise ConfigError('mDNS repeater requires an IPv6 address configured on interface %s!'.format(interface))      return None @@ -83,7 +80,12 @@ def generate(mdns):          print('Warning: mDNS repeater will be deactivated because it is disabled')          return None -    tmpl = jinja2.Template(config_tmpl) +    # Prepare Jinja2 template loader from files +    tmpl_path = os.path.join(vyos_data_dir['data'], 'templates', 'mdns-repeater') +    fs_loader = FileSystemLoader(tmpl_path) +    env = Environment(loader=fs_loader) + +    tmpl = env.get_template('mdns-repeater.tmpl')      config_text = tmpl.render(mdns)      with open(config_file, 'w') as f:          f.write(config_text) @@ -108,4 +110,4 @@ if __name__ == '__main__':          apply(c)      except ConfigError as e:          print(e) -        sys.exit(1) +        exit(1) | 
