diff --git a/neutron_tempest_plugin/api/admin/test_external_network_extension.py b/neutron_tempest_plugin/api/admin/test_external_network_extension.py
index cf6c44d..c4b55c9 100644
--- a/neutron_tempest_plugin/api/admin/test_external_network_extension.py
+++ b/neutron_tempest_plugin/api/admin/test_external_network_extension.py
@@ -53,7 +53,7 @@
         self.client.create_rbac_policy(
             object_type='network', object_id=net['id'],
             action='access_as_external',
-            target_tenant=self.client2.tenant_id)
+            target_tenant=self.client2.project_id)
         body = self.client2.list_networks()
         networks_list = [n['id'] for n in body['networks']]
         self.assertIn(net['id'], networks_list)
@@ -107,7 +107,7 @@
         # changing wildcard to specific tenant should be okay since its the
         # only one using the network
         self.admin_client.update_rbac_policy(
-            rbac_pol['id'], target_tenant=self.client2.tenant_id)
+            rbac_pol['id'], target_tenant=self.client2.project_id)
 
     @decorators.idempotent_id('a5539002-5bdb-48b5-b124-e9eedd5975e6')
     def test_external_conversion_on_policy_create(self):
@@ -115,7 +115,7 @@
         self.admin_client.create_rbac_policy(
             object_type='network', object_id=net_id,
             action='access_as_external',
-            target_tenant=self.client2.tenant_id)
+            target_tenant=self.client2.project_id)
         body = self.admin_client.show_network(net_id)['network']
         self.assertTrue(body['router:external'])
 
@@ -138,13 +138,13 @@
         self.admin_client.create_rbac_policy(
             object_type='network', object_id=net_id,
             action='access_as_external',
-            target_tenant=self.admin_client.tenant_id)
+            target_tenant=self.admin_client.project_id)
         body = self.admin_client.show_network(net_id)['network']
         self.assertTrue(body['router:external'])
         policy2 = self.admin_client.create_rbac_policy(
             object_type='network', object_id=net_id,
             action='access_as_external',
-            target_tenant=self.client2.tenant_id)
+            target_tenant=self.client2.project_id)
         self.admin_client.delete_rbac_policy(policy2['rbac_policy']['id'])
         body = self.admin_client.show_network(net_id)['network']
         self.assertTrue(body['router:external'])
@@ -168,14 +168,14 @@
         self.admin_client.create_rbac_policy(
             object_type='network', object_id=net['id'],
             action='access_as_external',
-            target_tenant=self.admin_client.tenant_id)
+            target_tenant=self.admin_client.project_id)
         self.create_subnet(net, client=self.admin_client, enable_dhcp=False)
         with testtools.ExpectedException(lib_exc.NotFound):
             self.create_floatingip(net['id'], client=self.client2)
         self.admin_client.create_rbac_policy(
             object_type='network', object_id=net['id'],
             action='access_as_external',
-            target_tenant=self.client2.tenant_id)
+            target_tenant=self.client2.project_id)
         self.create_floatingip(net['id'], client=self.client2)
 
     @decorators.idempotent_id('476be1e0-f72e-47dc-9a14-4435926bbe82')
@@ -185,7 +185,7 @@
         self.admin_client.create_rbac_policy(
             object_type='network', object_id=net['id'],
             action='access_as_external',
-            target_tenant=self.client2.tenant_id)
+            target_tenant=self.client2.project_id)
         r = self.client2.create_router(
             data_utils.rand_name('router'),
             external_gateway_info={'network_id': net['id']})['router']
@@ -209,7 +209,7 @@
         tenant = self.admin_client.create_rbac_policy(
             object_type='network', object_id=net['id'],
             action='access_as_external',
-            target_tenant=self.client2.tenant_id)['rbac_policy']
+            target_tenant=self.client2.project_id)['rbac_policy']
         # now we can delete the policy because the tenant has its own policy
         # to allow it access
         self.admin_client.delete_rbac_policy(wildcard['id'])
diff --git a/neutron_tempest_plugin/api/admin/test_networks.py b/neutron_tempest_plugin/api/admin/test_networks.py
index 74e72ef..17a8990 100644
--- a/neutron_tempest_plugin/api/admin/test_networks.py
+++ b/neutron_tempest_plugin/api/admin/test_networks.py
@@ -25,7 +25,7 @@
     @decorators.idempotent_id('d3c76044-d067-4cb0-ae47-8cdd875c7f67')
     @utils.requires_ext(extension="project-id", service="network")
     def test_create_network_with_project(self):
-        project_id = self.client.tenant_id  # non-admin
+        project_id = self.client.project_id  # non-admin
 
         name = 'admin-created-with-project_id'
         network = self.create_network(name, project_id=project_id,
@@ -43,7 +43,7 @@
     @decorators.idempotent_id('8d21aaca-4364-4eb9-8b79-44b4fff6373b')
     @utils.requires_ext(extension="project-id", service="network")
     def test_create_network_with_project_and_tenant(self):
-        project_id = self.client.tenant_id  # non-admin
+        project_id = self.client.project_id  # non-admin
 
         name = 'created-with-project-and-tenant'
         network = self.create_network(name, project_id=project_id,
@@ -62,7 +62,7 @@
     @decorators.idempotent_id('08b92179-669d-45ee-8233-ef6611190809')
     @utils.requires_ext(extension="project-id", service="network")
     def test_create_network_with_project_and_other_tenant(self):
-        project_id = self.client.tenant_id  # non-admin
+        project_id = self.client.project_id  # non-admin
         other_tenant = uuidutils.generate_uuid()
 
         name = 'created-with-project-and-other-tenant'
diff --git a/neutron_tempest_plugin/api/admin/test_shared_network_extension.py b/neutron_tempest_plugin/api/admin/test_shared_network_extension.py
index 1444b2d..5522194 100644
--- a/neutron_tempest_plugin/api/admin/test_shared_network_extension.py
+++ b/neutron_tempest_plugin/api/admin/test_shared_network_extension.py
@@ -214,7 +214,7 @@
     @decorators.idempotent_id('86c3529b-1231-40de-803c-afffffff1fff')
     def test_network_only_visible_to_policy_target(self):
         net = self._make_admin_net_and_subnet_shared_to_project_id(
-            self.client.tenant_id)['network']
+            self.client.project_id)['network']
         self.client.show_network(net['id'])
         with testtools.ExpectedException(lib_exc.NotFound):
             # client2 has not been granted access
@@ -223,7 +223,7 @@
     @decorators.idempotent_id('86c3529b-1231-40de-803c-afffffff2fff')
     def test_subnet_on_network_only_visible_to_policy_target(self):
         sub = self._make_admin_net_and_subnet_shared_to_project_id(
-            self.client.tenant_id)['subnet']
+            self.client.project_id)['subnet']
         self.client.show_subnet(sub['id'])
         with testtools.ExpectedException(lib_exc.NotFound):
             # client2 has not been granted access
