Merge from OSM SO master
[osm/SO.git] / rwprojectmano / plugins / rwprojectmano / rift / tasklets / rwprojectmano / rolesmano.py
index ea3674a..0083c06 100644 (file)
@@ -34,7 +34,6 @@ from gi.repository import (
 )
 
 import rift.tasklets
-#TODO: Fix once merged to latest platform
 from rift.tasklets.rwproject.project import (
     StateMachine,
     User,
@@ -48,10 +47,7 @@ from rift.mano.utils.project import (
 )
 
 
-MANO_PROJECT_ROLES = [
-            'rw-project-mano:mano-oper',
-            'rw-project-mano:mano-admin',
-]
+from .projectmano import MANO_PROJECT_ROLES
 
 
 class ProjectConfigSubscriber(object):
@@ -80,6 +76,8 @@ class ProjectConfigSubscriber(object):
 
     def delete_user(self, cfg):
         user = User().pb(cfg)
+        self._log.error("Delete user {} for project {}".
+                        format(user.key, self.project_name))
         if user.key in self.users:
             roles = self.users[user.key]
             for role_key in list(roles):
@@ -88,6 +86,8 @@ class ProjectConfigSubscriber(object):
 
     def update_user(self, cfg):
         user = User().pb(cfg)
+        self._log.debug("Update user {} for project {}".
+                        format(user.key, self.project_name))
         cfg_roles = {}
         for cfg_role in cfg.mano_role:
             r = self.role_inst(cfg_role)
@@ -106,6 +106,8 @@ class ProjectConfigSubscriber(object):
                 self.update_role(user, cfg_roles[role_key])
 
     def delete_role(self, user, role_key):
+        self._log.error("Delete role {} for user {}".
+                        format(role_key, user.key))
         user_key = user.key
 
         try:
@@ -119,6 +121,8 @@ class ProjectConfigSubscriber(object):
             self.pub.delete_role(role_key, user_key)
 
     def update_role(self, user, role):
+        self._log.debug("Update role {} for user {}".
+                        format(role.role, user.key))
         user_key = user.key
 
         try:
@@ -237,6 +241,7 @@ class ProjectConfigSubscriber(object):
     def deregister(self):
         self._log.debug("De-registering DTS handler for project {}".
                         format(self.project_name))
+
         if self._reg:
             self._reg.deregister()
             self._reg = None
@@ -251,7 +256,7 @@ class RoleConfigPublisher(rift.tasklets.DtsConfigPublisher):
         self.project_name = project.name
         self.rbac_int = RwRbacInternalYang.YangData_RwRbacInternal_RwRbacInternal()
         self.roles = {}
-        self.proj_roles = MANO_PROJECT_ROLES
+        self.proj_roles = [role['mano-role'] for role in MANO_PROJECT_ROLES]
         self.proj_roles_published = False
 
     def get_xpath(self):
@@ -276,10 +281,25 @@ class RoleConfigPublisher(rift.tasklets.DtsConfigPublisher):
             self.create_project_role(role)
 
     def create_project_role(self, role):
+        self.log.error("Create project role for {}: {}".
+                       format(self.project_name, role.role))
         xpath = self.role_xpath(role.key)
         pb_role = self.pb_role(role)
         self._regh.update_element(xpath, pb_role)
 
+    def delete_project_roles(self):
+        for name in self.proj_roles:
+            role = RoleKeys()
+            role.role = name
+            role.keys = self.project_name
+            self.delete_project_role(role)
+
+    def delete_project_role(self, role):
+        self.log.error("Delete project role for {}: {}".
+                       format(self.project_name, role.role))
+        xpath = self.role_xpath(role.key)
+        self._regh.delete_element(xpath)
+
     def create_role(self, role_key, user_key):
         return  RoleKeysUsers(role_key, user_key)
 
@@ -288,6 +308,7 @@ class RoleConfigPublisher(rift.tasklets.DtsConfigPublisher):
         pbRole = self.rbac_int.create_role()
         pbRole.role = role.role
         pbRole.keys = role.keys
+        pbRole.state_machine.state = role.state.name
 
         return pbRole
 
@@ -322,12 +343,16 @@ class RoleConfigPublisher(rift.tasklets.DtsConfigPublisher):
             role.add_user(user)
             update = False
 
-        user.state = StateMachine.new
+        if update:
+            user.state = StateMachine.new
+        else:
+            user.state = StateMachine.new
 
         xpath = self.role_xpath(role_key)
+        self.log.debug("update role: {} user: {} ".format(role_key, user_key))
+
 
         pb_role_user = self.pb_role_user(role, user)
-        self.log.debug("add_update_role: xpath:{} pb_role:{}".format(xpath, pb_role_user))
 
         self._regh.update_element(xpath, pb_role_user)
 
@@ -340,13 +365,13 @@ class RoleConfigPublisher(rift.tasklets.DtsConfigPublisher):
 
         user.state = StateMachine.delete
         xpath = self.role_xpath(role_key)
-        self.log.debug("deleting role: {} user: {} ".format(role_key, user_key))
+        self.log.error("deleting role: {} user: {} ".format(role_key, user_key))
 
         pb_role = self.pb_role_user(role, user)
         self._regh.update_element(xpath, pb_role)
 
     def do_prepare(self, xact_info, action, ks_path, msg):
-        """Handle on_prepare.  To be overridden by Concreate Publisher Handler
+        """Handle on_prepare.
         """
         self.log.debug("do_prepare: action: {}, path: {} ks_path, msg: {}".format(action, ks_path, msg))
 
@@ -371,5 +396,6 @@ class RoleConfigPublisher(rift.tasklets.DtsConfigPublisher):
 
     def deregister(self):
         if self._regh:
+            self.delete_project_roles()
             self._regh.deregister()
             self._regh = None