Feature 9015: use same names for quotas and roles 19/9019/4
authortierno <alfonso.tiernosepulveda@telefonica.com>
Tue, 2 Jun 2020 10:07:41 +0000 (10:07 +0000)
committertierno <alfonso.tiernosepulveda@telefonica.com>
Wed, 3 Jun 2020 22:17:45 +0000 (22:17 +0000)
add osmrepos to quotas

Change-Id: I8cf11677b8aa5612f78ff10492d432849b33cd08
Signed-off-by: tierno <alfonso.tiernosepulveda@telefonica.com>
osm_nbi/admin_topics.py
osm_nbi/base_topic.py
osm_nbi/descriptor_topics.py
osm_nbi/instance_topics.py
osm_nbi/validation.py

index 26c44d2..6342ba2 100644 (file)
@@ -398,6 +398,7 @@ class WimAccountTopic(CommonVimWimSdn):
 class SdnTopic(CommonVimWimSdn):
     topic = "sdns"
     topic_msg = "sdn"
 class SdnTopic(CommonVimWimSdn):
     topic = "sdns"
     topic_msg = "sdn"
+    quota_name = "sdn_controllers"
     schema_new = sdn_new_schema
     schema_edit = sdn_edit_schema
     multiproject = True
     schema_new = sdn_new_schema
     schema_edit = sdn_edit_schema
     multiproject = True
index 1f7f5d4..2986b81 100644 (file)
@@ -69,6 +69,7 @@ class BaseTopic:
     # static variables for all instance classes
     topic = None        # to_override
     topic_msg = None    # to_override
     # static variables for all instance classes
     topic = None        # to_override
     topic_msg = None    # to_override
+    quota_name = None   # to_override. If not provided topic will be used for quota_name
     schema_new = None   # to_override
     schema_edit = None  # to_override
     multiproject = True  # True if this Topic can be shared by several projects. Then it contains _admin.projects_read
     schema_new = None   # to_override
     schema_edit = None  # to_override
     multiproject = True  # True if this Topic can be shared by several projects. Then it contains _admin.projects_read
@@ -107,12 +108,12 @@ class BaseTopic:
         """
         Check whether topic quota is exceeded by the given project
         Used by relevant topics' 'new' function to decide whether or not creation of the new item should be allowed
         """
         Check whether topic quota is exceeded by the given project
         Used by relevant topics' 'new' function to decide whether or not creation of the new item should be allowed
-        :param projects: projects (tuple) for which quota should be checked
-        :param override: boolean. If true, don't raise ValidationError even though quota be exceeded
+        :param session[project_id]: projects (tuple) for which quota should be checked
+        :param session[force]: boolean. If true, skip quota checking
         :return: None
         :raise:
             DbException if project not found
         :return: None
         :raise:
             DbException if project not found
-            ValidationError if quota exceeded and not overridden
+            ValidationError if quota exceeded in one of the projects
         """
         if session["force"]:
             return
         """
         if session["force"]:
             return
@@ -120,11 +121,12 @@ class BaseTopic:
         for project in projects:
             proj = self.auth.get_project(project)
             pid = proj["_id"]
         for project in projects:
             proj = self.auth.get_project(project)
             pid = proj["_id"]
-            quota = proj.get("quotas", {}).get(self.topic, self.default_quota)
+            quota_name = self.quota_name or self.topic
+            quota = proj.get("quotas", {}).get(quota_name, self.default_quota)
             count = self.db.count(self.topic, {"_admin.projects_read": pid})
             if count >= quota:
                 name = proj["name"]
             count = self.db.count(self.topic, {"_admin.projects_read": pid})
             if count >= quota:
                 name = proj["name"]
-                raise ValidationError("quota ({}={}) exceeded for project {} ({})".format(self.topic, quota, name, pid),
+                raise ValidationError("quota ({}={}) exceeded for project {} ({})".format(quota_name, quota, name, pid),
                                       http_code=HTTPStatus.UNAUTHORIZED)
 
     def _validate_input_new(self, input, force=False):
                                       http_code=HTTPStatus.UNAUTHORIZED)
 
     def _validate_input_new(self, input, force=False):
index a5cc196..517f1db 100644 (file)
@@ -856,6 +856,7 @@ class NsdTopic(DescriptorTopic):
 class NstTopic(DescriptorTopic):
     topic = "nsts"
     topic_msg = "nst"
 class NstTopic(DescriptorTopic):
     topic = "nsts"
     topic_msg = "nst"
+    quota_name = "slice_templates"
 
     def __init__(self, db, fs, msg, auth):
         DescriptorTopic.__init__(self, db, fs, msg, auth)
 
     def __init__(self, db, fs, msg, auth):
         DescriptorTopic.__init__(self, db, fs, msg, auth)
@@ -929,6 +930,7 @@ class NstTopic(DescriptorTopic):
 class PduTopic(BaseTopic):
     topic = "pdus"
     topic_msg = "pdu"
 class PduTopic(BaseTopic):
     topic = "pdus"
     topic_msg = "pdu"
+    quota_name = "pduds"
     schema_new = pdu_new_schema
     schema_edit = pdu_edit_schema
 
     schema_new = pdu_new_schema
     schema_edit = pdu_edit_schema
 
index e091abd..d58fc3d 100644 (file)
@@ -34,6 +34,7 @@ __author__ = "Alfonso Tierno <alfonso.tiernosepulveda@telefonica.com>"
 class NsrTopic(BaseTopic):
     topic = "nsrs"
     topic_msg = "ns"
 class NsrTopic(BaseTopic):
     topic = "nsrs"
     topic_msg = "ns"
+    quota_name = "ns_instances"
     schema_new = ns_instantiate
 
     def __init__(self, db, fs, msg, auth):
     schema_new = ns_instantiate
 
     def __init__(self, db, fs, msg, auth):
@@ -1070,6 +1071,7 @@ class NsLcmOpTopic(BaseTopic):
 class NsiTopic(BaseTopic):
     topic = "nsis"
     topic_msg = "nsi"
 class NsiTopic(BaseTopic):
     topic = "nsis"
     topic_msg = "nsi"
+    quota_name = "slice_instances"
 
     def __init__(self, db, fs, msg, auth):
         BaseTopic.__init__(self, db, fs, msg, auth)
 
     def __init__(self, db, fs, msg, auth):
         BaseTopic.__init__(self, db, fs, msg, auth)
index 505201c..d93feb0 100644 (file)
@@ -831,8 +831,8 @@ user_edit_schema = {
 }
 
 # PROJECTS
 }
 
 # PROJECTS
-topics_with_quota = ["vnfds", "nsds", "nsts", "pdus", "nsrs", "nsis", "vim_accounts", "wim_accounts", "sdns",
-                     "k8sclusters", "k8srepos"]
+topics_with_quota = ["vnfds", "nsds", "slice_templates", "pduds", "ns_instances", "slice_instances", "vim_accounts",
+                     "wim_accounts", "sdn_controllers", "k8sclusters", "k8srepos", "osmrepos"]
 project_new_schema = {
     "$schema": "http://json-schema.org/draft-04/schema#",
     "title": "New project schema for administrators",
 project_new_schema = {
     "$schema": "http://json-schema.org/draft-04/schema#",
     "title": "New project schema for administrators",