diff options
author | Edyta Krukowska <edyta.krukowska@nokia.com> | 2021-03-25 14:55:24 +0100 |
---|---|---|
committer | Edyta Krukowska <edyta.krukowska@nokia.com> | 2021-03-26 14:36:47 +0100 |
commit | 480e3de63f475477138c45f551def992ba8d8b9d (patch) | |
tree | bcb768aedee6c9eeb48c3474cbe05588d59f794a /src/python/netconf_server | |
parent | d8facaa17d35af37291192d09a783c620bc379c5 (diff) |
Add endopint for config change
Issue-ID: INT-1869
Signed-off-by: Edyta Krukowska <edyta.krukowska@nokia.com>
Change-Id: Ib016779b3539ebaac186d92d3cd95a19f81e45cd
Diffstat (limited to 'src/python/netconf_server')
5 files changed, 56 insertions, 6 deletions
diff --git a/src/python/netconf_server/netconf_change_listener.py b/src/python/netconf_server/netconf_change_listener.py index 4bb748c..44910d1 100644 --- a/src/python/netconf_server/netconf_change_listener.py +++ b/src/python/netconf_server/netconf_change_listener.py @@ -21,7 +21,7 @@ import logging from netconf_server.sysrepo_interface.config_change_data import ConfigChangeData -logger = logging.getLogger("netconf_saver") +logger = logging.getLogger(__name__) class NetconfChangeListener(object): diff --git a/src/python/netconf_server/netconf_change_listener_factory.py b/src/python/netconf_server/netconf_change_listener_factory.py index 00725dc..fa5e071 100644 --- a/src/python/netconf_server/netconf_change_listener_factory.py +++ b/src/python/netconf_server/netconf_change_listener_factory.py @@ -22,7 +22,7 @@ import logging from netconf_server.netconf_change_listener import NetconfChangeListener from netconf_server.sysrepo_interface.config_change_subscriber import ConfigChangeSubscriber -logger = logging.getLogger("netconf_saver") +logger = logging.getLogger(__name__) class NetconfChangeListenerFactory(object): diff --git a/src/python/netconf_server/netconf_rest_server.py b/src/python/netconf_server/netconf_rest_server.py index 2c44029..dce4f82 100644 --- a/src/python/netconf_server/netconf_rest_server.py +++ b/src/python/netconf_server/netconf_rest_server.py @@ -19,19 +19,21 @@ ### import logging as sys_logging -from flask import Flask, logging, make_response, Response +from flask import Flask, logging, make_response, Response, request +from netconf_server.sysrepo_configuration.sysrepo_configuration_manager import SysrepoConfigurationManager class NetconfRestServer: _rest_server: Flask = Flask("server") - sys_logging.basicConfig(level=sys_logging.DEBUG) logger = logging.create_logger(_rest_server) + _configuration_manager: SysrepoConfigurationManager def __init__(self, host='0.0.0.0', port=6555): self._host = host self._port = port - def start(self): + def start(self, configuration_manager: SysrepoConfigurationManager): + NetconfRestServer._configuration_manager = configuration_manager Flask.run( NetconfRestServer._rest_server, host=self._host, @@ -44,6 +46,13 @@ class NetconfRestServer: return "UP" @staticmethod + @_rest_server.route("/change_config/<path:module_name>", methods=['POST']) + def __change_config(module_name): + config_data = request.data.decode("utf-8") + NetconfRestServer._configuration_manager.change_configuration(config_data, module_name) + return NetconfRestServer.__create_http_response(202, "Accepted") + + @staticmethod def __create_http_response(code, message): return make_response( Response(message, headers={'Content-Type': 'application/json'}), diff --git a/src/python/netconf_server/sysrepo_configuration/sysrepo_configuration_manager.py b/src/python/netconf_server/sysrepo_configuration/sysrepo_configuration_manager.py new file mode 100644 index 0000000..0e8ad94 --- /dev/null +++ b/src/python/netconf_server/sysrepo_configuration/sysrepo_configuration_manager.py @@ -0,0 +1,41 @@ +# ================================================================================ +# Copyright (C) 2021 Nokia. All rights reserved. +# ================================================================================ +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ============LICENSE_END========================================================= +### + +import logging + + +class SysrepoConfigurationManager(object): + logger = logging.getLogger(__name__) + + def __init__(self, session, connection): + self._connection = connection + self._session = session + + def __parse_config_data(self, config_data): + self.logger.debug(config_data) + ctx = self._connection.get_ly_ctx() + data = ctx.parse_data_mem( + config_data, + "xml", + config=True, + strict=False, + ) + return data + + def change_configuration(self, config_data: str, module_name: str): + data = self.__parse_config_data(config_data) + self._session.replace_config_ly(data, module_name) diff --git a/src/python/netconf_server/sysrepo_interface/sysrepo_client.py b/src/python/netconf_server/sysrepo_interface/sysrepo_client.py index fcd29e2..3528747 100644 --- a/src/python/netconf_server/sysrepo_interface/sysrepo_client.py +++ b/src/python/netconf_server/sysrepo_interface/sysrepo_client.py @@ -26,4 +26,4 @@ class SysrepoClient(object): def run_in_session(method_to_run: callable, *extra_args): with sysrepo.SysrepoConnection() as connection: with connection.start_session() as session: - method_to_run(session, *extra_args) + method_to_run(session, connection, *extra_args) |