distcloud/dcmanager/db/sqlalchemy/migrate_repo/versions/001_first_version.py

198 lines
8.8 KiB
Python

# Copyright (c) 2015 Ericsson AB.
# All Rights Reserved.
#
# 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.
#
# Copyright (c) 2017 Wind River Systems, Inc.
#
# The right to copy, distribute, modify, or otherwise make use
# of this software may be licensed only pursuant to the terms
# of an applicable Wind River license agreement.
#
from dcmanager.drivers.openstack import vim
import sqlalchemy
def upgrade(migrate_engine):
meta = sqlalchemy.MetaData()
meta.bind = migrate_engine
subclouds = sqlalchemy.Table(
'subclouds', meta,
sqlalchemy.Column('id', sqlalchemy.Integer,
primary_key=True, nullable=False),
sqlalchemy.Column('name', sqlalchemy.String(255), unique=True),
sqlalchemy.Column('description', sqlalchemy.String(255)),
sqlalchemy.Column('location', sqlalchemy.String(255)),
sqlalchemy.Column('software_version', sqlalchemy.String(255)),
sqlalchemy.Column('management_state', sqlalchemy.String(255)),
sqlalchemy.Column('availability_status', sqlalchemy.String(255)),
sqlalchemy.Column('management_subnet', sqlalchemy.String(255)),
sqlalchemy.Column('management_gateway_ip', sqlalchemy.String(255)),
sqlalchemy.Column('management_start_ip', sqlalchemy.String(255)),
sqlalchemy.Column('management_end_ip', sqlalchemy.String(255)),
sqlalchemy.Column('systemcontroller_gateway_ip',
sqlalchemy.String(255)),
sqlalchemy.Column('audit_fail_count', sqlalchemy.Integer, default=0),
sqlalchemy.Column('reserved_1', sqlalchemy.Text),
sqlalchemy.Column('reserved_2', sqlalchemy.Text),
sqlalchemy.Column('created_at', sqlalchemy.DateTime),
sqlalchemy.Column('updated_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted', sqlalchemy.Integer),
mysql_engine='InnoDB',
mysql_charset='utf8'
)
subcloud_status = sqlalchemy.Table(
'subcloud_status', meta,
sqlalchemy.Column('id', sqlalchemy.Integer,
primary_key=True, nullable=False),
sqlalchemy.Column('subcloud_id', sqlalchemy.Integer,
sqlalchemy.ForeignKey('subclouds.id',
ondelete='CASCADE')),
sqlalchemy.Column('endpoint_type', sqlalchemy.String(255)),
sqlalchemy.Column('sync_status', sqlalchemy.String(255)),
sqlalchemy.Column('reserved_1', sqlalchemy.Text),
sqlalchemy.Column('reserved_2', sqlalchemy.Text),
sqlalchemy.Column('created_at', sqlalchemy.DateTime),
sqlalchemy.Column('updated_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted', sqlalchemy.Integer),
mysql_engine='InnoDB',
mysql_charset='utf8'
)
sw_update_strategy = sqlalchemy.Table(
'sw_update_strategy', meta,
sqlalchemy.Column('id', sqlalchemy.Integer,
primary_key=True, nullable=False),
sqlalchemy.Column('type', sqlalchemy.String(255), unique=True),
sqlalchemy.Column('subcloud_apply_type', sqlalchemy.String(255)),
sqlalchemy.Column('max_parallel_subclouds', sqlalchemy.Integer),
sqlalchemy.Column('stop_on_failure', sqlalchemy.Boolean),
sqlalchemy.Column('state', sqlalchemy.String(255)),
sqlalchemy.Column('reserved_1', sqlalchemy.Text),
sqlalchemy.Column('reserved_2', sqlalchemy.Text),
sqlalchemy.Column('created_at', sqlalchemy.DateTime),
sqlalchemy.Column('updated_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted', sqlalchemy.Integer),
mysql_engine='InnoDB',
mysql_charset='utf8'
)
sw_update_opts_default = sqlalchemy.Table(
'sw_update_opts_default', meta,
sqlalchemy.Column('id', sqlalchemy.Integer,
primary_key=True, nullable=False),
sqlalchemy.Column('subcloud_id', sqlalchemy.Integer),
sqlalchemy.Column('storage_apply_type', sqlalchemy.String(255)),
sqlalchemy.Column('compute_apply_type', sqlalchemy.String(255)),
sqlalchemy.Column('max_parallel_computes', sqlalchemy.Integer),
sqlalchemy.Column('default_instance_action', sqlalchemy.String(255)),
sqlalchemy.Column('alarm_restriction_type', sqlalchemy.String(255)),
sqlalchemy.Column('reserved_1', sqlalchemy.Text),
sqlalchemy.Column('reserved_2', sqlalchemy.Text),
sqlalchemy.Column('created_at', sqlalchemy.DateTime),
sqlalchemy.Column('updated_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted', sqlalchemy.Integer),
mysql_engine='InnoDB',
mysql_charset='utf8'
)
sw_update_opts = sqlalchemy.Table(
'sw_update_opts', meta,
sqlalchemy.Column('id', sqlalchemy.Integer,
primary_key=True, nullable=False),
sqlalchemy.Column('subcloud_id', sqlalchemy.Integer,
sqlalchemy.ForeignKey('subclouds.id',
ondelete='CASCADE')),
sqlalchemy.Column('storage_apply_type', sqlalchemy.String(255)),
sqlalchemy.Column('compute_apply_type', sqlalchemy.String(255)),
sqlalchemy.Column('max_parallel_computes', sqlalchemy.Integer),
sqlalchemy.Column('default_instance_action', sqlalchemy.String(255)),
sqlalchemy.Column('alarm_restriction_type', sqlalchemy.String(255)),
sqlalchemy.Column('reserved_1', sqlalchemy.Text),
sqlalchemy.Column('reserved_2', sqlalchemy.Text),
sqlalchemy.Column('created_at', sqlalchemy.DateTime),
sqlalchemy.Column('updated_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted', sqlalchemy.Integer),
mysql_engine='InnoDB',
mysql_charset='utf8'
)
strategy_steps = sqlalchemy.Table(
'strategy_steps', meta,
sqlalchemy.Column('id', sqlalchemy.Integer,
primary_key=True, nullable=False),
sqlalchemy.Column('subcloud_id', sqlalchemy.Integer,
sqlalchemy.ForeignKey('subclouds.id',
ondelete='CASCADE'),
unique=True),
sqlalchemy.Column('stage', sqlalchemy.Integer),
sqlalchemy.Column('state', sqlalchemy.String(255)),
sqlalchemy.Column('details', sqlalchemy.String(255)),
sqlalchemy.Column('started_at', sqlalchemy.DateTime),
sqlalchemy.Column('finished_at', sqlalchemy.DateTime),
sqlalchemy.Column('reserved_1', sqlalchemy.Text),
sqlalchemy.Column('reserved_2', sqlalchemy.Text),
sqlalchemy.Column('created_at', sqlalchemy.DateTime),
sqlalchemy.Column('updated_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted_at', sqlalchemy.DateTime),
sqlalchemy.Column('deleted', sqlalchemy.Integer),
mysql_engine='InnoDB',
mysql_charset='utf8'
)
tables = (
subclouds,
subcloud_status,
sw_update_strategy,
strategy_steps,
sw_update_opts,
sw_update_opts_default
)
for index, table in enumerate(tables):
try:
table.create()
except Exception:
# If an error occurs, drop all tables created so far to return
# to the previously existing state.
meta.drop_all(tables=tables[:index])
raise
try:
# populate the sw_update_opts_default with the default values.
con = migrate_engine.connect()
con.execute(sw_update_opts_default.insert(),
storage_apply_type=vim.APPLY_TYPE_PARALLEL,
compute_apply_type=vim.APPLY_TYPE_PARALLEL,
max_parallel_computes=10,
default_instance_action=vim.INSTANCE_ACTION_MIGRATE,
alarm_restriction_type=vim.ALARM_RESTRICTIONS_RELAXED,
deleted=0)
except Exception:
# We can survive if this fails.
pass
def downgrade(migrate_engine):
raise NotImplementedError('Database downgrade not supported - '
'would drop all tables')