@@ -232,11 +232,11 @@
     @decorators.idempotent_id('86c3529b-1231-40de-803c-afffffff2eee')
     def test_policy_target_update(self):
         res = self._make_admin_net_and_subnet_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         # change to client2
         update_res = self.admin_client.update_rbac_policy(
-                res['policy']['id'], target_tenant=self.client2.tenant_id)
-        self.assertEqual(self.client2.tenant_id,
+                res['policy']['id'], target_tenant=self.client2.project_id)
+        self.assertEqual(self.client2.project_id,
                          update_res['rbac_policy']['target_tenant'])
         # make sure everything else stayed the same
         res['policy'].pop('target_tenant')
@@ -246,16 +246,17 @@
     @decorators.idempotent_id('86c3529b-1231-40de-803c-affefefef321')
     def test_duplicate_policy_error(self):
         res = self._make_admin_net_and_subnet_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         with testtools.ExpectedException(lib_exc.Conflict):
             self.admin_client.create_rbac_policy(
                 object_type='network', object_id=res['network']['id'],
-                action='access_as_shared', target_tenant=self.client.tenant_id)
+                action='access_as_shared',
+                target_tenant=self.client.project_id)
 
     @decorators.idempotent_id('86c3529b-1231-40de-803c-afffffff3fff')
     def test_port_presence_prevents_network_rbac_policy_deletion(self):
         res = self._make_admin_net_and_subnet_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         port = self.create_port(res['network'])
         # a port on the network should prevent the deletion of a policy
         # required for it to exist
@@ -282,7 +283,7 @@
         net = self.create_network()  # owned by self.client
         self.client.create_rbac_policy(
             object_type='network', object_id=net['id'],
-            action='access_as_shared', target_tenant=self.client2.tenant_id)
+            action='access_as_shared', target_tenant=self.client2.project_id)
         port = self.client2.create_port(network_id=net['id'])['port']
         self.client.delete_port(port['id'])
 
@@ -300,7 +301,7 @@
             self.client2.show_network(net['id'])
         pol = self.client.create_rbac_policy(
             object_type='network', object_id=net['id'],
-            action='access_as_shared', target_tenant=self.client2.tenant_id)
+            action='access_as_shared', target_tenant=self.client2.project_id)
         self.client2.show_network(net['id'])
 
         self.assertIn(pol['rbac_policy'],
@@ -316,7 +317,7 @@
         net = self.create_network()
         self.client.create_rbac_policy(
             object_type='network', object_id=net['id'],
-            action='access_as_shared', target_tenant=self.client2.tenant_id)
+            action='access_as_shared', target_tenant=self.client2.project_id)
         field_args = (('id',), ('id', 'action'), ('object_type', 'object_id'),
                       ('project_id', 'target_tenant'))
         for fields in field_args:
@@ -326,7 +327,7 @@
     @decorators.idempotent_id('86c3529b-1231-40de-803c-afffffff5fff')
     def test_policy_show(self):
         res = self._make_admin_net_and_subnet_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         p1 = res['policy']
         p2 = self.admin_client.create_rbac_policy(
             object_type='network', object_id=res['network']['id'],
@@ -344,11 +345,11 @@
         pol1 = self.client.create_rbac_policy(
             object_type='network', object_id=net['id'],
             action='access_as_shared',
-            target_tenant=self.client2.tenant_id)['rbac_policy']
+            target_tenant=self.client2.project_id)['rbac_policy']
         pol2 = self.client.create_rbac_policy(
             object_type='network', object_id=net['id'],
             action='access_as_shared',
-            target_tenant=self.client.tenant_id)['rbac_policy']
+            target_tenant=self.client.project_id)['rbac_policy']
         res1 = self.client.list_rbac_policies(id=pol1['id'])['rbac_policies']
         res2 = self.client.list_rbac_policies(id=pol2['id'])['rbac_policies']
         self.assertEqual(1, len(res1))
@@ -359,16 +360,17 @@
     @decorators.idempotent_id('86c3529b-1231-40de-803c-afffffff6fff')
     def test_regular_client_blocked_from_sharing_anothers_network(self):
         net = self._make_admin_net_and_subnet_shared_to_project_id(
-            self.client.tenant_id)['network']
+            self.client.project_id)['network']
         with testtools.ExpectedException(lib_exc.BadRequest):
             self.client.create_rbac_policy(
                 object_type='network', object_id=net['id'],
-                action='access_as_shared', target_tenant=self.client.tenant_id)
+                action='access_as_shared',
+                target_tenant=self.client.project_id)
 
     @decorators.idempotent_id('c5f8f785-ce8d-4430-af7e-a236205862fb')
     @utils.requires_ext(extension="quotas", service="network")
     def test_rbac_policy_quota(self):
-        quota = self.client.show_quotas(self.client.tenant_id)['quota']
+        quota = self.client.show_quotas(self.client.project_id)['quota']
         max_policies = quota['rbac_policy']
         self.assertGreater(max_policies, 0)
         net = self.client.create_network(
@@ -391,7 +393,7 @@
         # ensure it works on update as well
         pol = self.client.create_rbac_policy(
             object_type='network', object_id=net['id'],
-            action='access_as_shared', target_tenant=self.client2.tenant_id)
+            action='access_as_shared', target_tenant=self.client2.project_id)
         with testtools.ExpectedException(lib_exc.Forbidden):
             self.client.update_rbac_policy(pol['rbac_policy']['id'],
                                            target_tenant='*')
@@ -405,14 +407,14 @@
                          target_tenant=net['project_id'])['rbac_policy']
         port = self.create_port(net)
         self.client.update_rbac_policy(self_share['id'],
-                                       target_tenant=self.client2.tenant_id)
+                                       target_tenant=self.client2.project_id)
         self.client.delete_port(port['id'])
 
     @utils.requires_ext(extension="standard-attr-revisions", service="network")
     @decorators.idempotent_id('86c3529b-1231-40de-1234-89664291a4cb')
     def test_rbac_bumps_network_revision(self):
         resp = self._make_admin_net_and_subnet_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         net_id = resp['network']['id']
         rev = self.client.show_network(net_id)['network']['revision_number']
         self.admin_client.create_rbac_policy(
@@ -426,7 +428,7 @@
     @decorators.idempotent_id('86c3529b-1231-40de-803c-aeeeeeee7fff')
     def test_filtering_works_with_rbac_records_present(self):
         resp = self._make_admin_net_and_subnet_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         net = resp['network']['id']
         sub = resp['subnet']['id']
         self.admin_client.create_rbac_policy(
diff --git a/neutron_tempest_plugin/api/base.py b/neutron_tempest_plugin/api/base.py
index 10821c1..b66fe0d 100644
--- a/neutron_tempest_plugin/api/base.py
+++ b/neutron_tempest_plugin/api/base.py
@@ -386,7 +386,7 @@
                     # Keep this network visible from current project
                     project_id = (kwargs.get('project_id') or
                                   kwargs.get('tenant_id') or
-                                  cls.client.tenant_id)
+                                  cls.client.project_id)
                     kwargs.update(project_id=project_id, tenant_id=project_id)
             else:
                 # Use default client
diff --git a/neutron_tempest_plugin/api/test_address_groups.py b/neutron_tempest_plugin/api/test_address_groups.py
index 69f22d0..ee0064c 100644
--- a/neutron_tempest_plugin/api/test_address_groups.py
+++ b/neutron_tempest_plugin/api/test_address_groups.py
@@ -171,11 +171,11 @@
     @decorators.idempotent_id('95f59a88-c47e-4dd9-a231-85f1782753a7')
     def test_policy_target_update(self):
         res = self._make_admin_ag_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         # change to client2
         update_res = self.admin_client.update_rbac_policy(
-                res['rbac_policy']['id'], target_tenant=self.client2.tenant_id)
-        self.assertEqual(self.client2.tenant_id,
+            res['rbac_policy']['id'], target_tenant=self.client2.project_id)
+        self.assertEqual(self.client2.project_id,
                          update_res['rbac_policy']['target_tenant'])
         # make sure everything else stayed the same
         res['rbac_policy'].pop('target_tenant')
@@ -185,7 +185,7 @@
     @decorators.idempotent_id('35a214c9-5c99-468f-9242-34d0529cabfa')
     def test_secgrprule_presence_prevents_policy_rbac_policy_deletion(self):
         res = self._make_admin_ag_shared_to_project_id(
-            self.client2.tenant_id)
+            self.client2.project_id)
         ag_id = res['address_group']['id']
         security_group = self.create_security_group(client=self.client2)
         protocol = random.choice(list(base_security_groups.V4_PROTOCOL_NAMES))
