202 lines
6.3 KiB
Python
202 lines
6.3 KiB
Python
#
|
|
# Copyright (c) 2020 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
from sqlalchemy import DateTime, String, Integer, Boolean, Text
|
|
from sqlalchemy import Column, MetaData, Table
|
|
from sqlalchemy import ForeignKey, UniqueConstraint
|
|
|
|
ENGINE = 'InnoDB'
|
|
CHARSET = 'utf8'
|
|
|
|
|
|
def upgrade(migrate_engine):
|
|
"""
|
|
This database upgrade creates a device_images, device_labels and
|
|
device_image_state tables.
|
|
"""
|
|
|
|
meta = MetaData()
|
|
meta.bind = migrate_engine
|
|
|
|
device_images = Table(
|
|
'device_images',
|
|
meta,
|
|
Column('created_at', DateTime),
|
|
Column('updated_at', DateTime),
|
|
Column('deleted_at', DateTime),
|
|
|
|
Column('id', Integer, primary_key=True, nullable=False),
|
|
Column('uuid', String(36), unique=True),
|
|
|
|
Column('bitstream_type', String(255)),
|
|
# The pci_vendor and pci_device fields cannot be referenced from the
|
|
# pci_devices table. The device images intended for a specific
|
|
# vendor/device on a subcloud may not be present on the
|
|
# SystemController region
|
|
Column('pci_vendor', String(4)),
|
|
Column('pci_device', String(4)),
|
|
Column('name', String(255)),
|
|
Column('description', String(255)),
|
|
Column('image_version', String(255)),
|
|
Column('applied', Boolean, nullable=False, default=False),
|
|
Column('capabilities', Text),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
|
|
device_images_rootkey = Table(
|
|
'device_images_rootkey',
|
|
meta,
|
|
Column('created_at', DateTime),
|
|
Column('updated_at', DateTime),
|
|
Column('deleted_at', DateTime),
|
|
Column('id', Integer,
|
|
ForeignKey('device_images.id', ondelete="CASCADE"),
|
|
primary_key=True, nullable=False),
|
|
|
|
Column('key_signature', String(255), nullable=False),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
|
|
device_images_functional = Table(
|
|
'device_images_functional',
|
|
meta,
|
|
Column('created_at', DateTime),
|
|
Column('updated_at', DateTime),
|
|
Column('deleted_at', DateTime),
|
|
Column('id', Integer,
|
|
ForeignKey('device_images.id', ondelete="CASCADE"),
|
|
primary_key=True, nullable=False),
|
|
|
|
Column('bitstream_id', String(255), nullable=False),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
|
|
device_images_keyrevocation = Table(
|
|
'device_images_keyrevocation',
|
|
meta,
|
|
Column('created_at', DateTime),
|
|
Column('updated_at', DateTime),
|
|
Column('deleted_at', DateTime),
|
|
Column('id', Integer,
|
|
ForeignKey('device_images.id', ondelete="CASCADE"),
|
|
primary_key=True, nullable=False),
|
|
|
|
Column('revoke_key_id', Integer, nullable=False),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
|
|
host = Table('i_host', meta, autoload=True)
|
|
Table('pci_devices', meta, autoload=True)
|
|
Table('fpga_devices', meta, autoload=True)
|
|
device_labels = Table(
|
|
'device_labels',
|
|
meta,
|
|
Column('created_at', DateTime),
|
|
Column('updated_at', DateTime),
|
|
Column('deleted_at', DateTime),
|
|
|
|
Column('id', Integer, primary_key=True, nullable=False),
|
|
Column('uuid', String(36), unique=True),
|
|
|
|
Column('host_id', Integer,
|
|
ForeignKey('i_host.id', ondelete='CASCADE')),
|
|
Column('pcidevice_id', Integer,
|
|
ForeignKey('pci_devices.id', ondelete='CASCADE')),
|
|
Column('fpgadevice_id', Integer,
|
|
ForeignKey('fpga_devices.id', ondelete='CASCADE')),
|
|
Column('label_key', String(384)),
|
|
Column('label_value', String(128)),
|
|
Column('capabilities', Text),
|
|
|
|
UniqueConstraint('pcidevice_id', 'label_key',
|
|
name='u_pcidevice_id@label_key'),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
|
|
device_image_labels = Table(
|
|
'device_image_labels',
|
|
meta,
|
|
Column('created_at', DateTime),
|
|
Column('updated_at', DateTime),
|
|
Column('deleted_at', DateTime),
|
|
Column('id', Integer, primary_key=True, nullable=False),
|
|
Column('uuid', String(36), unique=True),
|
|
Column('image_id', Integer,
|
|
ForeignKey('device_images.id', ondelete='CASCADE')),
|
|
Column('label_id', Integer,
|
|
ForeignKey('device_labels.id', ondelete='CASCADE')),
|
|
Column('status', String(128)),
|
|
Column('capabilities', Text),
|
|
|
|
UniqueConstraint('image_id', 'label_id', name='u_image_id@label_id'),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
|
|
device_image_state = Table(
|
|
'device_image_state',
|
|
meta,
|
|
Column('created_at', DateTime),
|
|
Column('updated_at', DateTime),
|
|
Column('deleted_at', DateTime),
|
|
Column('id', Integer, primary_key=True, nullable=False),
|
|
Column('uuid', String(36), unique=True),
|
|
Column('host_id', Integer,
|
|
ForeignKey('i_host.id', ondelete='CASCADE')),
|
|
Column('pcidevice_id', Integer,
|
|
ForeignKey('pci_devices.id', ondelete='CASCADE')),
|
|
Column('image_id', Integer,
|
|
ForeignKey('device_images.id', ondelete='CASCADE')),
|
|
Column('status', String(128)),
|
|
Column('update_start_time', DateTime),
|
|
Column('capabilities', Text),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
|
|
tables = (
|
|
device_images,
|
|
device_images_rootkey,
|
|
device_images_functional,
|
|
device_images_keyrevocation,
|
|
device_labels,
|
|
device_image_labels,
|
|
device_image_state,
|
|
)
|
|
|
|
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
|
|
|
|
# Add the device_image_update attribute
|
|
host.create_column(Column('device_image_update', String(64)))
|
|
host.create_column(Column('reboot_needed', Boolean, default=False))
|
|
|
|
|
|
def downgrade(migrate_engine):
|
|
meta = MetaData()
|
|
meta.bind = migrate_engine
|
|
|
|
# Downgrade is unsupported.
|
|
raise NotImplementedError('SysInv database downgrade is unsupported.')
|