Remove parsed template from database
It is no longer used since we now store the parameters and can recreate the parsed template from the raw template. Change-Id: Id725bcde7b30ce33d122ccf9c6d5c571f7d754da Signed-off-by: Zane Bitter <zbitter@redhat.com>
This commit is contained in:
parent
efc611652e
commit
0a6ac9895c
|
@ -62,18 +62,6 @@ def raw_template_create(context, values):
|
||||||
return IMPL.raw_template_create(context, values)
|
return IMPL.raw_template_create(context, values)
|
||||||
|
|
||||||
|
|
||||||
def parsed_template_get(context, template_id):
|
|
||||||
return IMPL.parsed_template_get(context, template_id)
|
|
||||||
|
|
||||||
|
|
||||||
def parsed_template_get_all(context):
|
|
||||||
return IMPL.parsed_template_get_all(context)
|
|
||||||
|
|
||||||
|
|
||||||
def parsed_template_create(context, values):
|
|
||||||
return IMPL.parsed_template_create(context, values)
|
|
||||||
|
|
||||||
|
|
||||||
def resource_get(context, resource_id):
|
def resource_get(context, resource_id):
|
||||||
return IMPL.resource_get(context, resource_id)
|
return IMPL.resource_get(context, resource_id)
|
||||||
|
|
||||||
|
|
|
@ -58,28 +58,6 @@ def raw_template_create(context, values):
|
||||||
return raw_template_ref
|
return raw_template_ref
|
||||||
|
|
||||||
|
|
||||||
def parsed_template_get(context, template_id):
|
|
||||||
result = model_query(context, models.ParsedTemplate).\
|
|
||||||
filter_by(id=template_id).first()
|
|
||||||
return result
|
|
||||||
|
|
||||||
|
|
||||||
def parsed_template_get_all(context):
|
|
||||||
results = model_query(context, models.ParsedTemplate).all()
|
|
||||||
|
|
||||||
if not results:
|
|
||||||
raise NotFound('no parsed templates were found')
|
|
||||||
|
|
||||||
return results
|
|
||||||
|
|
||||||
|
|
||||||
def parsed_template_create(context, values):
|
|
||||||
parsed_template_ref = models.ParsedTemplate()
|
|
||||||
parsed_template_ref.update(values)
|
|
||||||
parsed_template_ref.save()
|
|
||||||
return parsed_template_ref
|
|
||||||
|
|
||||||
|
|
||||||
def resource_get(context, resource_id):
|
def resource_get(context, resource_id):
|
||||||
result = model_query(context, models.Resource).\
|
result = model_query(context, models.Resource).\
|
||||||
filter_by(id=resource_id).first()
|
filter_by(id=resource_id).first()
|
||||||
|
@ -184,21 +162,14 @@ def stack_delete(context, stack_id):
|
||||||
for e in s.events:
|
for e in s.events:
|
||||||
session.delete(e)
|
session.delete(e)
|
||||||
|
|
||||||
rpt = {}
|
|
||||||
rrt = {}
|
|
||||||
for r in s.resources:
|
for r in s.resources:
|
||||||
rpt[r.parsed_template.id] = r.parsed_template
|
|
||||||
rrt[r.parsed_template.raw_template.id] = \
|
|
||||||
r.parsed_template.raw_template
|
|
||||||
session.delete(r)
|
session.delete(r)
|
||||||
|
|
||||||
for pt in rpt.values():
|
rt = s.raw_template
|
||||||
session.delete(pt)
|
|
||||||
|
|
||||||
for rt in rrt.values():
|
|
||||||
session.delete(rt)
|
|
||||||
|
|
||||||
session.delete(s)
|
session.delete(s)
|
||||||
|
session.delete(rt)
|
||||||
|
|
||||||
session.flush()
|
session.flush()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,49 @@
|
||||||
|
from sqlalchemy import *
|
||||||
|
from migrate import *
|
||||||
|
|
||||||
|
|
||||||
|
def upgrade(migrate_engine):
|
||||||
|
meta = MetaData(bind=migrate_engine)
|
||||||
|
|
||||||
|
def fk_name(table, ref_column):
|
||||||
|
for fk in table.foreign_keys:
|
||||||
|
if fk.column == ref_column:
|
||||||
|
return fk.name
|
||||||
|
|
||||||
|
resource = Table('resource', meta, autoload=True)
|
||||||
|
parsed_template = Table('parsed_template', meta, autoload=True)
|
||||||
|
|
||||||
|
res_kc = ForeignKeyConstraint([resource.c.parsed_template_id],
|
||||||
|
[parsed_template.c.id],
|
||||||
|
name=fk_name(resource,
|
||||||
|
parsed_template.c.id))
|
||||||
|
try:
|
||||||
|
res_kc.drop()
|
||||||
|
except NotSupportedError:
|
||||||
|
# SQLite (used in unit tests) cannot drop a Foreign Key constraint
|
||||||
|
pass
|
||||||
|
|
||||||
|
resource.c.parsed_template_id.drop()
|
||||||
|
|
||||||
|
parsed_template.drop()
|
||||||
|
|
||||||
|
|
||||||
|
def downgrade(migrate_engine):
|
||||||
|
meta = MetaData(bind=migrate_engine)
|
||||||
|
|
||||||
|
raw_template = Table('raw_template', meta, autoload=True)
|
||||||
|
|
||||||
|
parsed_template = Table(
|
||||||
|
'parsed_template', meta,
|
||||||
|
Column('id', Integer, primary_key=True),
|
||||||
|
Column('created_at', DateTime(timezone=False)),
|
||||||
|
Column('updated_at', DateTime(timezone=False)),
|
||||||
|
Column('raw_template_id', Integer, ForeignKey("raw_template.id"),
|
||||||
|
nullable=False),
|
||||||
|
Column('template', Text())
|
||||||
|
)
|
||||||
|
parsed_template.create()
|
||||||
|
|
||||||
|
resource = Table('resource', meta, autoload=True)
|
||||||
|
Column('parsed_template_id', Integer, ForeignKey('parsed_template.id'),
|
||||||
|
nullable=True).create(resource)
|
|
@ -132,18 +132,6 @@ class RawTemplate(BASE, HeatBase):
|
||||||
__tablename__ = 'raw_template'
|
__tablename__ = 'raw_template'
|
||||||
id = Column(Integer, primary_key=True)
|
id = Column(Integer, primary_key=True)
|
||||||
template = Column(Json)
|
template = Column(Json)
|
||||||
parsed_template = relationship("ParsedTemplate",
|
|
||||||
uselist=False, backref="raw_template")
|
|
||||||
|
|
||||||
|
|
||||||
class ParsedTemplate(BASE, HeatBase):
|
|
||||||
"""Represents a parsed template."""
|
|
||||||
|
|
||||||
__tablename__ = 'parsed_template'
|
|
||||||
id = Column(Integer, primary_key=True)
|
|
||||||
template = Column(Json)
|
|
||||||
raw_template_id = Column(Integer, ForeignKey('raw_template.id'),
|
|
||||||
nullable=False)
|
|
||||||
|
|
||||||
|
|
||||||
class Stack(BASE, HeatBase):
|
class Stack(BASE, HeatBase):
|
||||||
|
@ -217,10 +205,6 @@ class Resource(BASE, HeatBase):
|
||||||
state_description = Column('state_description', String)
|
state_description = Column('state_description', String)
|
||||||
# odd name as "metadata" is reserved
|
# odd name as "metadata" is reserved
|
||||||
rsrc_metadata = Column('rsrc_metadata', Json)
|
rsrc_metadata = Column('rsrc_metadata', Json)
|
||||||
parsed_template_id = Column(Integer, ForeignKey('parsed_template.id'),
|
|
||||||
nullable=True)
|
|
||||||
parsed_template = relationship(ParsedTemplate,
|
|
||||||
backref=backref('resources'))
|
|
||||||
|
|
||||||
stack_id = Column(Integer, ForeignKey('stack.id'),
|
stack_id = Column(Integer, ForeignKey('stack.id'),
|
||||||
nullable=False)
|
nullable=False)
|
||||||
|
|
|
@ -106,8 +106,8 @@ class EngineManager(manager.Manager):
|
||||||
return res
|
return res
|
||||||
for s in stacks:
|
for s in stacks:
|
||||||
ps = parser.Stack(context, s.name,
|
ps = parser.Stack(context, s.name,
|
||||||
s.raw_template.parsed_template.template,
|
s.raw_template.template,
|
||||||
s.id, _extract_user_params(params))
|
s.id, s.parameters)
|
||||||
mem = {}
|
mem = {}
|
||||||
mem['StackId'] = "/".join([s.name, str(s.id)])
|
mem['StackId'] = "/".join([s.name, str(s.id)])
|
||||||
mem['StackName'] = s.name
|
mem['StackName'] = s.name
|
||||||
|
@ -145,8 +145,8 @@ class EngineManager(manager.Manager):
|
||||||
s = db_api.stack_get_by_name(context, stack)
|
s = db_api.stack_get_by_name(context, stack)
|
||||||
if s:
|
if s:
|
||||||
ps = parser.Stack(context, s.name,
|
ps = parser.Stack(context, s.name,
|
||||||
s.raw_template.parsed_template.template,
|
s.raw_template.template,
|
||||||
s.id, _extract_user_params(params))
|
s.id, s.parameters)
|
||||||
mem = {}
|
mem = {}
|
||||||
mem['StackId'] = "/".join([s.name, str(s.id)])
|
mem['StackId'] = "/".join([s.name, str(s.id)])
|
||||||
mem['StackName'] = s.name
|
mem['StackName'] = s.name
|
||||||
|
@ -219,13 +219,6 @@ class EngineManager(manager.Manager):
|
||||||
new_s = db_api.stack_create(context, s)
|
new_s = db_api.stack_create(context, s)
|
||||||
stack.id = new_s.id
|
stack.id = new_s.id
|
||||||
|
|
||||||
pt = {}
|
|
||||||
pt['template'] = stack.t
|
|
||||||
pt['raw_template_id'] = new_rt.id
|
|
||||||
new_pt = db_api.parsed_template_create(None, pt)
|
|
||||||
|
|
||||||
stack.parsed_template_id = new_pt.id
|
|
||||||
|
|
||||||
greenpool.spawn_n(stack.create, **_extract_args(params))
|
greenpool.spawn_n(stack.create, **_extract_args(params))
|
||||||
|
|
||||||
return {'StackId': "/".join([new_s.name, str(new_s.id)])}
|
return {'StackId': "/".join([new_s.name, str(new_s.id)])}
|
||||||
|
|
|
@ -44,7 +44,6 @@ class Stack(object):
|
||||||
self.res = {}
|
self.res = {}
|
||||||
self.doc = None
|
self.doc = None
|
||||||
self.name = stack_name
|
self.name = stack_name
|
||||||
self.parsed_template_id = 0
|
|
||||||
self.metadata_server = metadata_server
|
self.metadata_server = metadata_server
|
||||||
|
|
||||||
# Default Parameters
|
# Default Parameters
|
||||||
|
@ -148,36 +147,6 @@ class Stack(object):
|
||||||
response['ValidateTemplateResult']['Parameters'].append(res)
|
response['ValidateTemplateResult']['Parameters'].append(res)
|
||||||
return response
|
return response
|
||||||
|
|
||||||
def parsed_template_get(self):
|
|
||||||
stack = None
|
|
||||||
if self.parsed_template_id == 0:
|
|
||||||
if self.id == 0:
|
|
||||||
stack = db_api.stack_get(self.context, self.id)
|
|
||||||
else:
|
|
||||||
stack = db_api.stack_get_by_name(self.context, self.name)
|
|
||||||
|
|
||||||
if stack is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
self.parsed_template_id = stack.raw_template.parsed_template.id
|
|
||||||
return db_api.parsed_template_get(self.context,
|
|
||||||
self.parsed_template_id)
|
|
||||||
|
|
||||||
def update_parsed_template(self):
|
|
||||||
'''
|
|
||||||
Update the parsed template after each resource has been
|
|
||||||
created, so commands like describe will work.
|
|
||||||
'''
|
|
||||||
pt = self.parsed_template_get()
|
|
||||||
if pt:
|
|
||||||
template = self.t.copy()
|
|
||||||
template['Resources'] = dict((k, r.parsed_template())
|
|
||||||
for (k, r) in self.resources.items())
|
|
||||||
pt.update_and_save({'template': template})
|
|
||||||
else:
|
|
||||||
logger.warn('Cant find parsed template to update %d' %
|
|
||||||
self.parsed_template_id)
|
|
||||||
|
|
||||||
def state_set(self, new_status, reason='change in resource state'):
|
def state_set(self, new_status, reason='change in resource state'):
|
||||||
if self.id != 0:
|
if self.id != 0:
|
||||||
stack = db_api.stack_get(self.context, self.id)
|
stack = db_api.stack_get(self.context, self.id)
|
||||||
|
@ -214,11 +183,6 @@ class Stack(object):
|
||||||
reason = 'Resource %s failed with: %s' % (str(res),
|
reason = 'Resource %s failed with: %s' % (str(res),
|
||||||
result)
|
result)
|
||||||
|
|
||||||
try:
|
|
||||||
self.update_parsed_template()
|
|
||||||
except Exception as ex:
|
|
||||||
logger.exception('update_parsed_template')
|
|
||||||
|
|
||||||
else:
|
else:
|
||||||
res.state_set(res.CREATE_FAILED,
|
res.state_set(res.CREATE_FAILED,
|
||||||
'Stack creation aborted')
|
'Stack creation aborted')
|
||||||
|
@ -271,12 +235,6 @@ class Stack(object):
|
||||||
stop resource_name and all that depend on it
|
stop resource_name and all that depend on it
|
||||||
start resource_name and all that depend on it
|
start resource_name and all that depend on it
|
||||||
'''
|
'''
|
||||||
|
|
||||||
if self.parsed_template_id == 0:
|
|
||||||
stack = db_api.stack_get(self.context, self.id)
|
|
||||||
if stack:
|
|
||||||
self.parsed_template_id = stack.raw_template.parsed_template.id
|
|
||||||
|
|
||||||
deps = self.dependencies[self[resource_name]]
|
deps = self.dependencies[self[resource_name]]
|
||||||
failed = False
|
failed = False
|
||||||
|
|
||||||
|
@ -296,11 +254,6 @@ class Stack(object):
|
||||||
except Exception as ex:
|
except Exception as ex:
|
||||||
logger.exception('create')
|
logger.exception('create')
|
||||||
failed = True
|
failed = True
|
||||||
|
|
||||||
try:
|
|
||||||
self.update_parsed_template()
|
|
||||||
except Exception as ex:
|
|
||||||
logger.exception('update_parsed_template')
|
|
||||||
else:
|
else:
|
||||||
res.state_set(res.CREATE_FAILED)
|
res.state_set(res.CREATE_FAILED)
|
||||||
# TODO(asalkeld) if any of this fails we Should
|
# TODO(asalkeld) if any of this fails we Should
|
||||||
|
|
|
@ -213,7 +213,6 @@ class Resource(object):
|
||||||
try:
|
try:
|
||||||
rs = {'state': self.state,
|
rs = {'state': self.state,
|
||||||
'stack_id': self.stack.id,
|
'stack_id': self.stack.id,
|
||||||
'parsed_template_id': self.stack.parsed_template_id,
|
|
||||||
'nova_instance': self.instance_id,
|
'nova_instance': self.instance_id,
|
||||||
'name': self.name,
|
'name': self.name,
|
||||||
'rsrc_metadata': metadata,
|
'rsrc_metadata': metadata,
|
||||||
|
|
|
@ -54,7 +54,7 @@ class Stack(Resource):
|
||||||
raise exception.NotFound('Nested stack not found in DB')
|
raise exception.NotFound('Nested stack not found in DB')
|
||||||
|
|
||||||
n = parser.Stack(self.stack.context, st.name,
|
n = parser.Stack(self.stack.context, st.name,
|
||||||
st.raw_template.parsed_template.template,
|
st.raw_template.template,
|
||||||
self.instance_id, self._params())
|
self.instance_id, self._params())
|
||||||
self._nested = n
|
self._nested = n
|
||||||
|
|
||||||
|
@ -83,11 +83,6 @@ class Stack(Resource):
|
||||||
new_s = db_api.stack_create(None, s)
|
new_s = db_api.stack_create(None, s)
|
||||||
self._nested.id = new_s.id
|
self._nested.id = new_s.id
|
||||||
|
|
||||||
pt = {'template': self._nested.t, 'raw_template_id': new_rt.id}
|
|
||||||
new_pt = db_api.parsed_template_create(None, pt)
|
|
||||||
|
|
||||||
self._nested.parsed_template_id = new_pt.id
|
|
||||||
|
|
||||||
self._nested.create()
|
self._nested.create()
|
||||||
self.instance_id_set(self._nested.id)
|
self.instance_id_set(self._nested.id)
|
||||||
|
|
||||||
|
|
|
@ -83,10 +83,6 @@ class stacksTest(unittest.TestCase):
|
||||||
s['username'] = ct['username']
|
s['username'] = ct['username']
|
||||||
new_s = db_api.stack_create(None, s)
|
new_s = db_api.stack_create(None, s)
|
||||||
stack.id = new_s.id
|
stack.id = new_s.id
|
||||||
pt = {}
|
|
||||||
pt['template'] = stack.t
|
|
||||||
pt['raw_template_id'] = new_rt.id
|
|
||||||
new_pt = db_api.parsed_template_create(None, pt)
|
|
||||||
stack.create()
|
stack.create()
|
||||||
self.assertNotEqual(stack.resources['WebServer'], None)
|
self.assertNotEqual(stack.resources['WebServer'], None)
|
||||||
self.assertTrue(stack.resources['WebServer'].instance_id > 0)
|
self.assertTrue(stack.resources['WebServer'].instance_id > 0)
|
||||||
|
@ -113,10 +109,6 @@ class stacksTest(unittest.TestCase):
|
||||||
s['username'] = ct['username']
|
s['username'] = ct['username']
|
||||||
new_s = db_api.stack_create(None, s)
|
new_s = db_api.stack_create(None, s)
|
||||||
stack.id = new_s.id
|
stack.id = new_s.id
|
||||||
pt = {}
|
|
||||||
pt['template'] = stack.t
|
|
||||||
pt['raw_template_id'] = new_rt.id
|
|
||||||
new_pt = db_api.parsed_template_create(None, pt)
|
|
||||||
stack.create()
|
stack.create()
|
||||||
|
|
||||||
self.assertNotEqual(stack.resources['WebServer'], None)
|
self.assertNotEqual(stack.resources['WebServer'], None)
|
||||||
|
@ -165,10 +157,6 @@ class stacksTest(unittest.TestCase):
|
||||||
s['username'] = ct['username']
|
s['username'] = ct['username']
|
||||||
new_s = db_api.stack_create(ctx, s)
|
new_s = db_api.stack_create(ctx, s)
|
||||||
stack.id = new_s.id
|
stack.id = new_s.id
|
||||||
pt = {}
|
|
||||||
pt['template'] = stack.t
|
|
||||||
pt['raw_template_id'] = new_rt.id
|
|
||||||
new_pt = db_api.parsed_template_create(ctx, pt)
|
|
||||||
instances.Instance.nova().AndReturn(self.fc)
|
instances.Instance.nova().AndReturn(self.fc)
|
||||||
self.m.ReplayAll()
|
self.m.ReplayAll()
|
||||||
stack.create()
|
stack.create()
|
||||||
|
|
|
@ -66,12 +66,7 @@ class stacksTest(unittest.TestCase):
|
||||||
s['username'] = ct['username']
|
s['username'] = ct['username']
|
||||||
new_s = db_api.stack_create(None, s)
|
new_s = db_api.stack_create(None, s)
|
||||||
stack.id = new_s.id
|
stack.id = new_s.id
|
||||||
pt = {}
|
|
||||||
pt['template'] = stack.t
|
|
||||||
pt['raw_template_id'] = new_rt.id
|
|
||||||
new_pt = db_api.parsed_template_create(None, pt)
|
|
||||||
|
|
||||||
stack.parsed_template_id = new_pt.id
|
|
||||||
return stack
|
return stack
|
||||||
|
|
||||||
def test_post_success_to_handle(self):
|
def test_post_success_to_handle(self):
|
||||||
|
|
Loading…
Reference in New Issue