@@ -213,7 +213,7 @@
         rbac_policy = self.admin_client.create_rbac_policy(
             object_type='address_group', object_id=ag['id'],
             action='access_as_shared',
-            target_tenant=self.client.tenant_id)['rbac_policy']
+            target_tenant=self.client.project_id)['rbac_policy']
         self.client.show_address_group(ag['id'])
 
         self.assertIn(rbac_policy,
@@ -228,7 +228,7 @@
         ag = self._create_address_group()
         self.admin_client.create_rbac_policy(
             object_type='address_group', object_id=ag['id'],
-            action='access_as_shared', target_tenant=self.client2.tenant_id)
+            action='access_as_shared', target_tenant=self.client2.project_id)
         field_args = (('id',), ('id', 'action'), ('object_type', 'object_id'),
                       ('project_id', 'target_tenant'))
         for fields in field_args:
@@ -238,7 +238,7 @@
     @decorators.idempotent_id('20b2706b-1cea-4724-ab72-d7452ecb1fc4')
     def test_rbac_policy_show(self):
         res = self._make_admin_ag_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         p1 = res['rbac_policy']
         p2 = self.admin_client.create_rbac_policy(
             object_type='address_group',
@@ -257,11 +257,11 @@
         rbac_pol1 = self.admin_client.create_rbac_policy(
             object_type='address_group', object_id=ag['id'],
             action='access_as_shared',
-            target_tenant=self.client2.tenant_id)['rbac_policy']
+            target_tenant=self.client2.project_id)['rbac_policy']
         rbac_pol2 = self.admin_client.create_rbac_policy(
             object_type='address_group', object_id=ag['id'],
             action='access_as_shared',
-            target_tenant=self.admin_client.tenant_id)['rbac_policy']
+            target_tenant=self.admin_client.project_id)['rbac_policy']
         res1 = self.admin_client.list_rbac_policies(id=rbac_pol1['id'])[
             'rbac_policies']
         res2 = self.admin_client.list_rbac_policies(id=rbac_pol2['id'])[
@@ -274,12 +274,12 @@
     @decorators.idempotent_id('a0f3a01a-e2c7-47d6-9385-0cd7a7f0c996')
     def test_regular_client_blocked_from_sharing_anothers_policy(self):
         ag = self._make_admin_ag_shared_to_project_id(
-            self.client.tenant_id)['address_group']
+            self.client.project_id)['address_group']
         with testtools.ExpectedException(exceptions.BadRequest):
             self.client.create_rbac_policy(
                 object_type='address_group', object_id=ag['id'],
                 action='access_as_shared',
-                target_tenant=self.client2.tenant_id)
+                target_tenant=self.client2.project_id)
 
         # make sure the rbac-policy is invisible to the tenant for which it's
         # being shared
@@ -292,7 +292,7 @@
         self.admin_client.create_rbac_policy(
             object_type='address_group', object_id=ag['id'],
             action='access_as_shared',
-            target_tenant=self.client.tenant_id)['rbac_policy']
+            target_tenant=self.client.project_id)['rbac_policy']
         self.client.show_address_group(ag['id'])
         with testtools.ExpectedException(exceptions.NotFound):
             self.client.update_address_group(ag['id'], name='new_name')
diff --git a/neutron_tempest_plugin/api/test_address_scopes.py b/neutron_tempest_plugin/api/test_address_scopes.py
index b8c143a..76592a0 100644
--- a/neutron_tempest_plugin/api/test_address_scopes.py
+++ b/neutron_tempest_plugin/api/test_address_scopes.py
@@ -86,8 +86,8 @@
         show_addr_scope = body['address_scope']
         self.assertIn('project_id', show_addr_scope)
         self.assertIn('tenant_id', show_addr_scope)
-        self.assertEqual(self.client.tenant_id, show_addr_scope['project_id'])
-        self.assertEqual(self.client.tenant_id, show_addr_scope['tenant_id'])
+        self.assertEqual(self.client.project_id, show_addr_scope['project_id'])
+        self.assertEqual(self.client.project_id, show_addr_scope['tenant_id'])
 
     @decorators.idempotent_id('85a259b2-ace6-4e32-9657-a9a392b452aa')
     def test_tenant_update_address_scope(self):
@@ -142,11 +142,11 @@
     @decorators.idempotent_id('038e999b-cd4b-4021-a9ff-ebb734f6e056')
     def test_policy_target_update(self):
         res = self._make_admin_as_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         # change to client2
         update_res = self.admin_client.update_rbac_policy(
-                res['rbac_policy']['id'], target_tenant=self.client2.tenant_id)
-        self.assertEqual(self.client2.tenant_id,
+            res['rbac_policy']['id'], target_tenant=self.client2.project_id)
+        self.assertEqual(self.client2.project_id,
                          update_res['rbac_policy']['target_tenant'])
         # make sure everything else stayed the same
         res['rbac_policy'].pop('target_tenant')
@@ -156,7 +156,7 @@
     @decorators.idempotent_id('798ac6c6-96cc-49ce-ba5c-c6eced7a09d3')
     def test_subnet_pool_presence_prevents_rbac_policy_deletion(self):
         res = self._make_admin_as_shared_to_project_id(
-            self.client2.tenant_id)
+            self.client2.project_id)
         snp = self.create_subnetpool(
             data_utils.rand_name("rbac-address-scope"),
             default_prefixlen=24, prefixes=['10.0.0.0/8'],
@@ -183,7 +183,7 @@
         rbac_policy = self.admin_client.create_rbac_policy(
             object_type='address_scope', object_id=a_s['id'],
             action='access_as_shared',
-            target_tenant=self.client.tenant_id)['rbac_policy']
+            target_tenant=self.client.project_id)['rbac_policy']
         self.client.show_address_scope(a_s['id'])
 
         self.assertIn(rbac_policy,
@@ -198,7 +198,7 @@
         a_s = self._create_address_scope(ip_version=4)
         self.admin_client.create_rbac_policy(
             object_type='address_scope', object_id=a_s['id'],
-            action='access_as_shared', target_tenant=self.client2.tenant_id)
+            action='access_as_shared', target_tenant=self.client2.project_id)
         field_args = (('id',), ('id', 'action'), ('object_type', 'object_id'),
                       ('project_id', 'target_tenant'))
         for fields in field_args:
