diff options
Diffstat (limited to 'python')
| -rw-r--r-- | python/vyos/defaults.py | 12 | ||||
| -rw-r--r-- | python/vyos/kea.py | 60 | ||||
| -rw-r--r-- | python/vyos/template.py | 32 | ||||
| -rw-r--r-- | python/vyos/utils/network.py | 4 | 
4 files changed, 72 insertions, 36 deletions
diff --git a/python/vyos/defaults.py b/python/vyos/defaults.py index 2f3580571..64145a42e 100644 --- a/python/vyos/defaults.py +++ b/python/vyos/defaults.py @@ -37,6 +37,7 @@ directories = {  }  config_status = '/tmp/vyos-config-status' +api_config_state = '/run/http-api-state'  cfg_group = 'vyattacfg' @@ -45,14 +46,3 @@ cfg_vintage = 'vyos'  commit_lock = '/opt/vyatta/config/.lock'  component_version_json = os.path.join(directories['data'], 'component-versions.json') - -https_data = { -    'listen_addresses' : { '*': ['_'] } -} - -vyos_cert_data = { -    'conf' : '/etc/nginx/snippets/vyos-cert.conf', -    'crt' : '/etc/ssl/certs/vyos-selfsigned.crt', -    'key' : '/etc/ssl/private/vyos-selfsign', -    'lifetime' : '365', -} diff --git a/python/vyos/kea.py b/python/vyos/kea.py index 819fe16a9..3d8cf3637 100644 --- a/python/vyos/kea.py +++ b/python/vyos/kea.py @@ -25,7 +25,7 @@ from vyos.template import netmask_from_cidr  from vyos.utils.dict import dict_search_args  from vyos.utils.file import file_permissions  from vyos.utils.file import read_file -from vyos.utils.process import cmd +from vyos.utils.process import run  kea4_options = {      'name_server': 'domain-name-servers', @@ -92,17 +92,28 @@ def kea_parse_options(config):          options.append({'name': 'pcode', 'data': tz_string})          options.append({'name': 'tcode', 'data': config['time_zone']}) +    unifi_controller = dict_search_args(config, 'vendor_option', 'ubiquiti', 'unifi_controller') +    if unifi_controller: +        options.append({ +            'name': 'unifi-controller', +            'data': unifi_controller, +            'space': 'ubnt' +        }) +      return options  def kea_parse_subnet(subnet, config):      out = {'subnet': subnet} -    options = kea_parse_options(config) +    options = [] + +    if 'option' in config: +        out['option-data'] = kea_parse_options(config['option']) -    if 'bootfile_name' in config: -        out['boot-file-name'] = config['bootfile_name'] +        if 'bootfile_name' in config['option']: +            out['boot-file-name'] = config['option']['bootfile_name'] -    if 'bootfile_server' in config: -        out['next-server'] = config['bootfile_server'] +        if 'bootfile_server' in config['option']: +            out['next-server'] = config['option']['bootfile_server']      if 'lease' in config:          out['valid-lifetime'] = int(config['lease']) @@ -112,7 +123,20 @@ def kea_parse_subnet(subnet, config):          pools = []          for num, range_config in config['range'].items():              start, stop = range_config['start'], range_config['stop'] -            pools.append({'pool': f'{start} - {stop}'}) +            pool = { +                'pool': f'{start} - {stop}' +            } + +            if 'option' in range_config: +                pool['option-data'] = kea_parse_options(range_config['option']) + +                if 'bootfile_name' in range_config['option']: +                    pool['boot-file-name'] = range_config['option']['bootfile_name'] + +                if 'bootfile_server' in range_config['option']: +                    pool['next-server'] = range_config['option']['bootfile_server'] + +            pools.append(pool)          out['pools'] = pools      if 'static_mapping' in config: @@ -134,19 +158,17 @@ def kea_parse_subnet(subnet, config):              if 'ip_address' in host_config:                  reservation['ip-address'] = host_config['ip_address'] -            reservations.append(reservation) -        out['reservations'] = reservations +            if 'option' in host_config: +                reservation['option-data'] = kea_parse_options(host_config['option']) -    unifi_controller = dict_search_args(config, 'vendor_option', 'ubiquiti', 'unifi_controller') -    if unifi_controller: -        options.append({ -            'name': 'unifi-controller', -            'data': unifi_controller, -            'space': 'ubnt' -        }) +                if 'bootfile_name' in host_config['option']: +                    reservation['boot-file-name'] = host_config['option']['bootfile_name'] -    if options: -        out['option-data'] = options +                if 'bootfile_server' in host_config['option']: +                    reservation['next-server'] = host_config['option']['bootfile_server'] + +            reservations.append(reservation) +        out['reservations'] = reservations      return out @@ -293,7 +315,7 @@ def _ctrl_socket_command(path, command, args=None):          return None      if file_permissions(path) != '0775': -        cmd(f'sudo chmod 775 {path}') +        run(f'sudo chmod 775 {path}')      with socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) as sock:          sock.connect(path) diff --git a/python/vyos/template.py b/python/vyos/template.py index 29ea0889b..1368f1f61 100644 --- a/python/vyos/template.py +++ b/python/vyos/template.py @@ -786,6 +786,23 @@ def range_to_regex(num_range):      regex = range_to_regex(num_range)      return f'({regex})' +@register_filter('kea_address_json') +def kea_address_json(addresses): +    from json import dumps +    from vyos.utils.network import is_addr_assigned + +    out = [] + +    for address in addresses: +        ifname = is_addr_assigned(address, return_ifname=True) + +        if not ifname: +            continue + +        out.append(f'{ifname}/{address}') + +    return dumps(out) +  @register_filter('kea_failover_json')  def kea_failover_json(config):      from json import dumps @@ -842,15 +859,22 @@ def kea_shared_network_json(shared_networks):              'authoritative': ('authoritative' in config),              'subnet4': []          } -        options = kea_parse_options(config) + +        if 'option' in config: +            network['option-data'] = kea_parse_options(config['option']) + +            if 'bootfile_name' in config['option']: +                network['boot-file-name'] = config['option']['bootfile_name'] + +            if 'bootfile_server' in config['option']: +                network['next-server'] = config['option']['bootfile_server']          if 'subnet' in config:              for subnet, subnet_config in config['subnet'].items(): +                if 'disable' in subnet_config: +                    continue                  network['subnet4'].append(kea_parse_subnet(subnet, subnet_config)) -        if options: -            network['option-data'] = options -          out.append(network)      return dumps(out, indent=4) diff --git a/python/vyos/utils/network.py b/python/vyos/utils/network.py index 997ee6309..b782e0bd8 100644 --- a/python/vyos/utils/network.py +++ b/python/vyos/utils/network.py @@ -308,7 +308,7 @@ def is_ipv6_link_local(addr):      return False -def is_addr_assigned(ip_address, vrf=None) -> bool: +def is_addr_assigned(ip_address, vrf=None, return_ifname=False) -> bool | str:      """ Verify if the given IPv4/IPv6 address is assigned to any interface """      from netifaces import interfaces      from vyos.utils.network import get_interface_config @@ -323,7 +323,7 @@ def is_addr_assigned(ip_address, vrf=None) -> bool:              continue          if is_intf_addr_assigned(interface, ip_address): -            return True +            return interface if return_ifname else True      return False  | 
