Debug all the tenant commands in moonclient and fix some bugs in opnfv-moon related... 16/1516/1
authorasteroide <thomas.duval@orange.com>
Fri, 11 Sep 2015 15:45:54 +0000 (17:45 +0200)
committerasteroide <thomas.duval@orange.com>
Fri, 11 Sep 2015 15:45:54 +0000 (17:45 +0200)
Change-Id: I1d21df2a55545582a98c17181255ab53cab5689b

keystone-moon/keystone/contrib/moon/backends/sql.py
keystone-moon/keystone/contrib/moon/controllers.py
keystone-moon/keystone/contrib/moon/core.py
keystone-moon/keystone/tests/moon/unit/test_unit_core_tenant.py
moonclient/moonclient/intraextension.py
moonclient/moonclient/shell.py
moonclient/moonclient/tenants.py

index 9f4beb6..43bd307 100644 (file)
@@ -323,8 +323,21 @@ __all_objects__ = (
     Rule,
 )
 
+
 class TenantConnector(TenantDriver):
 
+    @staticmethod
+    def __update_dict(base, update):
+        """Update a dict only if values are not None
+
+        :param base: dict to update
+        :param update: updates for the base dict
+        :return: None
+        """
+        for key in update:
+            if type(update[key]) is not None:
+                base[key] = update[key]
+
     def get_tenants_dict(self):
         with sql.transaction() as session:
             query = session.query(Tenant)
@@ -354,13 +367,10 @@ class TenantConnector(TenantDriver):
             query = session.query(Tenant)
             query = query.filter_by(id=tenant_id)
             ref = query.first()
-            tenant_ref = ref.to_dict()
-            tenant_ref.update(tenant_dict)
-            new_tenant = Tenant(id=tenant_id, tenant=tenant_ref)
-            for attr in Tenant.attributes:
-                if attr != 'id':
-                    setattr(ref, attr, getattr(new_tenant, attr))
-            return {ref.id: ref.tenant}
+            tenant_dict_orig = dict(ref.tenant)
+            self.__update_dict(tenant_dict_orig, tenant_dict)
+            setattr(ref, "tenant", tenant_dict_orig)
+            return {ref.id: tenant_dict_orig}
 
 
 class IntraExtensionConnector(IntraExtensionDriver):
index 4065eab..239650f 100644 (file)
@@ -92,9 +92,12 @@ class Tenants(controller.V3Controller):
         tenant_id = kw.get('tenant_id', None)
         tenant_dict = dict()
         tenant_dict['name'] = k_tenant_dict.get('name', None)
-        tenant_dict['description'] = kw.get('tenant_description', None)
-        tenant_dict['intra_authz_extension_id'] = kw.get('tenant_intra_authz_extension_id', None)
-        tenant_dict['intra_admin_extension_id'] = kw.get('tenant_intra_admin_extension_id', None)
+        if 'tenant_description' in kw:
+            tenant_dict['description'] = kw.get('tenant_description', None)
+        if 'tenant_intra_authz_extension_id' in kw:
+            tenant_dict['intra_authz_extension_id'] = kw.get('tenant_intra_authz_extension_id', None)
+        if 'tenant_intra_admin_extension_id' in kw:
+            tenant_dict['intra_admin_extension_id'] = kw.get('tenant_intra_admin_extension_id', None)
         self.tenant_api.set_tenant_dict(user_id, tenant_id, tenant_dict)
 
 
index 86aadc8..aa6db0c 100644 (file)
@@ -412,31 +412,30 @@ class TenantManager(manager.Manager):
         keystone_tenant = self.__get_keystone_tenant_dict(tenant_dict['id'], tenant_dict['name'])
         tenant_dict.update(keystone_tenant)
         # Sync users between intra_authz_extension and intra_admin_extension
