Merge "Added image type filter"

This commit is contained in:
Jenkins 2014-10-24 09:57:34 +00:00 committed by Gerrit Code Review
commit c6183ae117
7 changed files with 78 additions and 37 deletions

View File

@ -48,8 +48,8 @@ def _prepare_create():
'memory_mb': 1024,
'disk_gb': 40,
'arch': 'amd64',
'kernel_image_id': images[0].id,
'ramdisk_image_id': images[1].id}
'kernel_image_id': images[5].id,
'ramdisk_image_id': images[4].id}
with contextlib.nested(
patch('tuskar_ui.api.flavor.Flavor.create',
return_value=flavor),
@ -119,8 +119,8 @@ class FlavorsTest(test.BaseAdminViewTests):
request = create_mock.call_args_list[0][0][0]
self.assertListEqual(create_mock.call_args_list, [
call(request, name=u'foobar', memory=1024, vcpus=3, disk=40,
cpu_arch='amd64', kernel_image_id=images[0].id,
ramdisk_image_id=images[1].id)
cpu_arch='amd64', kernel_image_id=images[5].id,
ramdisk_image_id=images[4].id)
])
def test_create_post_name_exists(self):

View File

@ -21,6 +21,7 @@ from openstack_dashboard.dashboards.admin.flavors import (
workflows as flavor_workflows)
from tuskar_ui import api
from tuskar_ui.utils import utils
class CreateFlavorAction(flavor_workflows.CreateFlavorInfoAction):
@ -37,12 +38,16 @@ class CreateFlavorAction(flavor_workflows.CreateFlavorInfoAction):
try:
kernel_images = glance.image_list_detailed(
self.request,
filters={'disk_format': 'aki'}
)[0]
kernel_images = [image for image in kernel_images
if utils.check_image_type(image,
'discovery kernel')]
ramdisk_images = glance.image_list_detailed(
self.request,
filters={'disk_format': 'ari'}
)[0]
ramdisk_images = [image for image in ramdisk_images
if utils.check_image_type(image,
'discovery ramdisk')]
except Exception:
exceptions.handle(self.request,
_('Unable to retrieve images list.'))

View File

@ -41,7 +41,8 @@ class ImagesTest(test.BaseAdminViewTests):
patch('tuskar_ui.api.tuskar.Plan.list',
return_value=plans),
patch('openstack_dashboard.api.glance.image_list_detailed',
return_value=[self.images.list(), False, False]),):
return_value=[self.glanceclient_images.list(),
False, False]),):
res = self.client.get(INDEX_URL)
@ -103,7 +104,7 @@ class ImagesTest(test.BaseAdminViewTests):
self.tuskarclient_roles.list()]
plans = [api.tuskar.Plan(plan) for plan in
self.tuskarclient_plans.list()]
images = self.images.list()
images = self.glanceclient_images.list()
data = {'action': 'images__delete',
'object_ids': [images[0].id, images[1].id]}

View File

@ -25,6 +25,7 @@ from openstack_dashboard.dashboards.project.images.images import views
from tuskar_ui import api as tuskar_api
from tuskar_ui.infrastructure.images import forms
from tuskar_ui.infrastructure.images import tables
from tuskar_ui.utils import utils
LOG = logging.getLogger(__name__)
@ -33,40 +34,21 @@ class IndexView(horizon_tables.DataTableView):
table_class = tables.ImagesTable
template_name = "infrastructure/images/index.html"
def has_prev_data(self, table):
return self._prev
def has_more_data(self, table):
return self._more
def get_data(self):
images = []
filters = self.get_filters()
prev_marker = self.request.GET.get(
tables.ImagesTable._meta.prev_pagination_param, None)
if prev_marker is not None:
sort_dir = 'asc'
marker = prev_marker
else:
sort_dir = 'desc'
marker = self.request.GET.get(
tables.ImagesTable._meta.pagination_param, None)
sort_dir = 'desc'
try:
images, self._more, self._prev = api.glance.image_list_detailed(
self.request,
marker=marker,
paginate=True,
paginate=False,
filters=filters,
sort_dir=sort_dir)
if prev_marker is not None:
images = sorted(images, key=lambda image:
getattr(image, 'created_at'), reverse=True)
images = [image for image in images
if utils.check_image_type(image,
'overcloud provisioning')]
except Exception:
self._prev = False
self._more = False
msg = _('Unable to retrieve image list.')
exceptions.handle(self.request, msg)

View File

@ -21,6 +21,7 @@ from openstack_dashboard.api import glance
from tuskar_ui import api
from tuskar_ui import forms as tuskar_forms
from tuskar_ui.infrastructure.flavors import utils
from tuskar_ui.utils import utils as tuskar_utils
class UpdateRoleInfoAction(workflows.Action):
@ -63,6 +64,9 @@ class UpdateRoleInfoAction(workflows.Action):
def populate_image_choices(self, request, context):
images = glance.image_list_detailed(self.request)[0]
images = [image for image in images
if tuskar_utils.check_image_type(image,
'overcloud provisioning')]
choices = [(i.id, i.name) for i in images]
return [('', _('Unknown'))] + choices

View File

@ -203,17 +203,56 @@ def data(TEST):
image_1 = images.Image(
images.ImageManager(None),
{'id': '2',
'name': 'overcloud-control'})
'name': 'overcloud-control',
'is_public': True,
'protected': False,
'properties': {
'type': 'overcloud provisioning'
}})
image_2 = images.Image(
images.ImageManager(None),
{'id': '1',
'name': 'overcloud-compute'})
'name': 'overcloud-compute',
'is_public': True,
'protected': False,
'properties': {
'type': 'overcloud provisioning'
}})
image_3 = images.Image(
images.ImageManager(None),
{'id': '3',
'name': 'Object Storage Image'})
'name': 'Object Storage Image',
'is_public': True,
'protected': False,
'properties': {
'type': 'overcloud provisioning'
}})
image_4 = images.Image(
images.ImageManager(None),
{'id': '4',
'name': 'Block Storage Image'})
TEST.glanceclient_images.add(image_1, image_2, image_3, image_4)
'name': 'Block Storage Image',
'is_public': True,
'protected': False,
'properties': {
'type': 'overcloud provisioning'
}})
image_5 = images.Image(
images.ImageManager(None),
{'id': '5',
'name': 'Discovery Ramdisk',
'is_public': True,
'protected': False,
'properties': {
'type': 'discovery ramdisk'
}})
image_6 = images.Image(
images.ImageManager(None),
{'id': '6',
'name': 'Discovery Kernel',
'is_public': True,
'protected': False,
'properties': {
'type': 'discovery kernel'
}})
TEST.glanceclient_images.add(image_1, image_2, image_3, image_4,
image_5, image_6)

View File

@ -45,6 +45,16 @@ def length(iterator):
return sum(1 for _item in iterator)
def check_image_type(image, type):
"""Check if image 'type' property matches passed-in type.
If image has no 'type' property' return True, as we cannot
be sure what type of image it is.
"""
return (image.properties.get('type', type) == type)
def filter_items(items, **kwargs):
"""Filters the list of items and returns the filtered list.