Merge "Change software_config storage of config and io columns"

This commit is contained in:
Jenkins 2014-03-03 12:00:44 +00:00 committed by Gerrit Code Review
commit 96ea6d4cd9
7 changed files with 58 additions and 20 deletions

View File

@ -0,0 +1,34 @@
# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from heat.db.sqlalchemy.types import LongText
from heat.db.sqlalchemy.types import Json
import sqlalchemy
def upgrade(migrate_engine):
meta = sqlalchemy.MetaData(bind=migrate_engine)
software_config = sqlalchemy.Table('software_config', meta, autoload=True)
software_config.c.config.alter(type=Json)
software_config.c.io.drop()
def downgrade(migrate_engine):
meta = sqlalchemy.MetaData(bind=migrate_engine)
software_config = sqlalchemy.Table('software_config', meta, autoload=True)
software_config.c.config.alter(type=LongText)
io = sqlalchemy.Column('io', Json)
io.create(software_config)

View File

@ -26,7 +26,6 @@ from heat.openstack.common.db.sqlalchemy import models
from heat.openstack.common.db.sqlalchemy import session
from sqlalchemy.orm.session import Session
from heat.db.sqlalchemy.types import Json
from heat.db.sqlalchemy.types import LongText
BASE = declarative_base()
get_session = session.get_session
@ -269,8 +268,7 @@ class SoftwareConfig(BASE, HeatBase):
name = sqlalchemy.Column('name', sqlalchemy.String(255),
nullable=True)
group = sqlalchemy.Column('group', sqlalchemy.String(255))
config = sqlalchemy.Column('config', LongText)
io = sqlalchemy.Column('io', Json)
config = sqlalchemy.Column('config', Json)
tenant = sqlalchemy.Column(
'tenant', sqlalchemy.String(256), nullable=False)

View File

@ -318,10 +318,10 @@ def format_software_config(sc):
api.SOFTWARE_CONFIG_ID: sc.id,
api.SOFTWARE_CONFIG_NAME: sc.name,
api.SOFTWARE_CONFIG_GROUP: sc.group,
api.SOFTWARE_CONFIG_CONFIG: sc.config,
api.SOFTWARE_CONFIG_INPUTS: sc.io['inputs'],
api.SOFTWARE_CONFIG_OUTPUTS: sc.io['outputs'],
api.SOFTWARE_CONFIG_OPTIONS: sc.io['options']
api.SOFTWARE_CONFIG_CONFIG: sc.config['config'],
api.SOFTWARE_CONFIG_INPUTS: sc.config['inputs'],
api.SOFTWARE_CONFIG_OUTPUTS: sc.config['outputs'],
api.SOFTWARE_CONFIG_OPTIONS: sc.config['options']
}
return result

View File

@ -1080,14 +1080,15 @@ class EngineService(service.Service):
@request_context
def create_software_config(self, cnxt, group, name, config,
inputs, outputs, options):
sc = db_api.software_config_create(cnxt, {
'group': group,
'name': name,
'config': config,
'io': {
'config': {
'inputs': inputs,
'outputs': outputs,
'options': options
'options': options,
'config': config
},
'tenant': cnxt.tenant_id})
return api.format_software_config(sc)

View File

@ -234,3 +234,6 @@ class TestHeatMigrations(test_migrations.BaseMigrationTestCase,
def _check_036(self, engine, data):
self.assertColumnExists(engine, 'stack', 'stack_user_project_id')
def _check_038(self, engine, data):
self.assertColumnNotExists(engine, 'software_config', 'io')

View File

@ -761,12 +761,12 @@ class FormatSoftwareConfigDeploymentTest(HeatTestCase):
config = mock.Mock()
config.name = 'config_mysql'
config.group = 'Heat::Shell'
config.config = '#!/bin/bash\n'
config.id = str(uuid.uuid4())
config.io = {
config.config = {
'inputs': [{'name': 'bar'}],
'outputs': [{'name': 'result'}],
'options': {}
'options': {},
'config': '#!/bin/bash\n'
}
return config

View File

@ -622,16 +622,19 @@ class SqlAlchemyTest(HeatTestCase):
db_api.software_config_get,
self.ctx,
str(uuid.uuid4()))
io = {'inputs': [{'name': 'foo'}, {'name': 'bar'}],
'outputs': [{'name': 'result'}]}
tenant_id = self.ctx.tenant_id
conf = ('#!/bin/bash\n'
'echo "$bar and $foo"\n')
config = {
'inputs': [{'name': 'foo'}, {'name': 'bar'}],
'outputs': [{'name': 'result'}],
'config': conf,
'options': {}
}
tenant_id = self.ctx.tenant_id
values = {'name': 'config_mysql',
'tenant': tenant_id,
'group': 'Heat::Shell',
'config': conf,
'io': io}
'config': config}
config = db_api.software_config_create(
self.ctx, values)
config_id = config.id
@ -640,8 +643,7 @@ class SqlAlchemyTest(HeatTestCase):
self.assertEqual('config_mysql', config.name)
self.assertEqual(tenant_id, config.tenant)
self.assertEqual('Heat::Shell', config.group)
self.assertEqual(conf, config.config)
self.assertEqual(io, config.io)
self.assertEqual(conf, config.config['config'])
self.ctx.tenant_id = None
self.assertRaises(
exception.NotFound,