Tabs in launch server wizard not depending on OPENSTACK_NOVA_EXTENSIONS_BLACKLIST

OPENSTACK_NOVA_EXTENSIONS_BLACKLIST is used to disable specific extension.
In the launch instance wizard, by example the Server Group tab should be hidden
when the extension "ServerGroups" is blacklisted but it isn't.

It could be interesting to make these tabs dependent of the supported extensions.

Change-Id: I15ea0f1010e3889c217c63e98f1752a4c1ad9ceb
Closes-Bug: #1745367
This commit is contained in:
David Gutman 2018-01-25 16:17:55 +01:00
parent c2bc6ccb06
commit c7bc9242b9
4 changed files with 34 additions and 7 deletions

View File

@ -81,7 +81,8 @@
title: gettext('Key Pair'),
templateUrl: basePath + 'keypair/keypair.html',
helpUrl: basePath + 'keypair/keypair.help.html',
formName: 'launchInstanceKeypairForm'
formName: 'launchInstanceKeypairForm',
novaExtension: 'Keypairs'
},
{
id: 'configuration',
@ -96,7 +97,8 @@
templateUrl: basePath + 'server-groups/server-groups.html',
helpUrl: basePath + 'server-groups/server-groups.help.html',
formName: 'launchInstanceServerGroupsForm',
policy: stepPolicy.serverGroups
policy: stepPolicy.serverGroups,
novaExtension: 'ServerGroups'
},
{
id: 'hints',
@ -105,7 +107,8 @@
helpUrl: basePath + 'scheduler-hints/scheduler-hints.help.html',
formName: 'launchInstanceSchedulerHintsForm',
policy: stepPolicy.schedulerHints,
setting: 'LAUNCH_INSTANCE_DEFAULTS.enable_scheduler_hints'
setting: 'LAUNCH_INSTANCE_DEFAULTS.enable_scheduler_hints',
novaExtension: 'SchedulerHints'
},
{
id: 'metadata',

View File

@ -71,13 +71,26 @@
expect(launchInstanceWorkflow.steps[4].requiredServiceTypes).toEqual(['network']);
});
it('has a nova extension the key pair step depends on', function() {
expect(launchInstanceWorkflow.steps[6].novaExtension).toEqual("Keypairs");
});
it('has a policy rule for the server groups step', function() {
expect(launchInstanceWorkflow.steps[8].policy).toEqual(stepPolicy.serverGroups);
});
it('has a nova extension the server groups step depends on', function() {
expect(launchInstanceWorkflow.steps[8].novaExtension).toEqual("ServerGroups");
});
it('has a policy rule for the scheduler hints step', function() {
expect(launchInstanceWorkflow.steps[9].policy).toEqual(stepPolicy.schedulerHints);
});
it('has a nova extension the scheduler hints step depends on', function() {
expect(launchInstanceWorkflow.steps[9].novaExtension).toEqual("SchedulerHints");
});
});
})();

View File

@ -50,12 +50,13 @@
'$q',
'horizon.app.core.openstack-service-api.serviceCatalog',
'horizon.app.core.openstack-service-api.policy',
'horizon.app.core.openstack-service-api.settings'
'horizon.app.core.openstack-service-api.settings',
'horizon.app.core.openstack-service-api.novaExtensions'
];
/////////////
function dashboardWorkflowDecorator($q, serviceCatalog, policy, settings) {
function dashboardWorkflowDecorator($q, serviceCatalog, policy, settings, novaExtensions) {
return decorator;
function decorator(spec) {
@ -81,6 +82,9 @@
if (step.setting) {
promises.push(settings.ifEnabled(step.setting, true, true));
}
if (step.novaExtension) {
promises.push(novaExtensions.ifNameEnabled(step.novaExtension));
}
if (promises.length > 0) {
step.checkReadiness = function () {
return $q.all(promises);

View File

@ -17,12 +17,14 @@
'use strict';
describe('Workflow Decorator', function () {
var decoratorService, catalogService, policyService, settingsService, $scope, deferred;
var decoratorService, catalogService, policyService, settingsService, $scope, deferred,
novaExtensionsService;
var steps = [
{ id: '1' },
{ id: '2', requiredServiceTypes: ['foo-service'] },
{ id: '3', policy: 'foo-policy' },
{ id: '4', setting: 'STEPS.step_4_enabled' }
{ id: '4', setting: 'STEPS.step_4_enabled' },
{ id: '5', novaExtension: 'foo-novaExtension'}
];
var spec = { steps: steps };
@ -38,9 +40,12 @@
catalogService = $injector.get('horizon.app.core.openstack-service-api.serviceCatalog');
policyService = $injector.get('horizon.app.core.openstack-service-api.policy');
settingsService = $injector.get('horizon.app.core.openstack-service-api.settings');
novaExtensionsService = $injector
.get('horizon.app.core.openstack-service-api.novaExtensions');
spyOn(catalogService, 'ifTypeEnabled').and.returnValue(deferred.promise);
spyOn(policyService, 'ifAllowed').and.returnValue(deferred.promise);
spyOn(settingsService, 'ifEnabled').and.returnValue(deferred.promise);
spyOn(novaExtensionsService, 'ifNameEnabled').and.returnValue(deferred.promise);
}));
it('is a function', function() {
@ -58,6 +63,8 @@
expect(policyService.ifAllowed).toHaveBeenCalledWith('foo-policy');
expect(settingsService.ifEnabled.calls.count()).toBe(1);
expect(settingsService.ifEnabled).toHaveBeenCalledWith('STEPS.step_4_enabled', true, true);
expect(novaExtensionsService.ifNameEnabled.calls.count()).toBe(1);
expect(novaExtensionsService.ifNameEnabled).toHaveBeenCalledWith('foo-novaExtension');
});
it('step checkReadiness function returns correct results', function() {