Merge "Fix community image handling in launch instance form" into stable/victoria

This commit is contained in:
Zuul 2021-04-27 14:13:27 +00:00 committed by Gerrit Code Review
commit 0c49378970
2 changed files with 63 additions and 33 deletions

View File

@ -567,7 +567,12 @@
if (enabledImage || enabledSnapshot) { if (enabledImage || enabledSnapshot) {
var filter = {status: 'active', sort_key: 'name', sort_dir: 'asc'}; var filter = {status: 'active', sort_key: 'name', sort_dir: 'asc'};
glanceAPI.getImages(filter).then( var filterCommunity = angular.merge({}, filter, {visibility: 'community'});
var imagePromises = [
glanceAPI.getImages(filter),
glanceAPI.getImages(filterCommunity)
];
$q.all(imagePromises).then(
function(data) { function(data) {
onGetImageSources(data, enabledImage, enabledSnapshot); onGetImageSources(data, enabledImage, enabledSnapshot);
} }
@ -678,13 +683,21 @@
model.imageSnapshots.length = 0; model.imageSnapshots.length = 0;
model.images.length = 0; model.images.length = 0;
angular.forEach(data.data.items, function(image) { var imageIdsProcessed = [];
if (isValidSnapshot(image) && enabledSnapshot) {
model.imageSnapshots.push(image); angular.forEach(data, function(data) {
} else if (isValidImage(image) && enabledImage) { angular.forEach(data.data.items, function(image) {
image.name_or_id = image.name || image.id; if (imageIdsProcessed.includes(image.id)) {
model.images.push(image); return;
} }
imageIdsProcessed.push(image.id);
if (isValidSnapshot(image) && enabledSnapshot) {
model.imageSnapshots.push(image);
} else if (isValidImage(image) && enabledImage) {
image.name_or_id = image.name || image.id;
model.images.push(image);
}
});
}); });
if (enabledImage) { if (enabledImage) {

View File

@ -131,19 +131,35 @@
beforeEach(module(function($provide) { beforeEach(module(function($provide) {
$provide.value('horizon.app.core.openstack-service-api.glance', { $provide.value('horizon.app.core.openstack-service-api.glance', {
getImages: function () { getImages: function (params) {
var images = [ var images;
{container_format: 'aki', properties: {}}, if (params.visibility === 'community') {
{container_format: 'ari', properties: {}}, images = [
{container_format: 'ami', properties: {}, name: 'ami_image'}, {id: '10', container_format: 'raw', properties: {image_type: 'image'},
{container_format: 'raw', properties: {}, name: 'raw_image'}, visibility: 'community'},
{container_format: 'ami', properties: {image_type: 'image'}, id: '1'}, // ID 6 is already returned by the first call (below), so this should be ignored.
{container_format: 'raw', properties: {image_type: 'image'}, id: '2'}, // To clarify the difference, the content here is different intentionally.
{container_format: 'ami', properties: { {id: '6', container_format: 'raw', properties: {image_type: 'image'},
block_device_mapping: '[{"source_type": "snapshot"}]'}}, visibility: 'community'}
{container_format: 'raw', properties: { ];
block_device_mapping: '[{"source_type": "snapshot"}]'}} } else {
]; images = [
// container_format aki and ari are not considered as bootable
{id: '1', container_format: 'aki', properties: {}},
{id: '2', container_format: 'ari', properties: {}},
// The following images are considered as "image" sources.
{id: '3', container_format: 'ami', properties: {}, name: 'ami_image'},
{id: '4', container_format: 'raw', properties: {}, name: 'raw_image'},
{id: '5', container_format: 'ami', properties: {image_type: 'image'}},
{id: '6', container_format: 'raw', properties: {image_type: 'image'}},
// The following images are considered as "snapshot" sources.
{id: '7', container_format: 'ami',
properties: {block_device_mapping: '[{"source_type": "snapshot"}]'}},
{id: '8', container_format: 'raw',
properties: {block_device_mapping: '[{"source_type": "snapshot"}]'}},
{id: '9', container_format: 'raw', properties: {image_type: 'snapshot'}}
];
}
var deferred = $q.defer(); var deferred = $q.defer();
deferred.resolve({data: {items: images}}); deferred.resolve({data: {items: images}});
@ -387,22 +403,23 @@
expect(model.newInstanceSpec).toBeDefined(); expect(model.newInstanceSpec).toBeDefined();
var expectedImages = [ var expectedImages = [
{container_format: 'ami', properties: {}, name: 'ami_image', name_or_id: 'ami_image'}, {id: '3', container_format: 'ami', properties: {}, name: 'ami_image',
{container_format: 'raw', properties: {}, name: 'raw_image', name_or_id: 'raw_image'}, name_or_id: 'ami_image'},
{container_format: 'ami', properties: {image_type: 'image'}, id: '1', name_or_id: '1'}, {id: '4', container_format: 'raw', properties: {}, name: 'raw_image',
{container_format: 'raw', properties: {image_type: 'image'}, id: '2', name_or_id: '2'} name_or_id: 'raw_image'},
{id: '5', container_format: 'ami', properties: {image_type: 'image'}, name_or_id: '5'},
{id: '6', container_format: 'raw', properties: {image_type: 'image'}, name_or_id: '6'},
{id: '10', container_format: 'raw', properties: {image_type: 'image'}, name_or_id: '10',
visibility: 'community'}
]; ];
expect(model.images).toEqual(expectedImages); expect(model.images).toEqual(expectedImages);
var expectedSnapshots = [ var expectedSnapshots = [
{ {id: '7', container_format: 'ami',
container_format: 'ami', properties: {block_device_mapping: '[{"source_type": "snapshot"}]'}},
properties: {block_device_mapping: '[{"source_type": "snapshot"}]'} {id: '8', container_format: 'raw',
}, properties: {block_device_mapping: '[{"source_type": "snapshot"}]'}},
{ {id: '9', container_format: 'raw', properties: {image_type: 'snapshot'}}
container_format: 'raw',
properties: {block_device_mapping: '[{"source_type": "snapshot"}]'}
}
]; ];
expect(model.imageSnapshots).toEqual(expectedSnapshots); expect(model.imageSnapshots).toEqual(expectedSnapshots);