652 lines
21 KiB
Python
652 lines
21 KiB
Python
# vim: tabstop=4 shiftwidth=4 softtabstop=4
|
|
#
|
|
# Copyright (c) 2013-2016 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
|
|
from sqlalchemy import Column, MetaData, String, Table, UniqueConstraint
|
|
from sqlalchemy import Boolean, Integer, Enum, Text, ForeignKey, DateTime
|
|
from sqlalchemy.dialects import postgresql
|
|
|
|
ENGINE = 'InnoDB'
|
|
CHARSET = 'utf8'
|
|
|
|
# To migrate db to a new version you will have to modify all the enums to include:
|
|
# native_enum=False
|
|
# For example:
|
|
# recordTypeEnum = Enum('standard',
|
|
# 'profile',
|
|
# 'sprofile',
|
|
# 'reserve1',
|
|
# 'reserve2',
|
|
# native_enum=False
|
|
# name='recordtypeEnum')
|
|
#
|
|
# This uses VARCHAR + check constraints for all backends because the current enums in the
|
|
# db cannot be overwritten with enums of the same name. To add attributes to the current
|
|
# enums without migrating the 'reserve1' and 'reserve2' values can be updated. If creating
|
|
# a standalone column ( create_column method ) only then do the enums need to be explicitly
|
|
# created as shown below before calling create_column:
|
|
#
|
|
# if migrate_engine.url.get_dialect() is postgresql.dialect:
|
|
# enum1.create(migrate_engine, checkfirst=False)
|
|
|
|
|
|
def upgrade(migrate_engine):
|
|
meta = MetaData()
|
|
meta.bind = migrate_engine
|
|
|
|
# Enum definitions
|
|
recordTypeEnum = Enum('standard',
|
|
'profile',
|
|
'sprofile',
|
|
'reserve1',
|
|
'reserve2',
|
|
name='recordtypeEnum')
|
|
|
|
personalityEnum = Enum('controller',
|
|
'worker',
|
|
'network',
|
|
'storage',
|
|
'profile',
|
|
'reserve1',
|
|
'reserve2',
|
|
name='invPersonalityEnum')
|
|
|
|
adminEnum = Enum('locked',
|
|
'unlocked',
|
|
'reserve1',
|
|
'reserve2',
|
|
name='administrativeEnum')
|
|
|
|
operationalEnum = Enum('disabled',
|
|
'enabled',
|
|
'reserve1',
|
|
'reserve2',
|
|
name='operationalEnum')
|
|
|
|
availabilityEnum = Enum('available',
|
|
'intest',
|
|
'degraded',
|
|
'failed',
|
|
'power-off',
|
|
'offline',
|
|
'offduty',
|
|
'online',
|
|
'dependency',
|
|
'not-installed',
|
|
'reserve1',
|
|
'reserve2',
|
|
name='availabilityEnum')
|
|
|
|
actionEnum = Enum('none',
|
|
'lock',
|
|
'force-lock',
|
|
'unlock',
|
|
'reset',
|
|
'swact',
|
|
'force-swact',
|
|
'reboot',
|
|
'power-on',
|
|
'power-off',
|
|
'reinstall',
|
|
'reserve1',
|
|
'reserve2',
|
|
name='actionEnum')
|
|
|
|
typeEnum = Enum('snmpv2c_trap',
|
|
'reserve1',
|
|
'reserve2',
|
|
name='snmpVersionEnum')
|
|
|
|
transportEnum = Enum('udp',
|
|
'reserve1',
|
|
'reserve2',
|
|
name='snmpTransportType')
|
|
|
|
accessEnum = Enum('ro',
|
|
'rw',
|
|
'reserve1',
|
|
'reserve2',
|
|
name='accessEnum')
|
|
|
|
provisionEnum = Enum('unprovisioned',
|
|
'inventoried',
|
|
'configured',
|
|
'provisioned',
|
|
'reserve1',
|
|
'reserve2',
|
|
name='invprovisionStateEnum')
|
|
|
|
i_system = Table(
|
|
'i_system',
|
|
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),
|
|
|
|
# system name
|
|
Column('name', String(255), unique=True),
|
|
Column('description', String(255), unique=True),
|
|
Column('capabilities', Text),
|
|
Column('contact', String(255)),
|
|
Column('location', String(255)),
|
|
Column('services', Integer, default=72),
|
|
Column('software_version', String(255)),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_system.create()
|
|
|
|
i_Host = Table(
|
|
'i_host',
|
|
meta,
|
|
Column('created_at', DateTime),
|
|
Column('updated_at', DateTime),
|
|
Column('deleted_at', DateTime),
|
|
|
|
# Host is reserved while it runs a blocking operation ; like Lock
|
|
Column('reserved', Boolean),
|
|
Column('recordtype', recordTypeEnum, default="standard"),
|
|
|
|
Column('uuid', String(36), unique=True),
|
|
|
|
Column('id', Integer, primary_key=True, nullable=False), # autoincr
|
|
Column('hostname', String(255), unique=True, index=True),
|
|
|
|
Column('mgmt_mac', String(255), unique=True),
|
|
# MAC 01:34:67:9A:CD:FG (only need 16 bytes)
|
|
Column('mgmt_ip', String(255), unique=True),
|
|
|
|
# Board Management database members
|
|
Column('bm_ip', String(255)),
|
|
Column('bm_mac', String(255)),
|
|
Column('bm_type', String(255)),
|
|
Column('bm_username', String(255)),
|
|
Column('personality', personalityEnum),
|
|
Column('serialid', String(255)),
|
|
Column('location', Text),
|
|
Column('administrative', adminEnum, default="locked"),
|
|
Column('operational', operationalEnum, default="disabled"),
|
|
Column('availability', availabilityEnum, default="offline"),
|
|
Column('action', actionEnum, default="none"),
|
|
Column('task', String(64)),
|
|
Column('uptime', Integer),
|
|
Column('capabilities', Text),
|
|
Column('config_status', String(255)),
|
|
Column('config_applied', String(255)),
|
|
Column('config_target', String(255)),
|
|
Column('forisystemid', Integer,
|
|
ForeignKey('i_system.id', ondelete='CASCADE')),
|
|
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
|
|
i_Host.create()
|
|
|
|
if migrate_engine.url.get_dialect() is postgresql.dialect:
|
|
# Need to explicitly create Postgres enums during migrations
|
|
provisionEnum.create(migrate_engine, checkfirst=False)
|
|
|
|
invprovision = Column('invprovision', provisionEnum, default="unprovisioned")
|
|
i_Host.create_column(invprovision)
|
|
|
|
i_node = Table(
|
|
'i_node',
|
|
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),
|
|
|
|
# numaNode from /sys/devices/system/node/nodeX/cpulist or cpumap
|
|
Column('numa_node', Integer),
|
|
Column('capabilities', Text),
|
|
|
|
Column('forihostid', Integer,
|
|
ForeignKey('i_host.id', ondelete='CASCADE')),
|
|
UniqueConstraint('numa_node', 'forihostid', name='u_hostnuma'),
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_node.create()
|
|
|
|
i_cpu = Table(
|
|
'i_icpu',
|
|
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('numa_node', Integer, unique=True), API attribute
|
|
Column('cpu', Integer),
|
|
Column('core', Integer),
|
|
Column('thread', Integer),
|
|
Column('cpu_family', String(255)),
|
|
Column('cpu_model', String(255)),
|
|
Column('allocated_function', String(255)),
|
|
# JSONEncodedDict e.g. {'Crypto':'CaveCreek'}
|
|
Column('capabilities', Text),
|
|
|
|
Column('forihostid', Integer,
|
|
ForeignKey('i_host.id', ondelete='CASCADE')),
|
|
Column('forinodeid', Integer,
|
|
ForeignKey('i_node.id', ondelete='CASCADE')),
|
|
UniqueConstraint('cpu', 'forihostid', name='u_hostcpu'),
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_cpu.create()
|
|
|
|
i_memory = Table(
|
|
'i_imemory',
|
|
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),
|
|
|
|
# per NUMA: /sys/devices/system/node/node<x>/meminfo
|
|
Column('memtotal_mib', Integer),
|
|
Column('memavail_mib', Integer),
|
|
Column('platform_reserved_mib', Integer),
|
|
|
|
Column('hugepages_configured', Boolean),
|
|
|
|
Column('avs_hugepages_size_mib', Integer),
|
|
Column('avs_hugepages_reqd', Integer),
|
|
Column('avs_hugepages_nr', Integer),
|
|
Column('avs_hugepages_avail', Integer),
|
|
|
|
Column('vm_hugepages_size_mib', Integer),
|
|
Column('vm_hugepages_nr', Integer),
|
|
Column('vm_hugepages_avail', Integer),
|
|
|
|
Column('capabilities', Text),
|
|
|
|
# psql requires unique FK
|
|
Column('forihostid', Integer,
|
|
ForeignKey('i_host.id', ondelete='CASCADE')),
|
|
Column('forinodeid', Integer, ForeignKey('i_node.id')),
|
|
UniqueConstraint('forihostid', 'forinodeid', name='u_hostnode'),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_memory.create()
|
|
|
|
i_interface = Table(
|
|
'i_interface',
|
|
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)),
|
|
|
|
Column('ifname', String(255)),
|
|
Column('iftype', String(255)),
|
|
Column('imac', String(255), unique=True),
|
|
Column('imtu', Integer),
|
|
Column('networktype', String(255)),
|
|
Column('aemode', String(255)),
|
|
Column('txhashpolicy', String(255)),
|
|
Column('providernetworks', String(255)),
|
|
Column('providernetworksdict', Text),
|
|
Column('schedpolicy', String(255)),
|
|
Column('ifcapabilities', Text),
|
|
# JSON{'speed':1000, 'MTU':9600, 'duplex':'','autoneg':'false'}
|
|
Column('farend', Text),
|
|
|
|
Column('forihostid', Integer,
|
|
ForeignKey('i_host.id', ondelete='CASCADE')),
|
|
UniqueConstraint('ifname', 'forihostid', name='u_ifnameihost'),
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_interface.create()
|
|
|
|
i_port = Table(
|
|
'i_port',
|
|
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)),
|
|
|
|
Column('pname', String(255)),
|
|
Column('pnamedisplay', String(255)),
|
|
Column('pciaddr', String(255)),
|
|
Column('pclass', String(255)),
|
|
Column('pvendor', String(255)),
|
|
Column('pdevice', String(255)),
|
|
Column('psvendor', String(255)),
|
|
Column('psdevice', String(255)),
|
|
Column('numa_node', Integer),
|
|
Column('mac', String(255)),
|
|
Column('mtu', Integer),
|
|
Column('speed', Integer),
|
|
Column('link_mode', String(255)),
|
|
Column('autoneg', String(255)),
|
|
Column('bootp', String(255)),
|
|
Column('capabilities', Text),
|
|
# JSON{'speed':1000, 'MTU':9600, 'duplex':'','autoneg':'false'}
|
|
|
|
Column('forihostid', Integer,
|
|
ForeignKey('i_host.id', ondelete='CASCADE')),
|
|
Column('foriinterfaceid', Integer,
|
|
ForeignKey('i_interface.id')), # keep if unassign interface
|
|
UniqueConstraint('pciaddr', 'forihostid', name='u_pciaddrihost'),
|
|
Column('forinodeid', Integer,
|
|
ForeignKey('i_node.id', ondelete='CASCADE')),
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_port.create()
|
|
|
|
i_stor = Table(
|
|
'i_istor',
|
|
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('osdid', Integer),
|
|
Column('idisk_uuid', String(255)),
|
|
Column('state', String(255)),
|
|
Column('function', String(255)),
|
|
Column('capabilities', Text),
|
|
|
|
Column('forihostid', Integer,
|
|
ForeignKey('i_host.id', ondelete='CASCADE')),
|
|
|
|
# UniqueConstraint('name', 'forihostid', name='u_namehost'),
|
|
UniqueConstraint('osdid', 'forihostid', name='u_osdhost'),
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_stor.create()
|
|
|
|
i_disk = Table(
|
|
'i_idisk',
|
|
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('device_node', String(255)),
|
|
Column('device_num', Integer),
|
|
Column('device_type', String(255)),
|
|
Column('size_mib', Integer),
|
|
Column('serial_id', String(255)),
|
|
Column('capabilities', Text),
|
|
|
|
Column('forihostid', Integer,
|
|
ForeignKey('i_host.id', ondelete='CASCADE')),
|
|
Column('foristorid', Integer,
|
|
ForeignKey('i_istor.id')), # keep if stor deleted
|
|
|
|
|
|
# JKUNG is unique required for name ?
|
|
UniqueConstraint('device_node', 'forihostid', name='u_devhost'),
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_disk.create()
|
|
|
|
i_ServiceGroup = Table(
|
|
'i_servicegroup',
|
|
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('servicename', String(255), unique=True),
|
|
Column('state', String(255), default="unknown"),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_ServiceGroup.create()
|
|
|
|
i_Service = Table(
|
|
'i_service',
|
|
meta,
|
|
Column('created_at', DateTime),
|
|
Column('updated_at', DateTime),
|
|
Column('deleted_at', DateTime),
|
|
|
|
Column('id', Integer, primary_key=True, nullable=False), # autoincr
|
|
Column('uuid', String(36), unique=True),
|
|
|
|
Column('servicename', String(255)),
|
|
Column('hostname', String(255)),
|
|
Column('forihostid', Integer,
|
|
ForeignKey('i_host.id', ondelete='CASCADE')),
|
|
|
|
Column('activity', String), # active/standby
|
|
Column('state', String),
|
|
Column('reason', Text), # JSON encodedlist of string
|
|
|
|
UniqueConstraint('servicename', 'hostname',
|
|
name='u_servicehost'),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_Service.create()
|
|
|
|
i_trap = Table(
|
|
'i_trap_destination',
|
|
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('ip_address', String(40), unique=True, index=True),
|
|
Column('community', String(255)),
|
|
Column('port', Integer, default=162),
|
|
Column('type', typeEnum, default='snmpv2c_trap'),
|
|
|
|
Column('transport', transportEnum, default='udp'),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_trap.create()
|
|
|
|
i_community = Table(
|
|
'i_community',
|
|
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('community', String(255), unique=True, index=True),
|
|
Column('view', String(255), default='.1'),
|
|
Column('access', accessEnum, default='ro'),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_community.create()
|
|
|
|
i_user = Table(
|
|
'i_user',
|
|
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('root_sig', String(255)),
|
|
Column('reserved_1', String(255)),
|
|
Column('reserved_2', String(255)),
|
|
Column('reserved_3', String(255)),
|
|
|
|
Column('forisystemid', Integer,
|
|
ForeignKey('i_system.id', ondelete='CASCADE')),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_user.create()
|
|
|
|
i_dns = Table(
|
|
'i_dns',
|
|
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('nameservers', String(255)), # csv list of nameservers
|
|
|
|
Column('forisystemid', Integer,
|
|
ForeignKey('i_system.id', ondelete='CASCADE')),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_dns.create()
|
|
|
|
i_ntp = Table(
|
|
'i_ntp',
|
|
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('ntpservers', String(255)), # csv list of ntp servers
|
|
|
|
Column('forisystemid', Integer,
|
|
ForeignKey('i_system.id', ondelete='CASCADE')),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_ntp.create()
|
|
|
|
i_extoam = Table(
|
|
'i_extoam',
|
|
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('oam_subnet', String(255)),
|
|
Column('oam_gateway_ip', String(255)),
|
|
Column('oam_floating_ip', String(255)),
|
|
Column('oam_c0_ip', String(255)),
|
|
Column('oam_c1_ip', String(255)),
|
|
|
|
Column('forisystemid', Integer,
|
|
ForeignKey('i_system.id', ondelete='CASCADE')),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_extoam.create()
|
|
|
|
i_pm = Table(
|
|
'i_pm',
|
|
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('retention_secs', String(255)), # retention period in secs
|
|
Column('reserved_1', String(255)),
|
|
Column('reserved_2', String(255)),
|
|
Column('reserved_3', String(255)),
|
|
|
|
Column('forisystemid', Integer,
|
|
ForeignKey('i_system.id', ondelete='CASCADE')),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_pm.create()
|
|
|
|
i_storconfig = Table(
|
|
'i_storconfig',
|
|
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('cinder_backend', String(255)), # not configurable
|
|
Column('database_gib', String(255)),
|
|
Column('image_gib', String(255)),
|
|
Column('backup_gib', String(255)),
|
|
Column('cinder_device', String(255)), # not configurable
|
|
Column('cinder_gib', String(255)),
|
|
|
|
Column('forisystemid', Integer,
|
|
ForeignKey('i_system.id', ondelete='CASCADE')),
|
|
|
|
mysql_engine=ENGINE,
|
|
mysql_charset=CHARSET,
|
|
)
|
|
i_storconfig.create()
|
|
|
|
|
|
def downgrade(migrate_engine):
|
|
raise NotImplementedError('Downgrade from Initial is unsupported.')
|
|
|
|
# meta = MetaData()
|
|
# meta.bind = migrate_engine
|
|
|
|
# t = Table('i_Host', meta, autoload=True)
|
|
# t.drop()
|
|
# t = Table('i_cpu', meta, autoload=True)
|
|
# t.drop()
|
|
# t = Table('i_memory', meta, autoload=True)
|
|
# t.drop()
|
|
# t = Table('i_port', meta, autoload=True)
|
|
# t.drop()
|
|
# t = Table('i_disk', meta, autoload=True)
|
|
# t.drop()
|