Merge "Added image type filter"
This commit is contained in:
commit
c6183ae117
@ -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):
|
||||
|
@ -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.'))
|
||||
|
@ -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]}
|
||||
|
@ -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)
|
||||
|
||||
|
@ -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
|
||||
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user