summaryrefslogtreecommitdiff
path: root/src/services/api/graphql/recipes/recipe.py
diff options
context:
space:
mode:
authorJohn Estabrook <jestabro@vyos.io>2021-08-05 11:24:47 -0500
committerJohn Estabrook <jestabro@vyos.io>2021-08-06 14:12:47 -0500
commita2b959c50c96698da173b9c4720369a51442cc5c (patch)
tree0056f7fa622c02e836a21879129d139577ca6e76 /src/services/api/graphql/recipes/recipe.py
parentd3d4e3bedcc0b43e16554b1832b43da9d41e651f (diff)
downloadvyos-1x-a2b959c50c96698da173b9c4720369a51442cc5c.tar.gz
vyos-1x-a2b959c50c96698da173b9c4720369a51442cc5c.zip
http-api: T2768: example using GraphQL for high-level config operations
Diffstat (limited to 'src/services/api/graphql/recipes/recipe.py')
-rw-r--r--src/services/api/graphql/recipes/recipe.py49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/services/api/graphql/recipes/recipe.py b/src/services/api/graphql/recipes/recipe.py
new file mode 100644
index 000000000..8fbb9e0bf
--- /dev/null
+++ b/src/services/api/graphql/recipes/recipe.py
@@ -0,0 +1,49 @@
+from ariadne import convert_camel_case_to_snake
+import vyos.defaults
+from vyos.template import render
+
+class Recipe(object):
+ def __init__(self, session, data):
+ self._session = session
+ self.data = data
+ self._name = convert_camel_case_to_snake(type(self).__name__)
+
+ @property
+ def data(self):
+ return self.__data
+
+ @data.setter
+ def data(self, data):
+ if isinstance(data, dict):
+ self.__data = data
+ else:
+ raise ValueError("data must be of type dict")
+
+ def configure(self):
+ session = self._session
+ data = self.data
+ func_base_name = self._name
+
+ tmpl_file = f'{func_base_name}.tmpl'
+ cmd_file = f'/tmp/{func_base_name}.cmds'
+ tmpl_dir = vyos.defaults.directories['api_templates']
+
+ try:
+ render(cmd_file, tmpl_file, data, location=tmpl_dir)
+ commands = []
+ with open(cmd_file) as f:
+ lines = f.readlines()
+ for line in lines:
+ commands.append(line.split())
+ for cmd in commands:
+ if cmd[0] == 'set':
+ session.set(cmd[1:])
+ elif cmd[0] == 'delete':
+ session.delete(cmd[1:])
+ else:
+ raise ValueError('Operation must be "set" or "delete"')
+ session.commit()
+ except Exception as error:
+ raise error
+
+