You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sdap.apache.org by ea...@apache.org on 2020/06/10 20:39:02 UTC
[incubator-sdap-ingester] 01/08: initiate a configMap object with
unit test (with bug)
This is an automated email from the ASF dual-hosted git repository.
eamonford pushed a commit to branch config_map
in repository https://gitbox.apache.org/repos/asf/incubator-sdap-ingester.git
commit 5520d27582029858ddc3e38725616971fd1c04e9
Author: thomas loubrieu <th...@jpl.nasa.gov>
AuthorDate: Wed Jun 3 11:32:04 2020 -0700
initiate a configMap object with unit test (with bug)
---
requirements.txt | 1 +
sdap_ingest_manager/config/ConfigMap.py | 70 ++++++++++++++++++++++
.../GitIngestionOrderStore.py | 2 +
.../ingestion_order_store/IngestionOrderStore.py | 3 +
tests/config/__init__.py | 0
tests/config/test_ConfigMap.py | 32 ++++++++++
6 files changed, 108 insertions(+)
diff --git a/requirements.txt b/requirements.txt
index f4e39d0..996a27e 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -6,3 +6,4 @@ Flask==1.1.2
flask-restplus==0.13.0
Werkzeug==0.16.0
pika==1.1.0
+kubernetes==11.0
\ No newline at end of file
diff --git a/sdap_ingest_manager/config/ConfigMap.py b/sdap_ingest_manager/config/ConfigMap.py
new file mode 100644
index 0000000..c5eb244
--- /dev/null
+++ b/sdap_ingest_manager/config/ConfigMap.py
@@ -0,0 +1,70 @@
+import logging
+from kubernetes import client, config
+from kubernetes.client.rest import ApiException
+
+logging.basicConfig(level=logging.INFO)
+logger = logging.getLogger(__name__)
+
+class ConfigMap:
+ def __init__(self, configmap_name, namespace, ingestion_order_store, output_collection='collections.yml'):
+ self._ingestion_order_store = ingestion_order_store
+ self._namespace = namespace
+ self._configmap_name = configmap_name
+ self._output_collection = output_collection
+ config.load_kube_config()
+ configuration = client.Configuration()
+ self._api_instance = client.CoreV1Api(client.ApiClient(configuration))
+
+
+ def __del__(self):
+ pass
+
+ def _create_configmap_object(self):
+
+ metadata = client.V1ObjectMeta(
+ name=self._configmap_name ,
+ namespace=self._namespace,
+ )
+
+ data = {self._output_collection:self._ingestion_order_store.get_content()}
+
+ configmap = client.V1ConfigMap(
+ api_version="v1",
+ kind="ConfigMap",
+ data=data,
+ metadata=metadata
+ )
+ return configmap
+
+ def _get_deployed_config(self):
+ try:
+ api_list_response = self._api_instance.list_namespaced_config_map(self._namespace)
+ config_keys = set()
+ for item in api_list_response.items:
+ config_keys = config_keys.union(item.data.keys())
+ except ApiException as e:
+ logger.error("Exception when calling Kubernetes CoreV1Api %s\n" % e)
+ finally:
+ return config_keys
+
+ def publish(self):
+ try:
+
+ if self._output_collection in self._get_deployed_config():
+ logger.info(f'replace configMap entry {self._output_collection}')
+ api_response = self._api_instance.replace_namespaced_config_map(
+ name=self._output_collection,
+ namespace=self._namespace,
+ body=self._create_configmap_object()
+ )
+ else:
+ logger.info(f'create configMap entry {self._output_collection}')
+ api_response = self._api_instance.create_namespaced_config_map(
+ namespace=self._namespace,
+ body=self._create_configmap_object()
+ )
+ logger.info(api_response)
+
+ except ApiException as e:
+ logger.error("Exception when calling Kubernetes CoreV1Api %s\n" % e)
+
diff --git a/sdap_ingest_manager/ingestion_order_store/GitIngestionOrderStore.py b/sdap_ingest_manager/ingestion_order_store/GitIngestionOrderStore.py
index 349eeb2..1020679 100644
--- a/sdap_ingest_manager/ingestion_order_store/GitIngestionOrderStore.py
+++ b/sdap_ingest_manager/ingestion_order_store/GitIngestionOrderStore.py
@@ -2,6 +2,7 @@ import logging
import os
import sys
+
from git import Repo, Remote
from sdap_ingest_manager.ingestion_order_store.IngestionOrderStore import IngestionOrderStore
@@ -54,3 +55,4 @@ class GitIngestionOrderStore(IngestionOrderStore):
self._repo.create_remote('origin', self._git_url)
self._repo.git.fetch()
self._repo.git.checkout(self._git_branch)
+
diff --git a/sdap_ingest_manager/ingestion_order_store/IngestionOrderStore.py b/sdap_ingest_manager/ingestion_order_store/IngestionOrderStore.py
index c791fe3..89af10d 100644
--- a/sdap_ingest_manager/ingestion_order_store/IngestionOrderStore.py
+++ b/sdap_ingest_manager/ingestion_order_store/IngestionOrderStore.py
@@ -31,3 +31,6 @@ class IngestionOrderStore:
except FileNotFoundError:
logger.error(f"no collection configuration found at {self._ingestion_orders}")
+
+ def get_content(self):
+ return yaml.dump(self._ingestion_orders)
\ No newline at end of file
diff --git a/tests/config/__init__.py b/tests/config/__init__.py
new file mode 100644
index 0000000..e69de29
diff --git a/tests/config/test_ConfigMap.py b/tests/config/test_ConfigMap.py
new file mode 100644
index 0000000..a536202
--- /dev/null
+++ b/tests/config/test_ConfigMap.py
@@ -0,0 +1,32 @@
+import unittest
+import os
+
+from flask import Flask
+from flask_restplus import Api
+
+from sdap_ingest_manager.config.ConfigMap import ConfigMap
+from sdap_ingest_manager.ingestion_order_store.FileIngestionOrderStore import FileIngestionOrderStore
+from sdap_ingest_manager.ingestion_order_store.templates import Templates
+
+flask_app = Flask(__name__)
+app = Api(app=flask_app)
+templates = Templates(app)
+
+class ConfigMapTest(unittest.TestCase):
+ def test_createconfigmap(self):
+
+ test_ingestion_order_file = os.path.join(os.path.dirname(os.path.abspath(__file__)),
+ '..',
+ 'resources',
+ 'data',
+ 'collections.yml')
+ file_ingestion_order_store = FileIngestionOrderStore(path=test_ingestion_order_file,
+ order_template=templates.order_template)
+
+ config_map = ConfigMap('collections.yml', 'sdap', file_ingestion_order_store)
+ config_map.publish()
+
+
+
+if __name__ == '__main__':
+ unittest.main()