@@ -208,7 +208,7 @@
     @decorators.idempotent_id('19cbd62e-c6c3-4495-98b9-b9c6c6c9c127')
     def test_rbac_policy_show(self):
         res = self._make_admin_as_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         p1 = res['rbac_policy']
         p2 = self.admin_client.create_rbac_policy(
             object_type='address_scope',
@@ -227,11 +227,11 @@
         rbac_pol1 = self.admin_client.create_rbac_policy(
             object_type='address_scope', object_id=a_s['id'],
             action='access_as_shared',
-            target_tenant=self.client2.tenant_id)['rbac_policy']
+            target_tenant=self.client2.project_id)['rbac_policy']
         rbac_pol2 = self.admin_client.create_rbac_policy(
             object_type='address_scope', object_id=a_s['id'],
             action='access_as_shared',
-            target_tenant=self.admin_client.tenant_id)['rbac_policy']
+            target_tenant=self.admin_client.project_id)['rbac_policy']
         res1 = self.admin_client.list_rbac_policies(id=rbac_pol1['id'])[
             'rbac_policies']
         res2 = self.admin_client.list_rbac_policies(id=rbac_pol2['id'])[
@@ -244,12 +244,12 @@
     @decorators.idempotent_id('222a638d-819e-41a7-a3fe-550265c06e79')
     def test_regular_client_blocked_from_sharing_anothers_policy(self):
         a_s = self._make_admin_as_shared_to_project_id(
-            self.client.tenant_id)['address_scope']
+            self.client.project_id)['address_scope']
         with testtools.ExpectedException(lib_exc.BadRequest):
             self.client.create_rbac_policy(
                 object_type='address_scope', object_id=a_s['id'],
                 action='access_as_shared',
-                target_tenant=self.client2.tenant_id)
+                target_tenant=self.client2.project_id)
 
         # make sure the rbac-policy is invisible to the tenant for which it's
         # being shared
diff --git a/neutron_tempest_plugin/api/test_networks.py b/neutron_tempest_plugin/api/test_networks.py
index c685256..d79b7ab 100644
--- a/neutron_tempest_plugin/api/test_networks.py
+++ b/neutron_tempest_plugin/api/test_networks.py
@@ -49,7 +49,7 @@
             fields.append('mtu')
         for key in fields:
             self.assertEqual(network[key], self.network[key])
-        project_id = self.client.tenant_id
+        project_id = self.client.project_id
         self.assertEqual(project_id, network['tenant_id'])
         if utils.is_extension_enabled('project-id', 'network'):
             self.assertEqual(project_id, network['project_id'])
@@ -76,7 +76,7 @@
     @decorators.idempotent_id('0cc0552f-afaf-4231-b7a7-c2a1774616da')
     @utils.requires_ext(extension="project-id", service="network")
     def test_create_network_with_project(self):
-        project_id = self.client.tenant_id
+        project_id = self.client.project_id
 
         name = 'created-with-project_id'
         network = self.create_network(name, project_id=project_id)
diff --git a/neutron_tempest_plugin/api/test_qos.py b/neutron_tempest_plugin/api/test_qos.py
index fe12315..448f391 100644
--- a/neutron_tempest_plugin/api/test_qos.py
+++ b/neutron_tempest_plugin/api/test_qos.py
@@ -86,7 +86,7 @@
         body = self.admin_client.show_qos_policy(policy['id'])
         show_policy = body['policy']
         self.assertIn('project_id', show_policy)
-        self.assertEqual(self.admin_client.tenant_id,
+        self.assertEqual(self.admin_client.project_id,
                          show_policy['project_id'])
 
     @decorators.idempotent_id('f8d20e92-f06d-4805-b54f-230f77715815')
@@ -134,10 +134,11 @@
 
     @decorators.idempotent_id('8e88a54b-f0b2-4b7d-b061-a15d93c2c7d6')
     def test_policy_update(self):
-        policy = self.create_qos_policy(name=self.policy_name,
-                                        description='',
-                                        shared=False,
-                                        project_id=self.admin_client.tenant_id)
+        policy = self.create_qos_policy(
+            name=self.policy_name,
+            description='',
+            shared=False,
+            project_id=self.admin_client.project_id)
         self.admin_client.update_qos_policy(policy['id'],
                                             description='test policy desc2',
                                             shared=True)
@@ -153,7 +154,7 @@
         policy = self.create_qos_policy(name=self.policy_name,
                                         description='',
                                         shared=False,
-                                        project_id=self.client.tenant_id)
+                                        project_id=self.client.project_id)
         self.assertRaises(
             exceptions.Forbidden,
             self.client.update_qos_policy,
@@ -161,10 +162,11 @@
 
     @decorators.idempotent_id('4ecfd7e7-47b6-4702-be38-be9235901a87')
     def test_policy_update_forbidden_for_regular_tenants_foreign_policy(self):
-        policy = self.create_qos_policy(name=self.policy_name,
-                                        description='',
-                                        shared=False,
-                                        project_id=self.admin_client.tenant_id)
+        policy = self.create_qos_policy(
+            name=self.policy_name,
+            description='',
+            shared=False,
+            project_id=self.admin_client.project_id)
         self.assertRaises(
             exceptions.NotFound,
             self.client.update_qos_policy,
@@ -172,10 +174,11 @@
 
     @decorators.idempotent_id('ee263db4-009a-4641-83e5-d0e83506ba4c')
     def test_shared_policy_update(self):
-        policy = self.create_qos_policy(name=self.policy_name,
-                                        description='',
-                                        shared=True,
-                                        project_id=self.admin_client.tenant_id)
+        policy = self.create_qos_policy(
+            name=self.policy_name,
+            description='',
+            shared=True,
+            project_id=self.admin_client.project_id)
 
         self.admin_client.update_qos_policy(policy['id'],
                                             description='test policy desc2')
@@ -396,7 +399,7 @@
             name='test-policy-shared',
             description='shared policy',
             shared=True,
-            project_id=self.admin_client.tenant_id)
+            project_id=self.admin_client.project_id)
         obtained_policy = self.client.show_qos_policy(policy['id'])['policy']
         self.assertEqual(obtained_policy, policy)
 
@@ -438,11 +441,11 @@
     def test_user_create_port_with_admin_qos_policy(self):
         qos_policy = self.create_qos_policy(
             name=self.policy_name,
-            project_id=self.admin_client.tenant_id,
+            project_id=self.admin_client.project_id,
             shared=False)
         network = self.create_network(
             'test network', client=self.admin_client,
-            project_id=self.client.tenant_id,
+            project_id=self.client.project_id,
             qos_policy_id=qos_policy['id'])
         port = self.create_port(network)
         self.assertEqual(network['id'], port['network_id'])
