diff options
Diffstat (limited to 'src')
27 files changed, 220 insertions, 224 deletions
| diff --git a/src/conf_mode/interfaces_bonding.py b/src/conf_mode/interfaces_bonding.py index 0844d2913..4f1141dcb 100755 --- a/src/conf_mode/interfaces_bonding.py +++ b/src/conf_mode/interfaces_bonding.py @@ -17,7 +17,6 @@  from sys import exit  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configdict import get_interface_dict  from vyos.configdict import is_node_changed  from vyos.configdict import leaf_node_changed @@ -32,6 +31,7 @@ from vyos.configverify import verify_mtu_ipv6  from vyos.configverify import verify_vlan_config  from vyos.configverify import verify_vrf  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.ifconfig import BondIf  from vyos.ifconfig.ethernet import EthernetIf  from vyos.ifconfig import Section diff --git a/src/conf_mode/interfaces_ethernet.py b/src/conf_mode/interfaces_ethernet.py index 5024e6982..41c89fdf8 100755 --- a/src/conf_mode/interfaces_ethernet.py +++ b/src/conf_mode/interfaces_ethernet.py @@ -20,7 +20,6 @@ from sys import exit  from vyos.base import Warning  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configdict import get_interface_dict  from vyos.configdict import is_node_changed  from vyos.configverify import verify_address @@ -35,6 +34,7 @@ from vyos.configverify import verify_bond_bridge_member  from vyos.configverify import verify_eapol  from vyos.ethtool import Ethtool  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.ifconfig import EthernetIf  from vyos.ifconfig import BondIf  from vyos.utils.dict import dict_search diff --git a/src/conf_mode/policy.py b/src/conf_mode/policy.py index 5e71a612d..a90e33e81 100755 --- a/src/conf_mode/policy.py +++ b/src/conf_mode/policy.py @@ -17,10 +17,10 @@  from sys import exit  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.frrender import FRRender  from vyos.frrender import frr_protocols +from vyos.frrender import get_frrender_dict  from vyos.utils.dict import dict_search  from vyos.utils.process import is_systemd_service_running  from vyos import ConfigError diff --git a/src/conf_mode/protocols_babel.py b/src/conf_mode/protocols_babel.py index 48b7ae734..80a847af8 100755 --- a/src/conf_mode/protocols_babel.py +++ b/src/conf_mode/protocols_babel.py @@ -17,11 +17,11 @@  from sys import exit  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_access_list  from vyos.configverify import verify_prefix_list  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.utils.dict import dict_search  from vyos.utils.process import is_systemd_service_running  from vyos import ConfigError diff --git a/src/conf_mode/protocols_bfd.py b/src/conf_mode/protocols_bfd.py index 2e7d40676..d3bc3e961 100755 --- a/src/conf_mode/protocols_bfd.py +++ b/src/conf_mode/protocols_bfd.py @@ -15,10 +15,10 @@  # along with this program.  If not, see <http://www.gnu.org/licenses/>.  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import verify_vrf  from vyos.configverify import has_frr_protocol_in_dict  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.template import is_ipv6  from vyos.utils.network import is_ipv6_link_local  from vyos.utils.process import is_systemd_service_running diff --git a/src/conf_mode/protocols_bgp.py b/src/conf_mode/protocols_bgp.py index 60f3f2ad0..c4af717af 100755 --- a/src/conf_mode/protocols_bgp.py +++ b/src/conf_mode/protocols_bgp.py @@ -19,12 +19,12 @@ from sys import argv  from vyos.base import Warning  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_prefix_list  from vyos.configverify import verify_route_map  from vyos.configverify import verify_vrf  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.template import is_ip  from vyos.template import is_interface  from vyos.utils.dict import dict_search diff --git a/src/conf_mode/protocols_eigrp.py b/src/conf_mode/protocols_eigrp.py index 8f49bb151..324ff883f 100755 --- a/src/conf_mode/protocols_eigrp.py +++ b/src/conf_mode/protocols_eigrp.py @@ -18,11 +18,11 @@ from sys import exit  from sys import argv  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_vrf  from vyos.utils.process import is_systemd_service_running  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos import ConfigError  from vyos import airbag  airbag.enable() diff --git a/src/conf_mode/protocols_isis.py b/src/conf_mode/protocols_isis.py index 1e5f0d6e8..1c994492e 100755 --- a/src/conf_mode/protocols_isis.py +++ b/src/conf_mode/protocols_isis.py @@ -18,11 +18,11 @@ from sys import exit  from sys import argv  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_common_route_maps  from vyos.configverify import verify_interface_exists  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.ifconfig import Interface  from vyos.utils.dict import dict_search  from vyos.utils.network import get_interface_config diff --git a/src/conf_mode/protocols_mpls.py b/src/conf_mode/protocols_mpls.py index e8097b7ff..33d9a6dae 100755 --- a/src/conf_mode/protocols_mpls.py +++ b/src/conf_mode/protocols_mpls.py @@ -20,9 +20,9 @@ from sys import exit  from glob import glob  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.utils.dict import dict_search  from vyos.utils.file import read_file  from vyos.utils.process import is_systemd_service_running diff --git a/src/conf_mode/protocols_openfabric.py b/src/conf_mode/protocols_openfabric.py index 41c5d9544..7df11fb20 100644 --- a/src/conf_mode/protocols_openfabric.py +++ b/src/conf_mode/protocols_openfabric.py @@ -18,11 +18,11 @@ from sys import exit  from vyos.base import Warning  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import verify_interface_exists  from vyos.configverify import has_frr_protocol_in_dict  from vyos.utils.process import is_systemd_service_running  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos import ConfigError  from vyos import airbag  airbag.enable() diff --git a/src/conf_mode/protocols_ospf.py b/src/conf_mode/protocols_ospf.py index f2c95a63c..c06c0aafc 100755 --- a/src/conf_mode/protocols_ospf.py +++ b/src/conf_mode/protocols_ospf.py @@ -18,13 +18,13 @@ from sys import exit  from sys import argv  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import verify_common_route_maps  from vyos.configverify import verify_route_map  from vyos.configverify import verify_interface_exists  from vyos.configverify import verify_access_list  from vyos.configverify import has_frr_protocol_in_dict  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.utils.dict import dict_search  from vyos.utils.network import get_interface_config  from vyos.utils.process import is_systemd_service_running diff --git a/src/conf_mode/protocols_ospfv3.py b/src/conf_mode/protocols_ospfv3.py index ac189c378..2563eb7d5 100755 --- a/src/conf_mode/protocols_ospfv3.py +++ b/src/conf_mode/protocols_ospfv3.py @@ -18,12 +18,12 @@ from sys import exit  from sys import argv  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import verify_common_route_maps  from vyos.configverify import verify_route_map  from vyos.configverify import verify_interface_exists  from vyos.configverify import has_frr_protocol_in_dict  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.ifconfig import Interface  from vyos.utils.dict import dict_search  from vyos.utils.network import get_interface_config diff --git a/src/conf_mode/protocols_pim.py b/src/conf_mode/protocols_pim.py index 477895b0b..632099964 100755 --- a/src/conf_mode/protocols_pim.py +++ b/src/conf_mode/protocols_pim.py @@ -22,10 +22,10 @@ from signal import SIGTERM  from sys import exit  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import verify_interface_exists  from vyos.configverify import has_frr_protocol_in_dict  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.frrender import pim_daemon  from vyos.utils.process import is_systemd_service_running  from vyos.utils.process import process_named_running diff --git a/src/conf_mode/protocols_pim6.py b/src/conf_mode/protocols_pim6.py index 3a9b876cc..03a79139a 100755 --- a/src/conf_mode/protocols_pim6.py +++ b/src/conf_mode/protocols_pim6.py @@ -19,11 +19,11 @@ from ipaddress import IPv6Network  from sys import exit  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_interface_exists  from vyos.utils.process import is_systemd_service_running  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos import ConfigError  from vyos import airbag  airbag.enable() diff --git a/src/conf_mode/protocols_rip.py b/src/conf_mode/protocols_rip.py index 39743f965..ec9dfbb8b 100755 --- a/src/conf_mode/protocols_rip.py +++ b/src/conf_mode/protocols_rip.py @@ -17,12 +17,12 @@  from sys import exit  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_common_route_maps  from vyos.configverify import verify_access_list  from vyos.configverify import verify_prefix_list  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.utils.dict import dict_search  from vyos.utils.process import is_systemd_service_running  from vyos import ConfigError diff --git a/src/conf_mode/protocols_ripng.py b/src/conf_mode/protocols_ripng.py index 14f038444..9a9ac8ec8 100755 --- a/src/conf_mode/protocols_ripng.py +++ b/src/conf_mode/protocols_ripng.py @@ -17,12 +17,12 @@  from sys import exit  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_common_route_maps  from vyos.configverify import verify_access_list  from vyos.configverify import verify_prefix_list  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.utils.dict import dict_search  from vyos.utils.process import is_systemd_service_running  from vyos import ConfigError diff --git a/src/conf_mode/protocols_rpki.py b/src/conf_mode/protocols_rpki.py index 5ad656586..ef0250e3d 100755 --- a/src/conf_mode/protocols_rpki.py +++ b/src/conf_mode/protocols_rpki.py @@ -20,9 +20,9 @@ from glob import glob  from sys import exit  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.pki import wrap_openssh_public_key  from vyos.pki import wrap_openssh_private_key  from vyos.utils.dict import dict_search_args diff --git a/src/conf_mode/protocols_segment-routing.py b/src/conf_mode/protocols_segment-routing.py index 99cf87556..f2bd42a79 100755 --- a/src/conf_mode/protocols_segment-routing.py +++ b/src/conf_mode/protocols_segment-routing.py @@ -17,10 +17,10 @@  from sys import exit  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configdict import list_diff  from vyos.configverify import has_frr_protocol_in_dict  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.ifconfig import Section  from vyos.utils.dict import dict_search  from vyos.utils.process import is_systemd_service_running diff --git a/src/conf_mode/protocols_static.py b/src/conf_mode/protocols_static.py index 9d02db6dd..1b9e51167 100755 --- a/src/conf_mode/protocols_static.py +++ b/src/conf_mode/protocols_static.py @@ -19,11 +19,11 @@ from sys import exit  from sys import argv  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_common_route_maps  from vyos.configverify import verify_vrf  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.utils.process import is_systemd_service_running  from vyos.template import render  from vyos import ConfigError diff --git a/src/conf_mode/service_monitoring_frr-exporter.py b/src/conf_mode/service_monitoring_frr-exporter.py deleted file mode 100755 index 01527d579..000000000 --- a/src/conf_mode/service_monitoring_frr-exporter.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (C) 2024 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 -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# 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 os - -from sys import exit - -from vyos.config import Config -from vyos.configdict import is_node_changed -from vyos.configverify import verify_vrf -from vyos.template import render -from vyos.utils.process import call -from vyos import ConfigError -from vyos import airbag - - -airbag.enable() - -service_file = '/etc/systemd/system/frr_exporter.service' -systemd_service = 'frr_exporter.service' - - -def get_config(config=None): -    if config: -        conf = config -    else: -        conf = Config() -    base = ['service', 'monitoring', 'frr-exporter'] -    if not conf.exists(base): -        return None - -    config_data = conf.get_config_dict( -        base, key_mangling=('-', '_'), get_first_key=True -    ) -    config_data = conf.merge_defaults(config_data, recursive=True) - -    tmp = is_node_changed(conf, base + ['vrf']) -    if tmp: -        config_data.update({'restart_required': {}}) - -    return config_data - - -def verify(config_data): -    # bail out early - looks like removal from running config -    if not config_data: -        return None - -    verify_vrf(config_data) -    return None - - -def generate(config_data): -    if not config_data: -        # Delete systemd files -        if os.path.isfile(service_file): -            os.unlink(service_file) -        return None - -    # Render frr_exporter service_file -    render(service_file, 'frr_exporter/frr_exporter.service.j2', config_data) -    return None - - -def apply(config_data): -    # Reload systemd manager configuration -    call('systemctl daemon-reload') -    if not config_data: -        call(f'systemctl stop {systemd_service}') -        return - -    # we need to restart the service if e.g. the VRF name changed -    systemd_action = 'reload-or-restart' -    if 'restart_required' in config_data: -        systemd_action = 'restart' - -    call(f'systemctl {systemd_action} {systemd_service}') - - -if __name__ == '__main__': -    try: -        c = get_config() -        verify(c) -        generate(c) -        apply(c) -    except ConfigError as e: -        print(e) -        exit(1) diff --git a/src/conf_mode/service_monitoring_node-exporter.py b/src/conf_mode/service_monitoring_node-exporter.py deleted file mode 100755 index db34bb5d0..000000000 --- a/src/conf_mode/service_monitoring_node-exporter.py +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (C) 2024 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 -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# 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 os - -from sys import exit - -from vyos.config import Config -from vyos.configdict import is_node_changed -from vyos.configverify import verify_vrf -from vyos.template import render -from vyos.utils.process import call -from vyos import ConfigError -from vyos import airbag - - -airbag.enable() - -service_file = '/etc/systemd/system/node_exporter.service' -systemd_service = 'node_exporter.service' - - -def get_config(config=None): -    if config: -        conf = config -    else: -        conf = Config() -    base = ['service', 'monitoring', 'node-exporter'] -    if not conf.exists(base): -        return None - -    config_data = conf.get_config_dict( -        base, key_mangling=('-', '_'), get_first_key=True -    ) -    config_data = conf.merge_defaults(config_data, recursive=True) - -    tmp = is_node_changed(conf, base + ['vrf']) -    if tmp: -        config_data.update({'restart_required': {}}) - -    return config_data - - -def verify(config_data): -    # bail out early - looks like removal from running config -    if not config_data: -        return None - -    verify_vrf(config_data) -    return None - - -def generate(config_data): -    if not config_data: -        # Delete systemd files -        if os.path.isfile(service_file): -            os.unlink(service_file) -        return None - -    # Render node_exporter service_file -    render(service_file, 'node_exporter/node_exporter.service.j2', config_data) -    return None - - -def apply(config_data): -    # Reload systemd manager configuration -    call('systemctl daemon-reload') -    if not config_data: -        call(f'systemctl stop {systemd_service}') -        return - -    # we need to restart the service if e.g. the VRF name changed -    systemd_action = 'reload-or-restart' -    if 'restart_required' in config_data: -        systemd_action = 'restart' - -    call(f'systemctl {systemd_action} {systemd_service}') - - -if __name__ == '__main__': -    try: -        c = get_config() -        verify(c) -        generate(c) -        apply(c) -    except ConfigError as e: -        print(e) -        exit(1) diff --git a/src/conf_mode/service_monitoring_prometheus.py b/src/conf_mode/service_monitoring_prometheus.py new file mode 100755 index 000000000..e0a9fc4ef --- /dev/null +++ b/src/conf_mode/service_monitoring_prometheus.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2024 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 +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# 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 os + +from sys import exit + +from vyos.config import Config +from vyos.configdict import is_node_changed +from vyos.configverify import verify_vrf +from vyos.template import render +from vyos.utils.process import call +from vyos import ConfigError +from vyos import airbag + + +airbag.enable() + +node_exporter_service_file = '/etc/systemd/system/node_exporter.service' +node_exporter_systemd_service = 'node_exporter.service' + +frr_exporter_service_file = '/etc/systemd/system/frr_exporter.service' +frr_exporter_systemd_service = 'frr_exporter.service' + + +def get_config(config=None): +    if config: +        conf = config +    else: +        conf = Config() +    base = ['service', 'monitoring', 'prometheus'] +    if not conf.exists(base): +        return None + +    monitoring = conf.get_config_dict( +        base, key_mangling=('-', '_'), get_first_key=True, with_recursive_defaults=True +    ) + +    tmp = is_node_changed(conf, base + ['node-exporter', 'vrf']) +    if tmp: +        monitoring.update({'node_exporter_restart_required': {}}) + +    tmp = is_node_changed(conf, base + ['frr-exporter', 'vrf']) +    if tmp: +        monitoring.update({'frr_exporter_restart_required': {}}) + +    return monitoring + + +def verify(monitoring): +    if not monitoring: +        return None + +    if 'node_exporter' in monitoring: +        verify_vrf(monitoring['node_exporter']) + +    if 'frr_exporter' in monitoring: +        verify_vrf(monitoring['frr_exporter']) + +    return None + + +def generate(monitoring): +    if not monitoring or 'node_exporter' not in monitoring: +        # Delete systemd files +        if os.path.isfile(node_exporter_service_file): +            os.unlink(node_exporter_service_file) + +    if not monitoring or 'frr_exporter' not in monitoring: +        # Delete systemd files +        if os.path.isfile(frr_exporter_service_file): +            os.unlink(frr_exporter_service_file) + +    if not monitoring: +        return None + +    if 'node_exporter' in monitoring: +        # Render node_exporter node_exporter_service_file +        render( +            node_exporter_service_file, +            'prometheus/node_exporter.service.j2', +            monitoring['node_exporter'], +        ) + +    if 'frr_exporter' in monitoring: +        # Render frr_exporter service_file +        render( +            frr_exporter_service_file, +            'prometheus/frr_exporter.service.j2', +            monitoring['frr_exporter'], +        ) + +    return None + + +def apply(monitoring): +    # Reload systemd manager configuration +    call('systemctl daemon-reload') +    if not monitoring or 'node_exporter' not in monitoring: +        call(f'systemctl stop {node_exporter_systemd_service}') +    if not monitoring or 'frr_exporter' not in monitoring: +        call(f'systemctl stop {frr_exporter_systemd_service}') + +    if not monitoring: +        return + +    if 'node_exporter' in monitoring: +        # we need to restart the service if e.g. the VRF name changed +        systemd_action = 'reload-or-restart' +        if 'node_exporter_restart_required' in monitoring: +            systemd_action = 'restart' + +        call(f'systemctl {systemd_action} {node_exporter_systemd_service}') + +    if 'frr_exporter' in monitoring: +        # we need to restart the service if e.g. the VRF name changed +        systemd_action = 'reload-or-restart' +        if 'frr_exporter_restart_required' in monitoring: +            systemd_action = 'restart' + +        call(f'systemctl {systemd_action} {frr_exporter_systemd_service}') + + +if __name__ == '__main__': +    try: +        c = get_config() +        verify(c) +        generate(c) +        apply(c) +    except ConfigError as e: +        print(e) +        exit(1) diff --git a/src/conf_mode/system_ip.py b/src/conf_mode/system_ip.py index 86843eb78..7f3796168 100755 --- a/src/conf_mode/system_ip.py +++ b/src/conf_mode/system_ip.py @@ -19,10 +19,10 @@ from sys import exit  from vyos.config import Config  from vyos.configdep import set_dependents  from vyos.configdep import call_dependents -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_route_map  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.utils.dict import dict_search  from vyos.utils.process import is_systemd_service_active  from vyos.utils.process import is_systemd_service_running diff --git a/src/conf_mode/system_ipv6.py b/src/conf_mode/system_ipv6.py index 593b8f7f3..309869b2f 100755 --- a/src/conf_mode/system_ipv6.py +++ b/src/conf_mode/system_ipv6.py @@ -20,10 +20,10 @@ from sys import exit  from vyos.config import Config  from vyos.configdep import set_dependents  from vyos.configdep import call_dependents -from vyos.configdict import get_frrender_dict  from vyos.configverify import has_frr_protocol_in_dict  from vyos.configverify import verify_route_map  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.utils.dict import dict_search  from vyos.utils.file import write_file  from vyos.utils.process import is_systemd_service_active diff --git a/src/conf_mode/vrf.py b/src/conf_mode/vrf.py index 6533f493f..74780b601 100755 --- a/src/conf_mode/vrf.py +++ b/src/conf_mode/vrf.py @@ -19,11 +19,11 @@ from jmespath import search  from json import loads  from vyos.config import Config -from vyos.configdict import get_frrender_dict  from vyos.configdict import node_changed  from vyos.configverify import verify_route_map  from vyos.firewall import conntrack_required  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos.ifconfig import Interface  from vyos.template import render  from vyos.utils.dict import dict_search diff --git a/src/migration-scripts/monitoring/1-to-2 b/src/migration-scripts/monitoring/1-to-2 new file mode 100644 index 000000000..8bdaebae9 --- /dev/null +++ b/src/migration-scripts/monitoring/1-to-2 @@ -0,0 +1,50 @@ +# Copyright 2024 VyOS maintainers and contributors <maintainers@vyos.io> +# +# This library is free software; you can redistribute it and/or +# modify it under the terms of the GNU Lesser General Public +# License as published by the Free Software Foundation; either +# version 2.1 of the License, or (at your option) any later version. +# +# This library is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public License +# along with this library.  If not, see <http://www.gnu.org/licenses/>. + +# T6953: merge node and frr exporter under prometheus section + +from vyos.configtree import ConfigTree + +old_base = ['service', 'monitoring'] +new_base = ['service', 'monitoring', 'prometheus'] + +def migrate(config: ConfigTree) -> None: +    if not config.exists(old_base): +        # Nothing to do +        return + +    if config.exists(old_base + ['node-exporter']): +        if config.exists(old_base + ['node-exporter', 'listen-address']): +          tmp = config.return_value(old_base + ['node-exporter', 'listen-address']) +          config.set(new_base + ['node-exporter', 'listen-address'], value=tmp) +        if config.exists(old_base + ['node-exporter', 'port']): +          tmp = config.return_value(old_base + ['node-exporter', 'port']) +          config.set(new_base + ['node-exporter', 'port'], value=tmp) +        if config.exists(old_base + ['node-exporter', 'vrf']): +          tmp = config.return_value(old_base + ['node-exporter', 'vrf']) +          config.set(new_base + ['node-exporter', 'vrf'], value=tmp) +        config.delete(old_base + ['node-exporter']) + +    if config.exists(old_base + ['frr-exporter']): +        if config.exists(old_base + ['frr-exporter', 'listen-address']): +          tmp = config.return_value(old_base + ['frr-exporter', 'listen-address']) +          config.set(new_base + ['frr-exporter', 'listen-address'], value=tmp) +        if config.exists(old_base + ['frr-exporter', 'port']): +          tmp = config.return_value(old_base + ['frr-exporter', 'port']) +          config.set(new_base + ['frr-exporter', 'port'], value=tmp) +        if config.exists(old_base + ['frr-exporter', 'vrf']): +          tmp = config.return_value(old_base + ['frr-exporter', 'vrf']) +          config.set(new_base + ['frr-exporter', 'vrf'], value=tmp) +        config.delete(old_base + ['frr-exporter']) diff --git a/src/services/vyos-configd b/src/services/vyos-configd index ecad85801..d558e8c26 100755 --- a/src/services/vyos-configd +++ b/src/services/vyos-configd @@ -38,6 +38,7 @@ from vyos.configsource import ConfigSourceError  from vyos.configdiff import get_commit_scripts  from vyos.config import Config  from vyos.frrender import FRRender +from vyos.frrender import get_frrender_dict  from vyos import ConfigError  CFG_GROUP = 'vyattacfg' @@ -333,6 +334,8 @@ if __name__ == '__main__':                  if hasattr(config, 'frrender_cls') and res == R_SUCCESS:                      frrender_cls = getattr(config, 'frrender_cls') +                    tmp = get_frrender_dict(config) +                    frrender_cls.generate(tmp)                      frrender_cls.apply()          else:              logger.critical(f'Unexpected message: {message}') | 
