From 9ac783472872329fe1a1683585b679a7afcc78f0 Mon Sep 17 00:00:00 2001 From: Daniil Baturin Date: Mon, 5 Aug 2019 21:20:54 +0200 Subject: T1431: add showConfig operation to the HTTP API. --- python/vyos/configsession.py | 8 ++++++++ src/services/vyos-http-api-server | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/python/vyos/configsession.py b/python/vyos/configsession.py index 1a8077edd..8626839f2 100644 --- a/python/vyos/configsession.py +++ b/python/vyos/configsession.py @@ -23,6 +23,7 @@ DELETE = '/opt/vyatta/sbin/my_delete' COMMENT = '/opt/vyatta/sbin/my_comment' COMMIT = '/opt/vyatta/sbin/my_commit' DISCARD = '/opt/vyatta/sbin/my_discard' +SHOW_CONFIG = ['/bin/cli-shell-api', 'showConfig'] # Default "commit via" string APP = "vyos-http-api" @@ -147,3 +148,10 @@ class ConfigSession(object): def discard(self): self.__run_command([DISCARD]) + + def show_config(self, path, format='raw'): + config_data = self.__run_command(SHOW_CONFIG + path) + + if format == 'raw': + return config_data + diff --git a/src/services/vyos-http-api-server b/src/services/vyos-http-api-server index e11eb6d52..afab9be70 100755 --- a/src/services/vyos-http-api-server +++ b/src/services/vyos-http-api-server @@ -179,6 +179,7 @@ def configure(): @app.route('/retrieve', method='POST') def get_value(): config = app.config['vyos_config'] + session = app.config['vyos_session'] api_keys = app.config['vyos_keys'] @@ -190,8 +191,11 @@ def get_value(): command = bottle.request.forms.get("data") command = json.loads(command) - op = command['op'] - path = " ".join(command['path']) + try: + op = command['op'] + path = " ".join(command['path']) + except KeyError: + return error(400, "Missing required field. \"op\" and \"path\" fields are required") try: if op == 'returnValue': @@ -200,6 +204,12 @@ def get_value(): res = config.return_values(path) elif op == 'exists': res = config.exists(path) + elif op == 'showConfig': + config_format = 'raw' + if 'configFormat' in command: + config_format = command['configFormat'] + + res = session.show_config(command['path'], format=config_format) else: return error(400, "\"{0}\" is not a valid operation".format(op)) except VyOSError as e: -- cgit v1.2.3