Merge "Don't deploy overcloud if any role is bound to deleted node profile"

This commit is contained in:
Jenkins 2014-02-28 17:28:45 +00:00 committed by Gerrit Code Review
commit 9af7f5b6a2
2 changed files with 41 additions and 10 deletions

View File

@ -129,10 +129,11 @@ class OvercloudTests(test.BaseAdminViewTests):
def test_create_post(self):
roles = TEST_DATA.tuskarclient_overcloud_roles.list()
flavor = TEST_DATA.novaclient_flavors.first()
old_flavor_id = roles[0].flavor_id
roles[0].flavor_id = 'default'
roles[0].flavor_id = flavor.id
data = {
'count__1__default': '1',
'count__1__%s' % flavor.id: '1',
'count__2__': '0',
'count__3__': '0',
'count__4__': '0',
@ -149,7 +150,7 @@ class OvercloudTests(test.BaseAdminViewTests):
}),
patch('openstack_dashboard.api.nova', **{
'spec_set': ['flavor_list'],
'flavor_list.return_value': [],
'flavor_list.return_value': [flavor],
}),
) as (OvercloudRole, Overcloud, Node, nova):
res = self.client.post(CREATE_URL, data)
@ -158,7 +159,7 @@ class OvercloudTests(test.BaseAdminViewTests):
Overcloud.create.call_args_list,
[
call(request, {
('1', 'default'): 1,
('1', flavor.id): 1,
('2', ''): 0,
('3', ''): 0,
('4', ''): 0,
@ -196,6 +197,35 @@ class OvercloudTests(test.BaseAdminViewTests):
roles[0].flavor_id = old_flavor_id
self.assertRedirectsNoFollow(res, INDEX_URL)
def test_create_post_invalid_flavor(self):
roles = TEST_DATA.tuskarclient_overcloud_roles.list()
old_flavor_id = roles[0].flavor_id
roles[0].flavor_id = 'non-existing'
data = {
'count__1__%s' % roles[0].flavor_id: '1',
'count__2__': '0',
'count__3__': '0',
'count__4__': '0',
}
with contextlib.nested(
patch('tuskar_ui.api.OvercloudRole', **{
'spec_set': ['list'],
'list.return_value': roles,
}),
_mock_overcloud(),
patch('tuskar_ui.api.Node', **{
'spec_set': ['list'],
'list.return_value': [],
}),
patch('openstack_dashboard.api.nova', **{
'spec_set': ['flavor_list'],
'flavor_list.return_value': [],
}),
) as (OvercloudRole, Overcloud, Node, nova):
res = self.client.post(CREATE_URL, data)
self.assertFormErrors(res)
roles[0].flavor_id = old_flavor_id
def test_detail_get(self):
roles = TEST_DATA.tuskarclient_overcloud_roles.list()
with contextlib.nested(
@ -272,11 +302,12 @@ class OvercloudTests(test.BaseAdminViewTests):
def test_scale_post(self):
roles = TEST_DATA.tuskarclient_overcloud_roles.list()
flavor = TEST_DATA.novaclient_flavors.first()
old_flavor_id = roles[0].flavor_id
roles[0].flavor_id = 'default'
roles[0].flavor_id = flavor.id
data = {
'overcloud_id': '1',
'count__1__default': '1',
'count__1__%s' % flavor.id: '1',
'count__2__': '0',
'count__3__': '0',
'count__4__': '0',
@ -292,7 +323,7 @@ class OvercloudTests(test.BaseAdminViewTests):
} for role in roles]),
patch('openstack_dashboard.api.nova', **{
'spec_set': ['flavor_list'],
'flavor_list.return_value': [],
'flavor_list.return_value': [flavor],
}),
) as (OvercloudRole, Overcloud, nova):
url = urlresolvers.reverse(
@ -304,7 +335,7 @@ class OvercloudTests(test.BaseAdminViewTests):
# Overcloud.update.call_args_list,
# [
# call(request, {
# ('1', 'default'): 1,
# ('1', flavor.id): 1,
# ('2', ''): 0,
# ('3', ''): 0,
# ('4', ''): 0,

View File

@ -53,10 +53,10 @@ class Action(horizon.workflows.Action):
def _get_profiles(self, role, profile_names):
# TODO(rdopieralski) Get a list of hardware profiles for each
# role here, when we support multiple profiles per role.
if role.flavor_id:
if role.flavor_id and role.flavor_id in profile_names:
profiles = [(
role.flavor_id,
profile_names.get(str(role.flavor_id), role.flavor_id),
profile_names[role.flavor_id],
)]
else:
profiles = []