Add adapter to get k8s cluster info 81/6981/2
authorBin Yang <bin.yang@windriver.com>
Wed, 3 Nov 2021 07:45:40 +0000 (15:45 +0800)
committerBin Yang <bin.yang@windriver.com>
Wed, 3 Nov 2021 14:47:39 +0000 (22:47 +0800)
Add adapter to get cpu info

Issue-ID: INF-196
Signed-off-by: Bin Yang <bin.yang@windriver.com>
Change-Id: I4176ca4bc9df8556e5252c7b4f3247d6f70da9e1

.gitignore
README.md
o2ims/adapter/clients/ocloud_sa_client.py
o2ims/domain/stx_object.py
tests/integration-ocloud/test_clientdriver_stx_sa.py

index addeb00..c46d404 100644 (file)
@@ -3,4 +3,5 @@
 __pycache__
 *.egg-info
 *.pyc
-.tox
\ No newline at end of file
+.tox
+*.log
index edd927e..fdc1d39 100644 (file)
--- a/README.md
+++ b/README.md
@@ -25,6 +25,8 @@ Prerequisite: in case of testing against real ocloud, download openrc file from
 admin_openrc.sh\r
 docker-compose run --rm --no-deps --entrypoint=pytest api /tests/unit /tests/integration-ocloud\r
 \r
