aboutsummaryrefslogtreecommitdiffstats
path: root/sdv/docker/sdvstate/tools/result_api/storage
diff options
context:
space:
mode:
authorParth Yadav <parth.yadav@ramanujan.du.ac.in>2020-08-07 18:16:54 +0530
committerParth Yadav <parth.yadav@ramanujan.du.ac.in>2020-08-17 19:11:14 +0530
commit69f4c631e49c359338cff5c9f5b2c96c6fe6b280 (patch)
treed7fc7e207aca6ae5b9899d1f1eba27fe29c4c273 /sdv/docker/sdvstate/tools/result_api/storage
parent42af6fa2ef682d28d12952831aa0c74fd647daad (diff)
Init SDV-State
This patch adds post cloud-software deployment state validation tool. Currently supports pod_health_check for Airship deployment. Signed-off-by: Parth Yadav<parthyadav3105@gmail.com> Change-Id: I28eeff520f7a00419620bf50cc38fd4793aa31b8
Diffstat (limited to 'sdv/docker/sdvstate/tools/result_api/storage')
-rw-r--r--sdv/docker/sdvstate/tools/result_api/storage/__init__.py18
-rw-r--r--sdv/docker/sdvstate/tools/result_api/storage/local/__init__.py17
-rw-r--r--sdv/docker/sdvstate/tools/result_api/storage/local/local.py133
-rw-r--r--sdv/docker/sdvstate/tools/result_api/storage/storage_api.py46
4 files changed, 214 insertions, 0 deletions
diff --git a/sdv/docker/sdvstate/tools/result_api/storage/__init__.py b/sdv/docker/sdvstate/tools/result_api/storage/__init__.py
new file mode 100644
index 0000000..d647f0f
--- /dev/null
+++ b/sdv/docker/sdvstate/tools/result_api/storage/__init__.py
@@ -0,0 +1,18 @@
+# Copyright 2020 University Of Delhi.
+#
+# 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.
+
+
+"""
+Abstract class for Storage API
+"""
diff --git a/sdv/docker/sdvstate/tools/result_api/storage/local/__init__.py b/sdv/docker/sdvstate/tools/result_api/storage/local/__init__.py
new file mode 100644
index 0000000..185ec01
--- /dev/null
+++ b/sdv/docker/sdvstate/tools/result_api/storage/local/__init__.py
@@ -0,0 +1,17 @@
+# Copyright 2020 University Of Delhi.
+#
+# 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.
+
+"""
+Local storage api
+"""
diff --git a/sdv/docker/sdvstate/tools/result_api/storage/local/local.py b/sdv/docker/sdvstate/tools/result_api/storage/local/local.py
new file mode 100644
index 0000000..d7dc67b
--- /dev/null
+++ b/sdv/docker/sdvstate/tools/result_api/storage/local/local.py
@@ -0,0 +1,133 @@
+# Copyright 2020 University Of Delhi.
+#
+# 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.
+
+
+"""
+Local Storage Api
+"""
+
+import logging
+import os
+import random
+import string
+import json
+from tools.conf import settings # pylint: disable=import-error
+
+from ..storage_api import StorageApi
+from ... import rfile
+
+
+
+class Local(StorageApi):
+ """
+ Storage API
+ Provides abstract class for various storage options to implement as
+ plugin to storage api
+ """
+
+ def __init__(self):
+ """
+ Initialization function
+ """
+ super(Local, self).__init__()
+ self.name = 'Local Storage'
+ self._logger = logging.getLogger(__name__)
+ self._path = ''
+ self._filename = ''
+
+ def store(self, data):
+ """
+ stores ``data``, ``data`` should be a dict
+
+ :param data: dict object to store
+ """
+ if not isinstance(data, dict):
+ raise TypeError("incorrect data type to store, dict required")
+
+ if not os.path.isfile(self._filename):
+ with open(self._filename, 'w') as fhandle:
+ json.dump([], fhandle)
+
+ with open(self._filename, 'r') as fhandle:
+ records = json.load(fhandle)
+ temp_data = data.copy()
+ eval_rfile(temp_data)
+ records.append(temp_data)
+
+ with open(self._filename, 'w') as fhandle:
+ self._logger.info(f'{self.name}: New record saved')
+ json.dump(records, fhandle, indent=4, sort_keys=True, default=str)
+
+
+ def load_settings(self):
+ """
+ Load all required settings otherwise set to default
+ Settings to load:
+ * ``result_path`` (default: /tmp/local/)
+ * ``results_filename`` (default: results.json)
+ """
+ try:
+ path = settings.getValue('results_path')
+ except AttributeError:
+ path = '/tmp/local/'
+ settings.setValue('results_path', path)
+
+ try:
+ filename = settings.getValue('results_filename')
+ except AttributeError:
+ filename = 'results.json'
+ settings.setValue('results_filename', filename)
+
+ if not os.path.exists(path):
+ os.makedirs(path)
+
+ self._path = path
+ self._filename = path + filename
+
+
+
+
+
+def eval_rfile(data):
+ """
+ Find all values of a type rfile in data dict/list and evals them into
+ actual file
+ """
+ if isinstance(data, dict):
+ for key, value in data.items():
+ if isinstance(value, rfile):
+ data[key] = rfile_save(value, key)
+ else:
+ eval_rfile(value)
+ if isinstance(data, list):
+ for i, _ in enumerate(data):
+ if isinstance(data[i], rfile):
+ data[i] = rfile_save(data[i])
+ else:
+ eval_rfile(data[i])
+
+
+def rfile_save(rfile_obj, prefix='zz'):
+ """
+ Takes rfile Object and stores it into random file returning filename
+ """
+ letters = string.ascii_lowercase
+ suffix = ''.join(random.choice(letters) for i in range(6))
+ filename = settings.getValue('results_path') + f'{prefix}-{suffix}.txt'
+ if os.path.isfile(filename):
+ return rfile_save(rfile_obj, prefix)
+ else:
+ with open(filename, 'w') as fhandle:
+ fhandle.write(rfile_obj.get_data())
+ return f'{prefix}-{suffix}.txt'
diff --git a/sdv/docker/sdvstate/tools/result_api/storage/storage_api.py b/sdv/docker/sdvstate/tools/result_api/storage/storage_api.py
new file mode 100644
index 0000000..5ff0d8f
--- /dev/null
+++ b/sdv/docker/sdvstate/tools/result_api/storage/storage_api.py
@@ -0,0 +1,46 @@
+# Copyright 2020 University Of Delhi.
+#
+# 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.
+
+
+"""
+Abstract class for Storage API
+"""
+
+import logging
+
+
+class StorageApi():
+ """
+ Storage API
+ Provides abstract class for various storage options to implement as
+ plugin to storage api
+ """
+
+ def __init__(self):
+ """
+ Initialization function
+ """
+ self._logger = logging.getLogger(__name__)
+
+ def store(self, data):
+ """
+ stores ``data``
+ """
+ raise NotImplementedError()
+
+ def load_settings(self):
+ """
+ Load all required settings
+ """
+ raise NotImplementedError()