Add role column to image table

Change-Id: If53a1fd8c679cb8b2c5794cd19b3016968d1401e
This commit is contained in:
Tzu-Mainn Chen 2014-08-08 21:56:42 +02:00
parent e725723143
commit 6140b025d4
4 changed files with 50 additions and 1 deletions

View File

@ -218,6 +218,31 @@ class OvercloudRole(base.APIDictWrapper):
if role.id == role_id:
return role
@classmethod
@handle_errors(_("Unable to retrieve overcloud role"))
def get_by_image(cls, request, plan, image):
"""Return the Tuskar OvercloudRole whose ImageID
parameter matches the passed in image
:param request: request object
:type request: django.http.HttpRequest
:param plan: associated plan to check against
:type plan: OvercloudPlan
:param image: image to be matched
:type image: Image
:return: matching OvercloudRole, or None if no matching
OvercloudRole can be found
:rtype: tuskar_ui.api.tuskar.OvercloudRole
"""
for role in OvercloudRole.list(request):
image_id_from_plan = plan.parameter_value(
role.image_id_parameter_name)
if image_id_from_plan == image.id:
return role
# TODO(tzumainn): fix this once we know how a role corresponds to
# its provider resource type
@property

View File

@ -23,6 +23,9 @@ class ImagesTable(tables.DataTable):
verbose_name=_("Image Name"))
disk_format = tables.Column('disk_format',
verbose_name=_("Format"))
role = tables.Column(lambda image:
image.role.name if image.role else '-',
verbose_name=_("Deployment Role"))
class Meta:
name = "images"

View File

@ -15,6 +15,8 @@
from horizon import tables as horizon_tables
from openstack_dashboard.api import glance
from tuskar_ui import api
from tuskar_ui.infrastructure.images import tables
@ -23,4 +25,10 @@ class IndexView(horizon_tables.DataTableView):
template_name = "infrastructure/images/index.html"
def get_data(self):
return glance.image_list_detailed(self.request)[0]
plan = api.tuskar.OvercloudPlan.get_the_plan(self.request)
images = glance.image_list_detailed(self.request)[0]
# TODO(tzumainn): re-architect a bit to avoid inefficiency
for image in images:
image.role = api.tuskar.OvercloudRole.get_by_image(
self.request, plan, image)
return images

View File

@ -82,3 +82,16 @@ class TuskarAPITests(test.APITestCase):
ret_val = api.tuskar.OvercloudRole.get(self.request, role['id'])
self.assertIsInstance(ret_val, api.tuskar.OvercloudRole)
def test_role_get_by_image(self):
plan = api.tuskar.OvercloudPlan(self.tuskarclient_plans.first())
image = self.glanceclient_images.first()
roles = [api.tuskar.OvercloudRole(role) for role in
self.tuskarclient_roles.list()]
with patch('tuskar_ui.api.tuskar.OvercloudRole.list',
return_value=roles):
ret_val = api.tuskar.OvercloudRole.get_by_image(
self.request, plan, image)
self.assertIsInstance(ret_val, api.tuskar.OvercloudRole)
self.assertEqual(ret_val.name, 'Controller')