+docker-compose run --rm --no-deps --entrypoint=pytest api /tests/integration-ocloud --log-level=DEBUG --log-file=/test\r
+s/debug.log\r
 ```\r
 \r
 ## Tear down containers\r
index 5d1a5f9..5e9e64c 100644 (file)
@@ -14,6 +14,7 @@
 \r
 # client talking to Stx standalone\r
 \r
+import uuid\r
 from o2ims.service.client.base_client import BaseClient\r
 from typing import List\r
 # Optional,  Set\r
@@ -61,8 +62,8 @@ class StxSaDmsClient(BaseClient):
         super().__init__()\r
         self.driver = StxSaClientImp()\r
 \r
-    def _get(self, id) -> ocloudModel.StxGenericModel:\r
-        return self.driver.getK8sDetail(id)\r
+    def _get(self, name) -> ocloudModel.StxGenericModel:\r
+        return self.driver.getK8sDetail(name)\r
 \r
     def _list(self):\r
         return self.driver.getK8sList()\r
@@ -79,6 +80,19 @@ class StxPserverClient(BaseClient):
     def _list(self) -> List[ocloudModel.StxGenericModel]:\r
         return self.driver.getPserverList()\r
 \r
+\r
+class StxCpuClient(BaseClient):\r
+    def __init__(self, pserver_id):\r
+        super().__init__()\r
+        self._pserver_id = pserver_id\r
+        self.driver = StxSaClientImp()\r
+\r
+    def _get(self, id) -> ocloudModel.StxGenericModel:\r
+        return self.driver.getCpu(id)\r
+\r
+    def _list(self) -> List[ocloudModel.StxGenericModel]:\r
+        return self.driver.getCpuList(self._pserver_id)\r
+\r
 # internal driver which implement client call to Stx Standalone instance\r
 \r
 \r
@@ -109,12 +123,56 @@ class StxSaClientImp(object):
         return ocloudModel.StxGenericModel(self._hostconverter(host))\r
 \r
     def getK8sList(self) -> List[ocloudModel.StxGenericModel]:\r
-        raise NotImplementedError\r
-\r
-    def getK8sDetail(self, id) -> ocloudModel.StxGenericModel:\r
-        raise NotImplementedError\r
+        k8sclusters = self.stxclient.kube_cluster.list()\r
+        logger.debug("k8sresources:" + str(k8sclusters[0].to_dict()))\r
+\r
+        return [ocloudModel.StxGenericModel(self._k8sconverter(k8sres))\r
+                for k8sres in k8sclusters if k8sres]\r
+\r
+    def getK8sDetail(self, name) -> ocloudModel.StxGenericModel:\r
+        k8scluster = self.stxclient.kube_cluster.get(name)\r
+        logger.debug("k8sresource:" + str(k8scluster.to_dict()))\r
+        return ocloudModel.StxGenericModel(self._k8sconverter(k8scluster))\r
+\r
+    def getCpuList(self, hostid) -> List[ocloudModel.StxGenericModel]:\r
+        cpulist = self.stxclient.icpu.list(hostid)\r
+        return [ocloudModel.StxGenericModel(self._cpuconverter(cpures))\r
+                for cpures in cpulist if cpures]\r
+\r
+    def getCpu(self, id) -> ocloudModel.StxGenericModel:\r
+        cpuinfo = self.stxclient.icpu.get(id)\r
+        return ocloudModel.StxGenericModel(self._cpuconverter(cpuinfo))\r
+\r
+    def _getIsystems(self):\r
+        return self.stxclient.isystem.list()\r
+\r
+    def _getIsystem(self, id=None):\r
+        if id:\r
+            return self.stxclient.isystem.get(id)\r
+        else:\r
+            isystems = self.stxclient.isystem.list()\r
+            if len(isystems) != 1 and not id:\r
+                raise Exception('No system uuid was provided and '\r
+                                'more than one system exists in the account.')\r
+            return isystems[0]\r
 \r
     @staticmethod\r
     def _hostconverter(host):\r
         setattr(host, "name", host.hostname)\r
         return host\r
+\r
+    @staticmethod\r
+    def _cpuconverter(cpu):\r
+        setattr(cpu, "name", "core-"+str(cpu.core))\r
+        return cpu\r
+\r
+    @staticmethod\r
+    def _k8sconverter(host):\r
+        setattr(host, "name", host.cluster_name)\r
+        setattr(host, "uuid",\r
+                uuid.uuid3(uuid.NAMESPACE_URL, host.cluster_name))\r
+        setattr(host, 'updated_at', None)\r
+        setattr(host, 'created_at', None)\r
+        logger.debug("k8s cluster name/uuid:" +\r
+                     host.name + "/" + str(host.uuid))\r
+        return host\r
index 7345694..09d1a16 100644 (file)
@@ -41,3 +41,12 @@ class StxGenericModel:
         self.content = newmodel.content\r
         self.createtime = newmodel.createtime\r
         self.updatetime = newmodel.updatetime\r
+\r
+\r
+class StxK8sClusterModel(StxGenericModel):\r
+    def __init__(self, api_response: dict = None) -> None:\r
+        super().__init__(api_response=api_response)\r
+\r
+    def is_outdated(self, newmodel) -> bool:\r
+        # never outdated since lack of such evidence\r
+        return False\r
index 551a4c5..4e45070 100644 (file)
@@ -62,3 +62,28 @@ def test_get_pserver(real_stx_aio_client):
     host2 = stxSaClientImp.getPserver(host1.id)\r
     assert host1 != host2\r
     assert host1.id == host2.id\r
+\r
+def test_get_k8s_list(real_stx_aio_client):\r
+    stxSaClientImp = StxSaClientImp(real_stx_aio_client)\r
+    assert stxSaClientImp is not None\r
+    k8slist = stxSaClientImp.getK8sList()\r
+    assert k8slist is not None\r
+    assert len(k8slist) > 0\r
+    k8s1 = k8slist[0]\r
+    k8s2 = stxSaClientImp.getK8sDetail(k8s1.name)\r
+    assert k8s1 != k8s2\r
+    assert k8s1.name == k8s2.name\r
+    assert k8s1.id == k8s2.id\r
+\r
+def test_get_cpu_list(real_stx_aio_client):\r
+    stxSaClientImp = StxSaClientImp(real_stx_aio_client)\r
+    assert stxSaClientImp is not None\r
+    hostlist = stxSaClientImp.getPserverList()\r
+    assert len(hostlist) > 0\r
+\r
+    cpulist = stxSaClientImp.getCpuList(hostlist[0].id)\r
+    assert len(cpulist) > 0\r
+    cpu1 = cpulist[0]\r
+    cpu2 = stxSaClientImp.getCpu(cpu1.id)\r
+    assert cpu1 != cpu2\r
+    assert cpu1.id == cpu2.id\r