Ignore migrating environments for deleted stacks

Change-Id: I50b7a0f309922aa3c6ef63b9d27282e2adae4a6e
Closes-Bug: 1432795
This commit is contained in:
Randall Burt 2015-03-16 15:25:47 -05:00
parent 1eae9e6019
commit 9b559905dd
2 changed files with 28 additions and 17 deletions

View File

@ -41,8 +41,8 @@ def upgrade(migrate_engine):
stack_table = sqlalchemy.Table('stack', meta, autoload=True)
update_query = tmpl_table.update().values(
environment=sqlalchemy.select([stack_table.c.parameters]).
where(tmpl_table.c.id == stack_table.c.raw_template_id).
as_scalar())
where(sqlalchemy.and_(stack_table.c.raw_template_id == tmpl_table.c.id,
stack_table.c.deleted_at.is_(None))).as_scalar())
migrate_engine.execute(update_query)
stack_table.c.parameters.drop()
@ -76,14 +76,16 @@ def upgrade_sqlite(migrate_engine):
stack_parameters = {}
for s in stacks:
stack_parameters[s.raw_template_id] = s.parameters
stack_parameters[s.raw_template_id] = (s.parameters, s.deleted_at)
colnames = [c.name for c in tmpl_table.columns]
for template in templates:
values = dict(zip(colnames,
map(lambda colname: getattr(template, colname),
colnames)))
values['environment'] = stack_parameters.get(values['id'])
params, del_at = stack_parameters.get(values['id'], (None, None))
if params is not None and del_at is None:
values['environment'] = params
migrate_engine.execute(new_template.insert(values))
# migrate stacks to new table

View File

@ -434,11 +434,11 @@ class HeatMigrationsCheckers(test_migrations.WalkVersionsMixin,
templ.append(t)
user_creds = utils.get_table(engine, 'user_creds')
user = [dict(id=900, username='test_user', password='password',
user = [dict(id=uid, username='test_user', password='password',
tenant='test_project', auth_url='bla',
tenant_id=str(uuid.uuid4()),
trust_id='',
trustor_user_id='')]
trustor_user_id='') for uid in range(900, 903)]
engine.execute(user_creds.insert(), user)
stack = utils.get_table(engine, 'stack')
@ -447,11 +447,14 @@ class HeatMigrationsCheckers(test_migrations.WalkVersionsMixin,
('9a4bd1e9-8b21-46cd-964a-f66cb1cfa2f9', 2)]
data = [dict(id=ll_id, name=ll_id,
raw_template_id=templ[templ_id]['id'],
user_creds_id=user[0]['id'],
user_creds_id=user[templ_id]['id'],
username='test_user',
disable_rollback=True,
parameters='test_params')
parameters='test_params',
created_at=datetime.datetime.utcnow(),
deleted_at=None)
for ll_id, templ_id in stack_ids]
data[-1]['deleted_at'] = datetime.datetime.utcnow()
engine.execute(stack.insert(), data)
return data
@ -465,23 +468,29 @@ class HeatMigrationsCheckers(test_migrations.WalkVersionsMixin,
# Get the parameters in stack table
stack_parameters = {}
for stack in data:
stack_parameters[stack['raw_template_id']] = stack['parameters']
templ_id = stack['raw_template_id']
stack_parameters[templ_id] = (stack['parameters'],
stack.get('deleted_at'))
# validate whether its moved to raw_template
raw_template_table = utils.get_table(engine, 'raw_template')
raw_templates = raw_template_table.select().execute()
for raw_template in raw_templates:
if stack_parameters.get(raw_template.id) is not None:
stack_param = stack_parameters[raw_template.id]
if raw_template.id in stack_parameters:
stack_param, deleted_at = stack_parameters[raw_template.id]
tmpl_env = raw_template.environment
if engine.name == 'sqlite':
if engine.name == 'sqlite' and deleted_at is None:
stack_param = '"%s"' % stack_param
self.assertEqual(stack_param,
tmpl_env,
'parameters migration from stack to '
'raw_template failed')
if deleted_at is None:
self.assertEqual(stack_param,
tmpl_env,
'parameters migration from stack to '
'raw_template failed')
else:
self.assertIsNone(tmpl_env,
'parameters migration did not skip '
'deleted stack')
def _pre_upgrade_057(self, engine):
# template