-        if tenant_dict['intra_admin_extension_id']:
-            if not tenant_dict['intra_authz_extension_id']:
-                raise TenantNoIntraAuthzExtension()
-            # authz_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'])
-            # admin_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'])
-            # for _subject_id in authz_subjects_dict:
-            #     if _subject_id not in admin_subjects_dict:
-            #         self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'], authz_subjects_dict[_subject_id])
-            # for _subject_id in admin_subjects_dict:
-            #     if _subject_id not in authz_subjects_dict:
-            #         self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'], admin_subjects_dict[_subject_id])
-
-            # TODO (ateroide): check whether we can replace the below code by the above one
-            # NOTE (ateroide): at a first glance: no, subject_id changes depending on which intra_extesion is used
-            # we must use name which is constant.
-            authz_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'])
-            authz_subject_names_list = [authz_subjects_dict[subject_id]["name"] for subject_id in authz_subjects_dict]
-            admin_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'])
-            admin_subject_names_list = [admin_subjects_dict[subject_id]["name"] for subject_id in admin_subjects_dict]
-            for _subject_id in authz_subjects_dict:
-                if authz_subjects_dict[_subject_id]["name"] not in admin_subject_names_list:
-                    self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'], authz_subjects_dict[_subject_id])
-            for _subject_id in admin_subjects_dict:
-                if admin_subjects_dict[_subject_id]["name"] not in authz_subject_names_list:
-                    self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'], admin_subjects_dict[_subject_id])
+        if 'intra_admin_extension_id' in tenant_dict:
+            if 'intra_authz_extension_id' in tenant_dict:
+                # authz_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'])
+                # admin_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'])
+                # for _subject_id in authz_subjects_dict:
+                #     if _subject_id not in admin_subjects_dict:
+                #         self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'], authz_subjects_dict[_subject_id])
+                # for _subject_id in admin_subjects_dict:
+                #     if _subject_id not in authz_subjects_dict:
+                #         self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'], admin_subjects_dict[_subject_id])
+
+                # TODO (ateroide): check whether we can replace the below code by the above one
+                # NOTE (ateroide): at a first glance: no, subject_id changes depending on which intra_extesion is used
+                # we must use name which is constant.
+                authz_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'])
+                authz_subject_names_list = [authz_subjects_dict[subject_id]["name"] for subject_id in authz_subjects_dict]
+                admin_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'])
+                admin_subject_names_list = [admin_subjects_dict[subject_id]["name"] for subject_id in admin_subjects_dict]
+                for _subject_id in authz_subjects_dict:
+                    if authz_subjects_dict[_subject_id]["name"] not in admin_subject_names_list:
+                        self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'], authz_subjects_dict[_subject_id])
+                for _subject_id in admin_subjects_dict:
+                    if admin_subjects_dict[_subject_id]["name"] not in authz_subject_names_list:
+                        self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'], admin_subjects_dict[_subject_id])
 
         return self.driver.add_tenant_dict(tenant_dict['id'], tenant_dict)
 
@@ -463,19 +462,18 @@ class TenantManager(manager.Manager):
             raise TenantUnknown()
 
         # Sync users between intra_authz_extension and intra_admin_extension
-        if tenant_dict['intra_admin_extension_id']:
-            if not tenant_dict['intra_authz_extension_id']:
-                raise TenantNoIntraAuthzExtension
-            authz_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'])
-            authz_subject_names_list = [authz_subjects_dict[subject_id]["name"] for subject_id in authz_subjects_dict]
-            admin_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'])
-            admin_subject_names_list = [admin_subjects_dict[subject_id]["name"] for subject_id in admin_subjects_dict]
-            for _subject_id in authz_subjects_dict:
-                if authz_subjects_dict[_subject_id]["name"] not in admin_subject_names_list:
-                    self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'], authz_subjects_dict[_subject_id])
-            for _subject_id in admin_subjects_dict:
-                if admin_subjects_dict[_subject_id]["name"] not in authz_subject_names_list:
-                    self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'], admin_subjects_dict[_subject_id])
+        if 'intra_admin_extension_id' in tenant_dict:
+            if 'intra_authz_extension_id' in tenant_dict:
+                authz_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'])
+                authz_subject_names_list = [authz_subjects_dict[subject_id]["name"] for subject_id in authz_subjects_dict]
+                admin_subjects_dict = self.admin_api.get_subjects_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'])
+                admin_subject_names_list = [admin_subjects_dict[subject_id]["name"] for subject_id in admin_subjects_dict]
+                for _subject_id in authz_subjects_dict:
+                    if authz_subjects_dict[_subject_id]["name"] not in admin_subject_names_list:
+                        self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_admin_extension_id'], authz_subjects_dict[_subject_id])
+                for _subject_id in admin_subjects_dict:
+                    if admin_subjects_dict[_subject_id]["name"] not in authz_subject_names_list:
+                        self.admin_api.add_subject_dict(self.root_api.get_root_admin_id(), tenant_dict['intra_authz_extension_id'], admin_subjects_dict[_subject_id])
 
         return self.driver.set_tenant_dict(tenant_id, tenant_dict)
 
index bf0fab0..f8b2f4d 100644 (file)
@@ -183,28 +183,3 @@ class TestTenantManager(tests.TestCase):
         self.assertNotEqual(data, {})
 
         self.assertRaises(TenantAddedNameExisting, self.tenant_manager.add_tenant_dict, self.ADMIN_ID, new_tenant['id'], new_tenant)