@@ -603,7 +606,7 @@
         policy = self.create_qos_policy(name=self.policy_name,
                                         description='test policy',
                                         shared=False,
-                                        project_id=self.client.tenant_id)
+                                        project_id=self.client.project_id)
         rule = self._create_qos_bw_limit_rule(
             policy['id'],
             {'max_kbps': 1, 'max_burst_kbps': 1})
@@ -618,7 +621,7 @@
             name=self.policy_name,
             description='test policy',
             shared=False,
-            project_id=self.admin_client.tenant_id)
+            project_id=self.admin_client.project_id)
         rule = self._create_qos_bw_limit_rule(
             policy['id'], {'max_kbps': 1, 'max_burst_kbps': 1})
         self.assertRaises(
@@ -797,7 +800,7 @@
         qos_pol = self.create_qos_policy(
             name=data_utils.rand_name('test-policy'),
             description='test-shared-policy', shared=False,
-            project_id=self.admin_client.tenant_id)
+            project_id=self.admin_client.project_id)
         self.assertNotIn(qos_pol, self.client2.list_qos_policies()['policies'])
 
         # test update shared False -> True
@@ -805,8 +808,8 @@
         qos_pol['shared'] = True
         self.client2.show_qos_policy(qos_pol['id'])
         rbac_pol = {'target_tenant': '*',
-                    'tenant_id': self.admin_client.tenant_id,
-                    'project_id': self.admin_client.tenant_id,
+                    'tenant_id': self.admin_client.project_id,
+                    'project_id': self.admin_client.project_id,
                     'object_type': 'qos_policy',
                     'object_id': qos_pol['id'],
                     'action': 'access_as_shared'}
@@ -829,7 +832,7 @@
 
     def _create_net_bound_qos_rbacs(self):
         res = self._make_admin_policy_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         qos_policy, rbac_for_client_tenant = res['policy'], res['rbac_policy']
 
         # add a wildcard rbac rule - now the policy globally shared
@@ -862,7 +865,7 @@
     @decorators.idempotent_id('2ace9adc-da6e-11e5-aafe-54ee756c66df')
     def test_policy_sharing_with_wildcard_and_project_id(self):
         res = self._make_admin_policy_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         qos_policy, rbac = res['policy'], res['rbac_policy']
         qos_pol = self.client.show_qos_policy(qos_policy['id'])['policy']
         self.assertTrue(qos_pol['shared'])
@@ -885,11 +888,11 @@
     @decorators.idempotent_id('9f85c76a-a350-11e5-8ae5-54ee756c66df')
     def test_policy_target_update(self):
         res = self._make_admin_policy_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         # change to client2
         update_res = self.admin_client.update_rbac_policy(
-                res['rbac_policy']['id'], target_tenant=self.client2.tenant_id)
-        self.assertEqual(self.client2.tenant_id,
+            res['rbac_policy']['id'], target_tenant=self.client2.project_id)
+        self.assertEqual(self.client2.project_id,
                          update_res['rbac_policy']['target_tenant'])
         # make sure everything else stayed the same
         res['rbac_policy'].pop('target_tenant')
@@ -899,7 +902,7 @@
     @decorators.idempotent_id('a9b39f46-a350-11e5-97c7-54ee756c66df')
     def test_network_presence_prevents_policy_rbac_policy_deletion(self):
         res = self._make_admin_policy_shared_to_project_id(
-            self.client2.tenant_id)
+            self.client2.project_id)
         qos_policy_id = res['policy']['id']
         self._create_network(qos_policy_id, self.client2)
         # a network with shared qos-policy should prevent the deletion of an
@@ -922,7 +925,7 @@
         # we can't update the policy to a different tenant
         with testtools.ExpectedException(exceptions.Conflict):
             self.admin_client.update_rbac_policy(
-                wild['id'], target_tenant=self.client2.tenant_id)
+                wild['id'], target_tenant=self.client2.project_id)
 
     @decorators.idempotent_id('b0fe87e8-a350-11e5-9f08-54ee756c66df')
     def test_regular_client_shares_to_another_regular_client(self):
@@ -933,7 +936,7 @@
         rbac_policy = self.admin_client.create_rbac_policy(
             object_type='qos_policy', object_id=policy['id'],
             action='access_as_shared',
-            target_tenant=self.client.tenant_id)['rbac_policy']
+            target_tenant=self.client.project_id)['rbac_policy']
         self.client.show_qos_policy(policy['id'])
 
         self.assertIn(rbac_policy,
@@ -948,7 +951,7 @@
         policy = self._create_qos_policy()
         self.admin_client.create_rbac_policy(
             object_type='qos_policy', object_id=policy['id'],
-            action='access_as_shared', target_tenant=self.client2.tenant_id)
+            action='access_as_shared', target_tenant=self.client2.project_id)
         field_args = (('id',), ('id', 'action'), ('object_type', 'object_id'),
                       ('project_id', 'target_tenant'))
         for fields in field_args:
@@ -958,7 +961,7 @@
     @decorators.idempotent_id('c10d993a-a350-11e5-9c7a-54ee756c66df')
     def test_rbac_policy_show(self):
         res = self._make_admin_policy_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         p1 = res['rbac_policy']
         p2 = self.admin_client.create_rbac_policy(
             object_type='qos_policy', object_id=res['policy']['id'],
@@ -976,11 +979,11 @@
         rbac_pol1 = self.admin_client.create_rbac_policy(
             object_type='qos_policy', object_id=policy['id'],
             action='access_as_shared',
-            target_tenant=self.client2.tenant_id)['rbac_policy']
+            target_tenant=self.client2.project_id)['rbac_policy']
         rbac_pol2 = self.admin_client.create_rbac_policy(
             object_type='qos_policy', object_id=policy['id'],
             action='access_as_shared',
-            target_tenant=self.admin_client.tenant_id)['rbac_policy']
+            target_tenant=self.admin_client.project_id)['rbac_policy']
         res1 = self.admin_client.list_rbac_policies(id=rbac_pol1['id'])[
             'rbac_policies']
         res2 = self.admin_client.list_rbac_policies(id=rbac_pol2['id'])[
@@ -993,12 +996,12 @@
     @decorators.idempotent_id('cd7d755a-a350-11e5-a344-54ee756c66df')
     def test_regular_client_blocked_from_sharing_anothers_policy(self):
         qos_policy = self._make_admin_policy_shared_to_project_id(
-            self.client.tenant_id)['policy']
+            self.client.project_id)['policy']
         with testtools.ExpectedException(exceptions.BadRequest):
             self.client.create_rbac_policy(
                 object_type='qos_policy', object_id=qos_policy['id'],
                 action='access_as_shared',
-                target_tenant=self.client2.tenant_id)
+                target_tenant=self.client2.project_id)
 
         # make sure the rbac-policy is invisible to the tenant for which it's
         # being shared
diff --git a/neutron_tempest_plugin/api/test_revisions.py b/neutron_tempest_plugin/api/test_revisions.py
index 0d590f6..09bb3f1 100644
--- a/neutron_tempest_plugin/api/test_revisions.py
+++ b/neutron_tempest_plugin/api/test_revisions.py
@@ -344,7 +344,7 @@
     def test_update_router_extra_attributes_bumps_revision(self):
         # updates from CVR to CVR-HA are supported on every release,
         # but only the admin can forcibly create a non-HA router
