Feature: 11055 Support of several node groups in clusters created by OSM​

Change-Id: I3f18708c33bb37cec77a05417b56fb5fba3dfda6
Signed-off-by: yshah <shahithya.y@tataelxsi.co.in>
diff --git a/osm_nbi/nbi.py b/osm_nbi/nbi.py
index 134d565..e67588c 100644
--- a/osm_nbi/nbi.py
+++ b/osm_nbi/nbi.py
@@ -731,6 +731,22 @@
                         "METHODS": ("POST",),
                         "ROLE_PERMISSION": "k8scluster:id:upgrade:",
                     },
+                    "nodegroup": {
+                        "METHODS": ("POST", "GET"),
+                        "ROLE_PERMISSION": "k8scluster:id:nodegroup:",
+                        "<ID>": {
+                            "METHODS": ("GET", "PATCH", "DELETE"),
+                            "ROLE_PERMISSION": "k8scluster:id:nodegroup:id",
+                            "scale": {
+                                "METHODS": ("POST",),
+                                "ROLE_PERMISSION": "k8scluster:id:nodegroup:id:scale:",
+                            },
+                        },
+                    },
+                    "ksus": {
+                        "METHODS": ("GET",),
+                        "ROLE_PERMISSION": "k8scluster:id:ksus:",
+                    },
                 },
                 "register": {
                     "METHODS": ("POST",),
@@ -1728,6 +1744,8 @@
                     engine_topic = "resources"
                 elif topic == "app_profiles":
                     engine_topic = "apps"
+                if topic == "clusters" and item == "nodegroup":
+                    engine_topic = "node_groups"
             elif main_topic == "k8scluster" and item in (
                 "upgrade",
                 "get_creds",
@@ -1811,6 +1829,22 @@
                     outdata = self.engine.get_item_list_cluster(
                         engine_session, engine_topic, kwargs, api_req=True
                     )
+                elif topic == "clusters" and item == "nodegroup" and args:
+                    _id = args[0]
+                    outdata = outdata = self.engine.get_item(
+                        engine_session, engine_topic, _id, kwargs, True
+                    )
+                elif topic == "clusters" and item == "nodegroup":
+                    kwargs["cluster_id"] = _id
+                    outdata = self.engine.get_item_list(
+                        engine_session, engine_topic, kwargs, api_req=True
+                    )
+                elif topic == "clusters" and item == "ksus":
+                    engine_topic = "ksus"
+                    kwargs["cluster_id"] = _id
+                    outdata = self.engine.get_cluster_list_ksu(
+                        engine_session, engine_topic, kwargs, api_req=True
+                    )
                 elif not _id:
                     outdata = self.engine.get_item_list(
                         engine_session, engine_topic, kwargs, api_req=True
@@ -2053,10 +2087,24 @@
                     )
                     outdata = {"op_id": op_id}
                 elif topic == "clusters" and item in ("upgrade", "scale"):
-                    op_id = self.engine.update_cluster(
+                    op_id = self.engine.update_item(
                         engine_session, engine_topic, _id, item, indata
                     )
                     outdata = {"op_id": op_id}
+                elif topic == "clusters" and item == "nodegroup":
+                    indata["cluster_id"] = _id
+                    if args:
+                        _id = args[0]
+                        op_id = self.engine.update_item(
+                            engine_session, engine_topic, _id, item, indata
+                        )
+                        outdata = {"op_id": op_id}
+                    else:
+                        _id, _ = self.engine.new_item(
+                            rollback, engine_session, engine_topic, indata, kwargs
+                        )
+                        self._set_location_header(main_topic, version, topic, _id)
+                        outdata = {"_id": _id, "id": _id}
                 else:
                     _id, op_id = self.engine.new_item(
                         rollback,
@@ -2119,6 +2167,11 @@
                             if op_id
                             else HTTPStatus.NO_CONTENT.value
                         )
+                    elif topic == "clusters" and item == "nodegroup" and args:
+                        _id = args[0]
+                        op_id = self.engine.del_item(engine_session, engine_topic, _id)
+                        if op_id:
+                            outdata = {"_id": op_id}
                     elif topic == "ksus":
                         op_id = self.engine.delete_ksu(
                             engine_session, engine_topic, _id, indata
@@ -2206,6 +2259,11 @@
                         )
                         if not completed:
                             cherrypy.response.headers["Transaction-Id"] = id
+                elif topic == "clusters" and item == "nodegroup" and args:
+                    _id = args[0]
+                    op_id = self.engine.edit_item(
+                        engine_session, engine_topic, _id, indata, kwargs
+                    )
                 else:
                     op_id = self.engine.edit_item(
                         engine_session, engine_topic, _id, indata, kwargs