diff --git a/docs/source/contributing.rst b/docs/source/contributing.rst
index a72bb9ebd..738a8bfa9 100644
--- a/docs/source/contributing.rst
+++ b/docs/source/contributing.rst
@@ -126,3 +126,16 @@ Be sure to generate the documentation before submitting a patch for review.
Unexpected warnings often appear when building the documentation, and slight
reST syntax errors frequently cause links or cross-references not to work
correctly.
+
+Conventions
+-----------
+
+Simply by convention, we have a few rules about naming:
+
+ * The term "project" is used in place of Keystone's "tenant" terminology
+ in all user-facing text. The term "tenant" is still used in API code to
+ make things more obvious for developers.
+
+ * The term "dashboard" refers to a top-level dashboard class, and "panel" to
+ the sub-items within a dashboard. Referring to a panel as a dashboard is
+ both confusing and incorrect.
diff --git a/docs/source/glossary.rst b/docs/source/glossary.rst
index cca874009..36bf635ea 100644
--- a/docs/source/glossary.rst
+++ b/docs/source/glossary.rst
@@ -17,3 +17,8 @@ Panel
A Python class representing a sub-navigation item (e.g. "instances")
which contains all the necessary logic (views, forms, tests, etc.) for
that interface.
+
+Project
+
+ Used in user-facing text in place of the term "Tenant" which is Keystone's
+ word.
diff --git a/horizon/horizon/dashboards/nova/access_and_security/floating_ips/tables.py b/horizon/horizon/dashboards/nova/access_and_security/floating_ips/tables.py
index 723b99bab..04ffcf58a 100644
--- a/horizon/horizon/dashboards/nova/access_and_security/floating_ips/tables.py
+++ b/horizon/horizon/dashboards/nova/access_and_security/floating_ips/tables.py
@@ -31,7 +31,7 @@ LOG = logging.getLogger(__name__)
class AllocateIP(tables.LinkAction):
name = "allocate"
- verbose_name = _("Allocate IP To Tenant")
+ verbose_name = _("Allocate IP To Project")
attrs = {"class": "ajax-modal btn small"}
url = "horizon:nova:access_and_security:floating_ips:allocate"
diff --git a/horizon/horizon/dashboards/nova/networks/tables.py b/horizon/horizon/dashboards/nova/networks/tables.py
index d26b6b6cc..5eb7a5195 100644
--- a/horizon/horizon/dashboards/nova/networks/tables.py
+++ b/horizon/horizon/dashboards/nova/networks/tables.py
@@ -39,7 +39,7 @@ class NetworksTable(tables.DataTable):
used = tables.Column('used', verbose_name=_('Used'))
available = tables.Column('available', verbose_name=_('Available'))
total = tables.Column('total', verbose_name=_('Total'))
- #tenant = tables.Column('tenant', verbose_name=_('Tenant'))
+ #tenant = tables.Column('tenant', verbose_name=_('Project'))
def get_object_id(self, datum):
return datum['id']
diff --git a/horizon/horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_launch.html b/horizon/horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_launch.html
index 3e882ac6d..42fb4c179 100644
--- a/horizon/horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_launch.html
+++ b/horizon/horizon/dashboards/nova/templates/nova/images_and_snapshots/images/_launch.html
@@ -15,7 +15,7 @@
{% trans "Description:" %}
-
{% trans "Specify the details for launching an instance. Also please make note of the table below; all tenants have quotas which define the limit of resources they are allowed to provision." %}
+
{% trans "Specify the details for launching an instance. Also please make note of the table below; all projects have quotas which define the limit of resources they are allowed to provision." %}
{% trans "Quota Name" %}
diff --git a/horizon/horizon/dashboards/settings/dashboard.py b/horizon/horizon/dashboards/settings/dashboard.py
index 416e62e9f..715c66036 100644
--- a/horizon/horizon/dashboards/settings/dashboard.py
+++ b/horizon/horizon/dashboards/settings/dashboard.py
@@ -20,9 +20,9 @@ import horizon
class Settings(horizon.Dashboard):
- name = "Settings"
+ name = _("Settings")
slug = "settings"
- panels = ('user', 'tenant')
+ panels = ('user', 'project')
default_panel = 'user'
nav = False
diff --git a/horizon/horizon/dashboards/settings/tenant/__init__.py b/horizon/horizon/dashboards/settings/project/__init__.py
similarity index 100%
rename from horizon/horizon/dashboards/settings/tenant/__init__.py
rename to horizon/horizon/dashboards/settings/project/__init__.py
diff --git a/horizon/horizon/dashboards/settings/tenant/forms.py b/horizon/horizon/dashboards/settings/project/forms.py
similarity index 94%
rename from horizon/horizon/dashboards/settings/tenant/forms.py
rename to horizon/horizon/dashboards/settings/project/forms.py
index e41137eb2..515109e5d 100644
--- a/horizon/horizon/dashboards/settings/tenant/forms.py
+++ b/horizon/horizon/dashboards/settings/project/forms.py
@@ -32,7 +32,7 @@ LOG = logging.getLogger(__name__)
class DownloadOpenRCForm(forms.SelfHandlingForm):
- tenant = forms.ChoiceField(label=_("Select a Tenant"))
+ tenant = forms.ChoiceField(label=_("Select a Project"))
@classmethod
def _instantiate(cls, request, *args, **kwargs):
@@ -58,7 +58,7 @@ class DownloadOpenRCForm(forms.SelfHandlingForm):
'tenant_id': data['tenant']}
response = shortcuts.render(request,
- 'settings/tenant/openrc.sh.template',
+ 'settings/project/openrc.sh.template',
context,
content_type="text/plain")
response['Content-Disposition'] = 'attachment; filename=openrc.sh'
diff --git a/horizon/horizon/dashboards/settings/tenant/panel.py b/horizon/horizon/dashboards/settings/project/panel.py
similarity index 93%
rename from horizon/horizon/dashboards/settings/tenant/panel.py
rename to horizon/horizon/dashboards/settings/project/panel.py
index f6d9326a1..ff9d905d0 100644
--- a/horizon/horizon/dashboards/settings/tenant/panel.py
+++ b/horizon/horizon/dashboards/settings/project/panel.py
@@ -19,8 +19,8 @@ from horizon.dashboards.settings import dashboard
class TenantPanel(horizon.Panel):
- name = "Tenant Settings"
- slug = 'tenant'
+ name = "Project Settings"
+ slug = 'project'
dashboard.Settings.register(TenantPanel)
diff --git a/horizon/horizon/dashboards/settings/tenant/urls.py b/horizon/horizon/dashboards/settings/project/urls.py
similarity index 91%
rename from horizon/horizon/dashboards/settings/tenant/urls.py
rename to horizon/horizon/dashboards/settings/project/urls.py
index 4609a3eeb..41f01c288 100644
--- a/horizon/horizon/dashboards/settings/tenant/urls.py
+++ b/horizon/horizon/dashboards/settings/project/urls.py
@@ -17,5 +17,5 @@
from django.conf.urls.defaults import patterns, url
-urlpatterns = patterns('horizon.dashboards.settings.tenant.views',
+urlpatterns = patterns('horizon.dashboards.settings.project.views',
url(r'^$', 'index', name='index'))
diff --git a/horizon/horizon/dashboards/settings/tenant/views.py b/horizon/horizon/dashboards/settings/project/views.py
similarity index 85%
rename from horizon/horizon/dashboards/settings/tenant/views.py
rename to horizon/horizon/dashboards/settings/project/views.py
index 4c0d542ba..369a658d5 100644
--- a/horizon/horizon/dashboards/settings/tenant/views.py
+++ b/horizon/horizon/dashboards/settings/project/views.py
@@ -15,7 +15,7 @@
# under the License.
from django import shortcuts
-from horizon.dashboards.settings.tenant.forms import DownloadOpenRCForm
+from .forms import DownloadOpenRCForm
def index(request):
@@ -26,4 +26,4 @@ def index(request):
context = {'form': form}
- return shortcuts.render(request, 'settings/tenant/settings.html', context)
+ return shortcuts.render(request, 'settings/project/settings.html', context)
diff --git a/horizon/horizon/dashboards/settings/templates/settings/tenant/_openrc.html b/horizon/horizon/dashboards/settings/templates/settings/project/_openrc.html
similarity index 60%
rename from horizon/horizon/dashboards/settings/templates/settings/tenant/_openrc.html
rename to horizon/horizon/dashboards/settings/templates/settings/project/_openrc.html
index 9c54edc02..2b086609f 100644
--- a/horizon/horizon/dashboards/settings/templates/settings/tenant/_openrc.html
+++ b/horizon/horizon/dashboards/settings/templates/settings/project/_openrc.html
@@ -2,7 +2,7 @@
{% load i18n %}
{% block form_id %}openrc_download_form{% endblock %}
-{% block form_action %}{% url horizon:settings:tenant:index %}{% endblock %}
+{% block form_action %}{% url horizon:settings:project:index %}{% endblock %}
{% block modal_id %}language_settings_modal{% endblock %}
{% block modal-header %}{% trans "Download RC File" %}{% endblock %}
@@ -15,12 +15,12 @@
{% trans "Description:" %}
-
{% trans 'Download the RC file for the selected tenant, then type "source openrc" in the terminal to configure your environment to communicate with OpenStack.' %}
+
{% trans 'Download the RC file for the selected project, then type "source openrc" in the terminal to configure your environment to communicate with OpenStack.' %}
{% endblock %}
{% block modal-footer %}
- {% if hide %}{% trans "Cancel" %}{% endif %}
+ {% if hide %}{% trans "Cancel" %}{% endif %}
{% endblock %}
diff --git a/horizon/horizon/dashboards/settings/templates/settings/tenant/openrc.sh.template b/horizon/horizon/dashboards/settings/templates/settings/project/openrc.sh.template
similarity index 100%
rename from horizon/horizon/dashboards/settings/templates/settings/tenant/openrc.sh.template
rename to horizon/horizon/dashboards/settings/templates/settings/project/openrc.sh.template
diff --git a/horizon/horizon/dashboards/settings/templates/settings/tenant/settings.html b/horizon/horizon/dashboards/settings/templates/settings/project/settings.html
similarity index 59%
rename from horizon/horizon/dashboards/settings/templates/settings/tenant/settings.html
rename to horizon/horizon/dashboards/settings/templates/settings/project/settings.html
index c9ae1ef74..6cc270a37 100644
--- a/horizon/horizon/dashboards/settings/templates/settings/tenant/settings.html
+++ b/horizon/horizon/dashboards/settings/templates/settings/project/settings.html
@@ -3,9 +3,9 @@
{% block title %}OpenRC Download{% endblock %}
{% block page_header %}
- {% include "horizon/common/_page_header.html" with title=_("Tenant Settings") %}
+ {% include "horizon/common/_page_header.html" with title=_("Project Settings") %}
{% endblock page_header %}
{% block settings_main %}
- {% include "settings/tenant/_openrc.html" %}
+ {% include "settings/project/_openrc.html" %}
{% endblock %}
diff --git a/horizon/horizon/dashboards/settings/user/views.py b/horizon/horizon/dashboards/settings/user/views.py
index 434f72587..e5aa3090a 100644
--- a/horizon/horizon/dashboards/settings/user/views.py
+++ b/horizon/horizon/dashboards/settings/user/views.py
@@ -15,7 +15,6 @@
# under the License.
from django import shortcuts
-from horizon.dashboards.settings.tenant.forms import DownloadOpenRCForm
def index(request):
diff --git a/horizon/horizon/dashboards/syspanel/dashboard.py b/horizon/horizon/dashboards/syspanel/dashboard.py
index 3b73b7fd2..ad18f112a 100644
--- a/horizon/horizon/dashboards/syspanel/dashboard.py
+++ b/horizon/horizon/dashboards/syspanel/dashboard.py
@@ -23,7 +23,7 @@ class Syspanel(horizon.Dashboard):
name = "Admin" # Appears in navigation
slug = "syspanel"
panels = {_("System Panel"): ('overview', 'instances', 'services',
- 'flavors', 'images', 'tenants', 'users',
+ 'flavors', 'images', 'projects', 'users',
'quotas',)}
default_panel = 'overview'
roles = ('admin',)
diff --git a/horizon/horizon/dashboards/syspanel/tenants/__init__.py b/horizon/horizon/dashboards/syspanel/projects/__init__.py
similarity index 100%
rename from horizon/horizon/dashboards/syspanel/tenants/__init__.py
rename to horizon/horizon/dashboards/syspanel/projects/__init__.py
diff --git a/horizon/horizon/dashboards/syspanel/tenants/forms.py b/horizon/horizon/dashboards/syspanel/projects/forms.py
similarity index 95%
rename from horizon/horizon/dashboards/syspanel/tenants/forms.py
rename to horizon/horizon/dashboards/syspanel/projects/forms.py
index 640105c29..3d741eb27 100644
--- a/horizon/horizon/dashboards/syspanel/tenants/forms.py
+++ b/horizon/horizon/dashboards/syspanel/projects/forms.py
@@ -52,7 +52,7 @@ class AddUser(forms.SelfHandlingForm):
messages.success(request, _('Successfully added user to tenant.'))
except:
exceptions.handle(request, _('Unable to add user to tenant.'))
- return shortcuts.redirect('horizon:syspanel:tenants:users',
+ return shortcuts.redirect('horizon:syspanel:projects:users',
tenant_id=data['tenant_id'])
@@ -76,7 +76,7 @@ class CreateTenant(forms.SelfHandlingForm):
% data['name'])
except:
exceptions.handle(request, _('Unable to create tenant.'))
- return shortcuts.redirect('horizon:syspanel:tenants:index')
+ return shortcuts.redirect('horizon:syspanel:projects:index')
class UpdateTenant(forms.SelfHandlingForm):
@@ -102,7 +102,7 @@ class UpdateTenant(forms.SelfHandlingForm):
% data['name'])
except:
exceptions.handle(request, _('Unable to update tenant.'))
- return shortcuts.redirect('horizon:syspanel:tenants:index')
+ return shortcuts.redirect('horizon:syspanel:projects:index')
class UpdateQuotas(forms.SelfHandlingForm):
@@ -138,4 +138,4 @@ class UpdateQuotas(forms.SelfHandlingForm):
% data['tenant_id'])
except:
exceptions.handle(request, _('Unable to update quotas.'))
- return shortcuts.redirect('horizon:syspanel:tenants:index')
+ return shortcuts.redirect('horizon:syspanel:projects:index')
diff --git a/horizon/horizon/dashboards/syspanel/tenants/panel.py b/horizon/horizon/dashboards/syspanel/projects/panel.py
similarity index 95%
rename from horizon/horizon/dashboards/syspanel/tenants/panel.py
rename to horizon/horizon/dashboards/syspanel/projects/panel.py
index 692a93eec..e602d6573 100644
--- a/horizon/horizon/dashboards/syspanel/tenants/panel.py
+++ b/horizon/horizon/dashboards/syspanel/projects/panel.py
@@ -23,8 +23,8 @@ from horizon.dashboards.syspanel import dashboard
class Tenants(horizon.Panel):
- name = "Tenants"
- slug = 'tenants'
+ name = "Projects"
+ slug = 'projects'
dashboard.Syspanel.register(Tenants)
diff --git a/horizon/horizon/dashboards/syspanel/tenants/tables.py b/horizon/horizon/dashboards/syspanel/projects/tables.py
similarity index 84%
rename from horizon/horizon/dashboards/syspanel/tenants/tables.py
rename to horizon/horizon/dashboards/syspanel/projects/tables.py
index 8fdd84b9d..6dd3d0bf2 100644
--- a/horizon/horizon/dashboards/syspanel/tenants/tables.py
+++ b/horizon/horizon/dashboards/syspanel/projects/tables.py
@@ -15,39 +15,39 @@ LOG = logging.getLogger(__name__)
class ModifyQuotasLink(tables.LinkAction):
name = "quotas"
verbose_name = _("Modify Quotas")
- url = "horizon:syspanel:tenants:quotas"
+ url = "horizon:syspanel:projects:quotas"
attrs = {"class": "ajax-modal"}
class ViewMembersLink(tables.LinkAction):
name = "users"
verbose_name = _("Modify Users")
- url = "horizon:syspanel:tenants:users"
+ url = "horizon:syspanel:projects:users"
class UsageLink(tables.LinkAction):
name = "usage"
verbose_name = _("View Usage")
- url = "horizon:syspanel:tenants:usage"
+ url = "horizon:syspanel:projects:usage"
class EditLink(tables.LinkAction):
name = "update"
- verbose_name = _("Edit Tenant")
- url = "horizon:syspanel:tenants:update"
+ verbose_name = _("Edit Project")
+ url = "horizon:syspanel:projects:update"
attrs = {"class": "ajax-modal"}
class CreateLink(tables.LinkAction):
name = "create"
- verbose_name = _("Create New Tenant")
- url = "horizon:syspanel:tenants:create"
+ verbose_name = _("Create New Project")
+ url = "horizon:syspanel:projects:create"
attrs = {"class": "ajax-modal btn small"}
class DeleteTenantsAction(tables.DeleteAction):
- data_type_singular = _("Tenant")
- data_type_plural = _("Tenants")
+ data_type_singular = _("Project")
+ data_type_plural = _("Projects")
def delete(self, request, obj_id):
api.keystone.tenant_delete(request, obj_id)
@@ -76,7 +76,7 @@ class TenantsTable(tables.DataTable):
class Meta:
name = "tenants"
- verbose_name = _("Tenants")
+ verbose_name = _("Projects")
row_actions = (EditLink, UsageLink, ViewMembersLink, ModifyQuotasLink,
DeleteTenantsAction)
table_actions = (TenantFilterAction, CreateLink, DeleteTenantsAction)
@@ -98,15 +98,15 @@ class RemoveUserAction(tables.BatchAction):
class TenantUsersTable(UsersTable):
class Meta:
name = "tenant_users"
- verbose_name = _("Users For Tenant")
+ verbose_name = _("Users For Project")
table_actions = (RemoveUserAction,)
row_actions = (RemoveUserAction,)
class AddUserAction(tables.LinkAction):
name = "add_user"
- verbose_name = _("Add To Tenant")
- url = "horizon:syspanel:tenants:add_user"
+ verbose_name = _("Add To Project")
+ url = "horizon:syspanel:projects:add_user"
classes = ('ajax-modal',)
def get_link_url(self, user):
diff --git a/horizon/horizon/dashboards/syspanel/tenants/tests.py b/horizon/horizon/dashboards/syspanel/projects/tests.py
similarity index 94%
rename from horizon/horizon/dashboards/syspanel/tenants/tests.py
rename to horizon/horizon/dashboards/syspanel/projects/tests.py
index 3a3db4359..55c1504d5 100644
--- a/horizon/horizon/dashboards/syspanel/tenants/tests.py
+++ b/horizon/horizon/dashboards/syspanel/projects/tests.py
@@ -22,7 +22,7 @@ from horizon import api
from horizon import test
-INDEX_URL = reverse('horizon:syspanel:tenants:index')
+INDEX_URL = reverse('horizon:syspanel:projects:index')
class FakeResource(object):
@@ -60,7 +60,7 @@ class TenantsViewTests(test.BaseAdminViewTests):
res = self.client.get(INDEX_URL)
- self.assertTemplateUsed(res, 'syspanel/tenants/index.html')
+ self.assertTemplateUsed(res, 'syspanel/projects/index.html')
self.assertItemsEqual(res.context['table'].data, self.tenants)
def test_modify_quota(self):
@@ -78,7 +78,7 @@ class TenantsViewTests(test.BaseAdminViewTests):
self.mox.ReplayAll()
- url = reverse('horizon:syspanel:tenants:quotas',
+ url = reverse('horizon:syspanel:projects:quotas',
args=(self.TEST_TENANT,))
data = {"method": "UpdateQuotas",
"tenant_id": self.TEST_TENANT,
diff --git a/horizon/horizon/dashboards/syspanel/tenants/urls.py b/horizon/horizon/dashboards/syspanel/projects/urls.py
similarity index 100%
rename from horizon/horizon/dashboards/syspanel/tenants/urls.py
rename to horizon/horizon/dashboards/syspanel/projects/urls.py
diff --git a/horizon/horizon/dashboards/syspanel/tenants/views.py b/horizon/horizon/dashboards/syspanel/projects/views.py
similarity index 91%
rename from horizon/horizon/dashboards/syspanel/tenants/views.py
rename to horizon/horizon/dashboards/syspanel/projects/views.py
index 59fdf42a2..ff4a010bd 100644
--- a/horizon/horizon/dashboards/syspanel/tenants/views.py
+++ b/horizon/horizon/dashboards/syspanel/projects/views.py
@@ -41,7 +41,7 @@ LOG = logging.getLogger(__name__)
class IndexView(tables.DataTableView):
table_class = TenantsTable
- template_name = 'syspanel/tenants/index.html'
+ template_name = 'syspanel/projects/index.html'
def get_data(self):
tenants = []
@@ -63,12 +63,12 @@ class IndexView(tables.DataTableView):
class CreateView(forms.ModalFormView):
form_class = CreateTenant
- template_name = 'syspanel/tenants/create.html'
+ template_name = 'syspanel/projects/create.html'
class UpdateView(forms.ModalFormView):
form_class = UpdateTenant
- template_name = 'syspanel/tenants/update.html'
+ template_name = 'syspanel/projects/update.html'
context_object_name = 'tenant'
def get_object(self, *args, **kwargs):
@@ -79,7 +79,7 @@ class UpdateView(forms.ModalFormView):
LOG.exception('Error fetching tenant with id "%s"' % tenant_id)
messages.error(self.request, _('Unable to update tenant: %s')
% e.message)
- raise http.Http404("Tenant with ID %s not found." % tenant_id)
+ raise http.Http404("Project with ID %s not found." % tenant_id)
def get_initial(self):
return {'id': self.object.id,
@@ -90,7 +90,7 @@ class UpdateView(forms.ModalFormView):
class UsersView(tables.MultiTableView):
table_classes = (TenantUsersTable, AddUsersTable)
- template_name = 'syspanel/tenants/users.html'
+ template_name = 'syspanel/projects/users.html'
def get_data(self, *args, **kwargs):
tenant_id = self.kwargs["tenant_id"]
@@ -99,7 +99,7 @@ class UsersView(tables.MultiTableView):
self.all_users = api.keystone.user_list(self.request)
self.tenant_users = api.keystone.user_list(self.request, tenant_id)
except:
- redirect = reverse("horizon:syspanel:tenants:index")
+ redirect = reverse("horizon:syspanel:projects:index")
exceptions.handle(self.request,
_("Unable to retrieve users."),
redirect=redirect)
@@ -121,7 +121,7 @@ class UsersView(tables.MultiTableView):
class AddUserView(forms.ModalFormView):
form_class = AddUser
- template_name = 'syspanel/tenants/add_user.html'
+ template_name = 'syspanel/projects/add_user.html'
context_object_name = 'tenant'
def get_object(self, *args, **kwargs):
@@ -138,7 +138,7 @@ class AddUserView(forms.ModalFormView):
try:
roles = api.keystone.role_list(self.request)
except:
- redirect = reverse("horizon:syspanel:tenants:users",
+ redirect = reverse("horizon:syspanel:projects:users",
args=(self.kwargs["tenant_id"],))
exceptions.handle(self.request,
_("Unable to retrieve roles."),
@@ -156,7 +156,7 @@ class AddUserView(forms.ModalFormView):
class QuotasView(forms.ModalFormView):
form_class = UpdateQuotas
- template_name = 'syspanel/tenants/quotas.html'
+ template_name = 'syspanel/projects/quotas.html'
context_object_name = 'tenant'
def get_object(self, *args, **kwargs):
@@ -181,7 +181,7 @@ class QuotasView(forms.ModalFormView):
class TenantUsageView(usage.UsageView):
table_class = usage.TenantUsageTable
usage_class = usage.TenantUsage
- template_name = 'syspanel/tenants/usage.html'
+ template_name = 'syspanel/projects/usage.html'
def get_data(self):
super(TenantUsageView, self).get_data()
diff --git a/horizon/horizon/dashboards/syspanel/templates/syspanel/tenants/_add_user.html b/horizon/horizon/dashboards/syspanel/templates/syspanel/projects/_add_user.html
similarity index 58%
rename from horizon/horizon/dashboards/syspanel/templates/syspanel/tenants/_add_user.html
rename to horizon/horizon/dashboards/syspanel/templates/syspanel/projects/_add_user.html
index 3ccae3aa0..3fdb78a7d 100644
--- a/horizon/horizon/dashboards/syspanel/templates/syspanel/tenants/_add_user.html
+++ b/horizon/horizon/dashboards/syspanel/templates/syspanel/projects/_add_user.html
@@ -2,10 +2,10 @@
{% load i18n %}
{% block form_id %}add_user_form{% endblock %}
-{% block form_action %}{% url horizon:syspanel:tenants:add_user tenant_id user_id %}{% endblock %}
+{% block form_action %}{% url horizon:syspanel:projects:add_user tenant_id user_id %}{% endblock %}
{% block modal_id %}add_user_modal{% endblock %}
-{% block modal-header %}{% trans "Add User To Tenant" %}{% endblock %}
+{% block modal-header %}{% trans "Add User To Project" %}{% endblock %}
{% block modal-body %}
@@ -15,11 +15,11 @@
{% trans "Description" %}:
-
{% trans "Select the user role for the tenant." %}
+
{% trans "Select the user role for the project." %}