-        router_args = {'tenant_id': self.client.tenant_id,
+        router_args = {'tenant_id': self.client.project_id,
                        'ha': False}
         router = self.admin_client.create_router('r1', True,
             **router_args)['router']
diff --git a/neutron_tempest_plugin/api/test_router_interface_fip.py b/neutron_tempest_plugin/api/test_router_interface_fip.py
index 4369838..5d8ab67 100644
--- a/neutron_tempest_plugin/api/test_router_interface_fip.py
+++ b/neutron_tempest_plugin/api/test_router_interface_fip.py
@@ -61,7 +61,7 @@
         subnet1 = self.create_subnet(net1, cidr=cidr1)
         self.create_router_interface(router1['id'], subnet1['id'])
         net2 = self.admin_client.create_network(
-            project_id=self.client.tenant_id,
+            project_id=self.client.project_id,
             **{'router:external': True})['network']
         self.networks.append(net2)
         subnet2 = self.create_subnet(net2, cidr=cidr2)
diff --git a/neutron_tempest_plugin/api/test_routers.py b/neutron_tempest_plugin/api/test_routers.py
index 5e916f5..4179e6d 100644
--- a/neutron_tempest_plugin/api/test_routers.py
+++ b/neutron_tempest_plugin/api/test_routers.py
@@ -316,7 +316,7 @@
     @decorators.idempotent_id('644d7a4a-01a1-4b68-bb8d-0c0042cb1729')
     def test_convert_distributed_router_back_to_centralized(self):
         # Convert a centralized router to distributed firstly
-        router_args = {'tenant_id': self.client.tenant_id,
+        router_args = {'tenant_id': self.client.project_id,
                        'distributed': False, 'ha': False}
         router = self._create_admin_router(
             data_utils.rand_name('router'), admin_state_up=False,
@@ -348,7 +348,7 @@
 
     @decorators.idempotent_id('0ffb9973-0c1a-4b76-a1f2-060178057661')
     def test_convert_centralized_router_to_distributed_extended(self):
-        router_args = {'tenant_id': self.client.tenant_id,
+        router_args = {'tenant_id': self.client.project_id,
                        'distributed': False, 'ha': False}
         router = self._create_admin_router(
             data_utils.rand_name('router'), admin_state_up=True,
@@ -371,7 +371,7 @@
 
     @decorators.idempotent_id('e9a8f55b-c535-44b7-8b0a-20af6a7c2921')
     def test_convert_distributed_router_to_centralized_extended(self):
-        router_args = {'tenant_id': self.client.tenant_id,
+        router_args = {'tenant_id': self.client.project_id,
                        'distributed': True, 'ha': False}
         router = self._create_admin_router(
             data_utils.rand_name('router'), admin_state_up=True,
diff --git a/neutron_tempest_plugin/api/test_routers_negative.py b/neutron_tempest_plugin/api/test_routers_negative.py
index 9c83fc7..b51485b 100644
--- a/neutron_tempest_plugin/api/test_routers_negative.py
+++ b/neutron_tempest_plugin/api/test_routers_negative.py
@@ -124,7 +124,7 @@
     @decorators.idempotent_id('5379fe06-e45e-4a4f-8b4a-9e28a924b451')
     def test_router_update_distributed_returns_exception(self):
         # create a centralized router
-        router_args = {'tenant_id': self.client.tenant_id,
+        router_args = {'tenant_id': self.client.project_id,
                        'distributed': False}
         router = self._create_admin_router(
             data_utils.rand_name('router'), admin_state_up=True,
@@ -141,7 +141,7 @@
     @decorators.idempotent_id('c277e945-3b39-442d-b149-e2e8cc6a2b40')
     def test_router_update_centralized_returns_exception(self):
         # create a centralized router
-        router_args = {'tenant_id': self.client.tenant_id,
+        router_args = {'tenant_id': self.client.project_id,
                        'distributed': False}
         router = self._create_admin_router(
             data_utils.rand_name('router'), admin_state_up=True,
diff --git a/neutron_tempest_plugin/api/test_security_groups.py b/neutron_tempest_plugin/api/test_security_groups.py
index e7a9eae..14e0c66 100644
--- a/neutron_tempest_plugin/api/test_security_groups.py
+++ b/neutron_tempest_plugin/api/test_security_groups.py
@@ -71,7 +71,7 @@
         protocol = random.choice(list(base_security_groups.V4_PROTOCOL_NAMES))
         security_group_rule = self.create_security_group_rule(
             security_group=security_group,
-            project={'id': self.admin_client.tenant_id},
+            project={'id': self.admin_client.project_id},
             client=self.admin_client,
             protocol=protocol,
             direction=constants.INGRESS_DIRECTION)
@@ -97,7 +97,7 @@
         protocol = random.choice(list(base_security_groups.V4_PROTOCOL_NAMES))
         security_group_rule = self.create_security_group_rule(
             security_group=security_group,
-            project={'id': self.admin_client.tenant_id},
+            project={'id': self.admin_client.project_id},
             client=self.admin_client,
             protocol=protocol,
             direction=constants.INGRESS_DIRECTION)
@@ -105,7 +105,7 @@
         # Create also other SG with some custom rule to check that regular user
         # can't see this rule
         sg_kwargs = {
-            'project': {'id': self.admin_client.tenant_id},
+            'project': {'id': self.admin_client.project_id},
             'client': self.admin_client
         }
         if self.stateless_sg:
@@ -113,7 +113,7 @@
         admin_security_group = self.create_security_group(**sg_kwargs)
         admin_security_group_rule = self.create_security_group_rule(
             security_group=admin_security_group,
-            project={'id': self.admin_client.tenant_id},
+            project={'id': self.admin_client.project_id},
             client=self.admin_client,
             protocol=protocol,
             direction=constants.INGRESS_DIRECTION)
@@ -272,18 +272,18 @@
 
     def _set_sg_quota(self, val):
         sg_quota = self._get_sg_quota()
-        project_id = self.client.tenant_id
+        project_id = self.client.project_id
         self.admin_client.update_quotas(project_id, **{'security_group': val})
         self.addCleanup(self.admin_client.update_quotas,
                         project_id, **{'security_group': sg_quota})
 
     def _get_sg_quota(self):
-        project_id = self.client.tenant_id
+        project_id = self.client.project_id
         quotas = self.admin_client.show_quotas(project_id)
         return quotas['quota']['security_group']
 
     def _get_sg_amount(self):
-        project_id = self.client.tenant_id
+        project_id = self.client.project_id
         filter_query = {'project_id': project_id}
         security_groups = self.client.list_security_groups(**filter_query)
         return len(security_groups['security_groups'])
@@ -341,7 +341,7 @@
     def _create_security_group_rules(self, amount, port_index=1):
         for i in range(amount):
             ingress_rule = self.create_security_group_rule(**{
-                'project_id': self.client.tenant_id,
+                'project_id': self.client.project_id,
                 'direction': 'ingress',
                 'port_range_max': port_index + i,
                 'port_range_min': port_index + i,
@@ -364,18 +364,18 @@
         return new_sg_rules_quota
 
     def _set_sg_rules_quota(self, val):
-        project_id = self.client.tenant_id
+        project_id = self.client.project_id
         self.admin_client.update_quotas(project_id,
                                         **{'security_group_rule': val})
         LOG.info('Trying to update security group rule quota {} '.format(val))
 
     def _get_sg_rules_quota(self):
-        project_id = self.client.tenant_id
+        project_id = self.client.project_id
         quotas = self.admin_client.show_quotas(project_id)
         return quotas['quota']['security_group_rule']
 
     def _get_sg_rules_amount(self):
-        project_id = self.client.tenant_id
+        project_id = self.client.project_id
         filter_query = {'project_id': project_id}
         security_group_rules = self.client.list_security_group_rules(
                 **filter_query)
@@ -390,7 +390,7 @@
     def setUp(self):
         super(SecGroupRulesQuotaTest, self).setUp()
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.admin_client.reset_quotas, self.client.tenant_id)
+                        self.admin_client.reset_quotas, self.client.project_id)
         self._set_sg_rules_quota(10)
 
     @decorators.idempotent_id('77ec038c-5638-11ea-8e2d-0242ac130003')
@@ -416,7 +416,7 @@
         values, different values.
         """
         sg_rules_quota = self._get_sg_rules_quota()
-        project_id = self.client.tenant_id
+        project_id = self.client.project_id
         self.addCleanup(self.admin_client.update_quotas,
                         project_id, **{'security_group_rule': sg_rules_quota})
         values = [-1, 0, 10, 2147483647]
@@ -569,7 +569,7 @@
     def _create_security_group(self):
         return self.create_security_group(
             name=data_utils.rand_name('test-sg'),
-            project={'id': self.admin_client.tenant_id})
+            project={'id': self.admin_client.project_id})
 
     def _make_admin_sg_shared_to_project_id(self, project_id):
         sg = self._create_security_group()
@@ -584,11 +584,11 @@
     @decorators.idempotent_id('2a41eb8f-2a35-11e9-bae9-acde48001122')
     def test_policy_target_update(self):
         res = self._make_admin_sg_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         # change to client2
         update_res = self.admin_client.update_rbac_policy(
-                res['rbac_policy']['id'], target_tenant=self.client2.tenant_id)
-        self.assertEqual(self.client2.tenant_id,
+            res['rbac_policy']['id'], target_tenant=self.client2.project_id)
+        self.assertEqual(self.client2.project_id,
                          update_res['rbac_policy']['target_tenant'])
         # make sure everything else stayed the same
         res['rbac_policy'].pop('target_tenant')
@@ -598,7 +598,7 @@
     @decorators.idempotent_id('2a619a8a-2a35-11e9-90d9-acde48001122')
     def test_port_presence_prevents_policy_rbac_policy_deletion(self):
         res = self._make_admin_sg_shared_to_project_id(
-            self.client2.tenant_id)
+            self.client2.project_id)
         sg_id = res['security_group']['id']
         net = self.create_network(client=self.client2)
         port = self.client2.create_port(
@@ -623,7 +623,7 @@
         rbac_policy = self.admin_client.create_rbac_policy(
             object_type='security_group', object_id=sg['id'],
             action='access_as_shared',
-            target_tenant=self.client.tenant_id)['rbac_policy']
+            target_tenant=self.client.project_id)['rbac_policy']
         self.client.show_security_group(sg['id'])
 
         self.assertIn(rbac_policy,
@@ -638,7 +638,7 @@
         sg = self._create_security_group()
         self.admin_client.create_rbac_policy(
             object_type='security_group', object_id=sg['id'],
-            action='access_as_shared', target_tenant=self.client2.tenant_id)
+            action='access_as_shared', target_tenant=self.client2.project_id)
         field_args = (('id',), ('id', 'action'), ('object_type', 'object_id'),
                       ('project_id', 'target_tenant'))
         for fields in field_args:
@@ -648,7 +648,7 @@
     @decorators.idempotent_id('2abf8f9e-2a35-11e9-85f7-acde48001122')
     def test_rbac_policy_show(self):
         res = self._make_admin_sg_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         p1 = res['rbac_policy']
         p2 = self.admin_client.create_rbac_policy(
             object_type='security_group',
@@ -667,11 +667,11 @@
         rbac_pol1 = self.admin_client.create_rbac_policy(
             object_type='security_group', object_id=sg['id'],
             action='access_as_shared',
-            target_tenant=self.client2.tenant_id)['rbac_policy']
+            target_tenant=self.client2.project_id)['rbac_policy']
         rbac_pol2 = self.admin_client.create_rbac_policy(
             object_type='security_group', object_id=sg['id'],
             action='access_as_shared',
-            target_tenant=self.admin_client.tenant_id)['rbac_policy']
+            target_tenant=self.admin_client.project_id)['rbac_policy']
         res1 = self.admin_client.list_rbac_policies(id=rbac_pol1['id'])[
             'rbac_policies']
         res2 = self.admin_client.list_rbac_policies(id=rbac_pol2['id'])[
@@ -684,12 +684,12 @@
     @decorators.idempotent_id('2aff3900-2a35-11e9-96b3-acde48001122')
     def test_regular_client_blocked_from_sharing_anothers_policy(self):
         sg = self._make_admin_sg_shared_to_project_id(
-            self.client.tenant_id)['security_group']
+            self.client.project_id)['security_group']
         with testtools.ExpectedException(exceptions.BadRequest):
             self.client.create_rbac_policy(
                 object_type='security_group', object_id=sg['id'],
                 action='access_as_shared',
-                target_tenant=self.client2.tenant_id)
+                target_tenant=self.client2.project_id)
 
         # make sure the rbac-policy is invisible to the tenant for which it's
         # being shared
diff --git a/neutron_tempest_plugin/api/test_security_groups_negative.py b/neutron_tempest_plugin/api/test_security_groups_negative.py
index 224558c..07fc606 100644
--- a/neutron_tempest_plugin/api/test_security_groups_negative.py
+++ b/neutron_tempest_plugin/api/test_security_groups_negative.py
@@ -182,7 +182,7 @@
     def setUp(self):
         super(NegativeSecGroupRulesQuotaTest, self).setUp()
         self.addCleanup(test_utils.call_and_ignore_notfound_exc,
-                        self.admin_client.reset_quotas, self.client.tenant_id)
+                        self.admin_client.reset_quotas, self.client.project_id)
         self._set_sg_rules_quota(10)
 
     @decorators.idempotent_id('8336e6ea-2e0a-4a1a-8673-a6f81b577d57')
diff --git a/neutron_tempest_plugin/api/test_subnetpools.py b/neutron_tempest_plugin/api/test_subnetpools.py
index 38c721f..eaaee33 100644
--- a/neutron_tempest_plugin/api/test_subnetpools.py
+++ b/neutron_tempest_plugin/api/test_subnetpools.py
@@ -145,8 +145,8 @@
         show_subnetpool = body['subnetpool']
         self.assertIn('project_id', show_subnetpool)
         self.assertIn('tenant_id', show_subnetpool)
-        self.assertEqual(self.client.tenant_id, show_subnetpool['project_id'])
-        self.assertEqual(self.client.tenant_id, show_subnetpool['tenant_id'])
+        self.assertEqual(self.client.project_id, show_subnetpool['project_id'])
+        self.assertEqual(self.client.project_id, show_subnetpool['tenant_id'])
 
     @decorators.idempotent_id('764f1b93-1c4a-4513-9e7b-6c2fc5e9270c')
     def test_tenant_update_subnetpool(self):
@@ -446,11 +446,11 @@
     @decorators.idempotent_id('71b35ad0-51cd-40da-985d-89a51c95ec6a')
     def test_policy_target_update(self):
         res = self._make_admin_snp_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         # change to client2
         update_res = self.admin_client.update_rbac_policy(
-                res['rbac_policy']['id'], target_tenant=self.client2.tenant_id)
-        self.assertEqual(self.client2.tenant_id,
+            res['rbac_policy']['id'], target_tenant=self.client2.project_id)
+        self.assertEqual(self.client2.project_id,
                          update_res['rbac_policy']['target_tenant'])
         # make sure everything else stayed the same
         res['rbac_policy'].pop('target_tenant')
@@ -460,7 +460,7 @@
     @decorators.idempotent_id('451d9d38-65a0-4916-a805-1460d6a938d1')
     def test_subnet_presence_prevents_rbac_policy_deletion(self):
         res = self._make_admin_snp_shared_to_project_id(
-            self.client2.tenant_id)
+            self.client2.project_id)
         network = self.create_network(client=self.client2)
         subnet = self.client2.create_subnet(
             network_id=network['id'],
@@ -491,7 +491,7 @@
         rbac_policy = self.admin_client.create_rbac_policy(
             object_type='address_scope', object_id=a_s['id'],
             action='access_as_shared',
-            target_tenant=self.client.tenant_id)['rbac_policy']
+            target_tenant=self.client.project_id)['rbac_policy']
 
         # Create subnet pool owned by client with shared AS
         snp = self._create_subnetpool(address_scope_id=a_s["id"])
@@ -500,7 +500,7 @@
             self.client.create_rbac_policy(
                 object_type='subnetpool', object_id=snp['id'],
                 action='access_as_shared',
-                target_tenant=self.client2.tenant_id
+                target_tenant=self.client2.project_id
             )
 
         # cleanup
@@ -517,7 +517,7 @@
         rbac_policy = self.admin_client.create_rbac_policy(
             object_type='subnetpool', object_id=snp['id'],
             action='access_as_shared',
-            target_tenant=self.client.tenant_id)['rbac_policy']
+            target_tenant=self.client.project_id)['rbac_policy']
         self.client.show_subnetpool(snp['id'])
 
         self.assertIn(rbac_policy,
@@ -532,7 +532,7 @@
         snp = self._create_subnetpool()
         self.admin_client.create_rbac_policy(
             object_type='subnetpool', object_id=snp['id'],
-            action='access_as_shared', target_tenant=self.client2.tenant_id)
+            action='access_as_shared', target_tenant=self.client2.project_id)
         field_args = (('id',), ('id', 'action'), ('object_type', 'object_id'),
                       ('project_id', 'target_tenant'))
         for fields in field_args:
@@ -542,7 +542,7 @@
     @decorators.idempotent_id('e59e4502-4e6a-4e49-b446-a5d5642bbd69')
     def test_rbac_policy_show(self):
         res = self._make_admin_snp_shared_to_project_id(
-            self.client.tenant_id)
+            self.client.project_id)
         p1 = res['rbac_policy']
         p2 = self.admin_client.create_rbac_policy(
             object_type='subnetpool',
@@ -561,11 +561,11 @@
         rbac_pol1 = self.admin_client.create_rbac_policy(
             object_type='subnetpool', object_id=snp['id'],
             action='access_as_shared',
-            target_tenant=self.client2.tenant_id)['rbac_policy']
+            target_tenant=self.client2.project_id)['rbac_policy']
         rbac_pol2 = self.admin_client.create_rbac_policy(
             object_type='subnetpool', object_id=snp['id'],
             action='access_as_shared',
-            target_tenant=self.admin_client.tenant_id)['rbac_policy']
+            target_tenant=self.admin_client.project_id)['rbac_policy']
         res1 = self.admin_client.list_rbac_policies(id=rbac_pol1['id'])[
             'rbac_policies']
         res2 = self.admin_client.list_rbac_policies(id=rbac_pol2['id'])[
@@ -578,12 +578,12 @@
     @decorators.idempotent_id('63d9acbe-403c-4e77-9ffd-80e636a4621e')
     def test_regular_client_blocked_from_sharing_anothers_policy(self):
         snp = self._make_admin_snp_shared_to_project_id(
-            self.client.tenant_id)['subnetpool']
+            self.client.project_id)['subnetpool']
         with testtools.ExpectedException(lib_exc.BadRequest):
             self.client.create_rbac_policy(
                 object_type='subnetpool', object_id=snp['id'],
                 action='access_as_shared',
-                target_tenant=self.client2.tenant_id)
+                target_tenant=self.client2.project_id)
 
         # make sure the rbac-policy is invisible to the tenant for which it's
         # being shared
diff --git a/neutron_tempest_plugin/api/test_subnetpools_negative.py b/neutron_tempest_plugin/api/test_subnetpools_negative.py
index 1e222df..934d3cd 100644
--- a/neutron_tempest_plugin/api/test_subnetpools_negative.py
+++ b/neutron_tempest_plugin/api/test_subnetpools_negative.py
@@ -289,5 +289,5 @@
             lib_exc.BadRequest,
             self.admin_client.update_subnetpool,
             subnetpool['id'],
-            tenant_id=self.admin_client.tenant_id,
+            tenant_id=self.admin_client.project_id,
         )
diff --git a/neutron_tempest_plugin/api/test_trunk.py b/neutron_tempest_plugin/api/test_trunk.py
index 26f8de8..1006617 100644
--- a/neutron_tempest_plugin/api/test_trunk.py
+++ b/neutron_tempest_plugin/api/test_trunk.py
@@ -48,7 +48,7 @@
         if parent_network_type:
             client = cls.admin_client
             network_kwargs = {"provider:network_type": parent_network_type,
-                              "tenant_id": cls.client.tenant_id}
+                              "tenant_id": cls.client.project_id}
         network = cls.create_network(client=client, **network_kwargs)
         parent_port = cls.create_port(network)
         return cls.create_trunk(parent_port, subports, **kwargs)
@@ -98,7 +98,7 @@
         observed_trunk = self._show_trunk(trunk)
         for key in ['project_id', 'tenant_id']:
             self.assertIn(key, observed_trunk)
-            self.assertEqual(self.client.tenant_id, observed_trunk[key])
+            self.assertEqual(self.client.project_id, observed_trunk[key])
 
     @decorators.idempotent_id('4ce46c22-a2b6-4659-bc5a-0ef2463cab32')
     def test_create_update_trunk(self):