-
-    def test_exception_tenant_no_intra_extension(self):
-        authz_intra_extension = create_intra_extension(self, policy_model="policy_authz")
-        admin_intra_extension = create_intra_extension(self, policy_model="policy_admin")
-        new_tenant = {
-            "id": uuid.uuid4().hex,
-            "name": "demo",
-            "description": uuid.uuid4().hex,
-            "intra_authz_extension_id": authz_intra_extension['id'],
-            "intra_admin_extension_id": admin_intra_extension['id'],
-        }
-        new_tenant['intra_authz_extension_id'] = None
-        self.assertRaises(TenantNoIntraAuthzExtension, self.tenant_manager.add_tenant_dict, self.ADMIN_ID, new_tenant['id'], new_tenant)
-        new_tenant['intra_authz_extension_id'] = authz_intra_extension['id']
-        data = self.tenant_manager.add_tenant_dict(user_id=self.ADMIN_ID, tenant_id=new_tenant['id'], tenant_dict=new_tenant)
-        data_id = data.keys()[0]
-        self.assertEquals(new_tenant["name"], data[data_id]["name"])
-        self.assertEquals(new_tenant["intra_authz_extension_id"], data[data_id]["intra_authz_extension_id"])
-        self.assertEquals(new_tenant["intra_admin_extension_id"], data[data_id]["intra_admin_extension_id"])
-        data = self.tenant_manager.get_tenants_dict(self.ADMIN_ID)
-        self.assertNotEqual(data, {})
-
-        new_tenant['intra_authz_extension_id'] = None
-        new_tenant['name'] = "demo2"
-        self.assertRaises(TenantNoIntraAuthzExtension, self.tenant_manager.set_tenant_dict, self.ADMIN_ID, data_id, new_tenant)
index c46927c..1842baa 100644 (file)
@@ -37,9 +37,9 @@ class IntraExtensionCreate(Command):
 
     def take_action(self, parsed_args):
         post_data = {
-            "name": parsed_args.name,
-            "policymodel": parsed_args.policy_model,
-            "description": parsed_args.description
+            "intra_extension_name": parsed_args.name,
+            "intra_extension_model": parsed_args.policy_model,
+            "intra_extension_description": parsed_args.description
         }
         ie = self.app.get_url("/v3/OS-MOON/intra_extensions", post_data=post_data, authtoken=True)
         if "id" not in ie:
@@ -59,11 +59,11 @@ class IntraExtensionList(Lister):
 
     def take_action(self, parsed_args):
         ie = self.app.get_url("/v3/OS-MOON/intra_extensions", authtoken=True)
-        if "intra_extensions" not in ie:
-            raise Exception("Error in command {}".format(ie))
+        if "intra_extensions" not in ie:
+            raise Exception("Error in command {}".format(ie))
         return (
-            ("id",),
-            ((_id, ) for _id in ie["intra_extensions"])
+            ("id", "name", "model"),
+            ((_id, ie[_id]["name"], ie[_id]["model"]) for _id in ie.keys())
         )
 
 
index 5005095..10b9651 100644 (file)
@@ -100,7 +100,7 @@ class MoonClient(App):
             method = "DELETE"
         self.log.debug("\033[32m{} {}\033[m".format(method, url))
         conn = httplib.HTTPConnection(self.host, self.port)
-        self.log.info("Host: {}:{}".format(self.host, self.port))
+        self.log.debug("Host: {}:{}".format(self.host, self.port))
         headers = {
             "Content-type": "application/x-www-form-urlencoded",
             "Accept": "text/plain,text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
index b51b00e..cc7c1de 100644 (file)
@@ -71,7 +71,7 @@ class TenantAdd(Command):
         if parsed_args.admin:
             post_data["tenant_intra_admin_extension_id"] = parsed_args.admin
         if parsed_args.desc:
-            post_data["description"] = parsed_args.desc
+            post_data["tenant_description"] = parsed_args.desc
         tenants = self.app.get_url("/v3/OS-MOON/tenants",
                                 post_data=post_data,
                                 authtoken=True)
@@ -154,20 +154,20 @@ class TenantSet(Command):
 
     def take_action(self, parsed_args):
         post_data = dict()
-        post_data["id"] = parsed_args.tenant_id
+        post_data["tenant_id"] = parsed_args.tenant_id
         if parsed_args.name:
-            post_data["name"] = parsed_args.tenant_name
-        if parsed_args.authz:
-            post_data["intra_authz_extension_id"] = parsed_args.authz
-        if parsed_args.admin:
-            post_data["intra_admin_extension_id"] = parsed_args.admin
-        if parsed_args.desc:
-            post_data["description"] = parsed_args.desc
-        tenants = self.app.get_url("/v3/OS-MOON/tenants/{}".format(post_data["id"]),
+            post_data["tenant_name"] = parsed_args.tenant_name
+        if parsed_args.authz is not None:
+            post_data["tenant_intra_authz_extension_id"] = parsed_args.authz
+        if parsed_args.admin is not None:
+            post_data["tenant_intra_admin_extension_id"] = parsed_args.admin
+        if parsed_args.desc is not None:
+            post_data["tenant_description"] = parsed_args.desc
+        tenants = self.app.get_url("/v3/OS-MOON/tenants/{}".format(post_data["tenant_id"]),
                                 post_data=post_data,
                                 authtoken=True)
         return (
-            ("id", "name", "description", "intra_authz_extension_id", "intra_admin_extension_id"),
+            ("id", "name", "description", "authz", "admin"),
             ((
                 tenant_id,
                 tenants[tenant_id]["name"],