Add instance groups tables to the API database
CellsV2 requires that instance groups be available in the API database. Create the 'instance_groups', 'instance_group_policy', and 'instance_group_member' tables in the API database. The instance_id column of instance_group_member has been renamed to instance_uuid. Part of blueprint cells-instance-groups-api-db Change-Id: Id8efd701c9a8e142688ecb276ade41e92ae1b936
This commit is contained in:
parent
0f9a417ae1
commit
e539a233f7
nova/db/sqlalchemy
@ -0,0 +1,71 @@
|
||||
# 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.
|
||||
"""API Database migrations for instance_groups"""
|
||||
|
||||
from migrate import UniqueConstraint
|
||||
from sqlalchemy import Column
|
||||
from sqlalchemy import DateTime
|
||||
from sqlalchemy import ForeignKey
|
||||
from sqlalchemy import Index
|
||||
from sqlalchemy import Integer
|
||||
from sqlalchemy import MetaData
|
||||
from sqlalchemy import String
|
||||
from sqlalchemy import Table
|
||||
|
||||
|
||||
def upgrade(migrate_engine):
|
||||
meta = MetaData()
|
||||
meta.bind = migrate_engine
|
||||
|
||||
groups = Table('instance_groups', meta,
|
||||
Column('created_at', DateTime),
|
||||
Column('updated_at', DateTime),
|
||||
Column('id', Integer, primary_key=True, nullable=False),
|
||||
Column('user_id', String(length=255)),
|
||||
Column('project_id', String(length=255)),
|
||||
Column('uuid', String(length=36), nullable=False),
|
||||
Column('name', String(length=255)),
|
||||
UniqueConstraint('uuid',
|
||||
name='uniq_instance_groups0uuid'),
|
||||
mysql_engine='InnoDB',
|
||||
mysql_charset='utf8',
|
||||
)
|
||||
|
||||
groups.create(checkfirst=True)
|
||||
|
||||
group_policy = Table('instance_group_policy', meta,
|
||||
Column('created_at', DateTime),
|
||||
Column('updated_at', DateTime),
|
||||
Column('id', Integer, primary_key=True, nullable=False),
|
||||
Column('policy', String(length=255)),
|
||||
Column('group_id', Integer, ForeignKey('instance_groups.id'),
|
||||
nullable=False),
|
||||
Index('instance_group_policy_policy_idx', 'policy'),
|
||||
mysql_engine='InnoDB',
|
||||
mysql_charset='utf8',
|
||||
)
|
||||
|
||||
group_policy.create(checkfirst=True)
|
||||
|
||||
group_member = Table('instance_group_member', meta,
|
||||
Column('created_at', DateTime),
|
||||
Column('updated_at', DateTime),
|
||||
Column('id', Integer, primary_key=True, nullable=False),
|
||||
Column('instance_uuid', String(length=255)),
|
||||
Column('group_id', Integer, ForeignKey('instance_groups.id'),
|
||||
nullable=False),
|
||||
Index('instance_group_member_instance_idx', 'instance_uuid'),
|
||||
mysql_engine='InnoDB',
|
||||
mysql_charset='utf8',
|
||||
)
|
||||
|
||||
group_member.create(checkfirst=True)
|
@ -344,3 +344,58 @@ class ResourceProviderAggregate(API_BASE):
|
||||
|
||||
resource_provider_id = Column(Integer, primary_key=True, nullable=False)
|
||||
aggregate_id = Column(Integer, primary_key=True, nullable=False)
|
||||
|
||||
|
||||
class InstanceGroupMember(API_BASE):
|
||||
"""Represents the members for an instance group."""
|
||||
__tablename__ = 'instance_group_member'
|
||||
__table_args__ = (
|
||||
Index('instance_group_member_instance_idx', 'instance_uuid'),
|
||||
)
|
||||
id = Column(Integer, primary_key=True, nullable=False)
|
||||
instance_uuid = Column(String(255))
|
||||
group_id = Column(Integer, ForeignKey('instance_groups.id'),
|
||||
nullable=False)
|
||||
|
||||
|
||||
class InstanceGroupPolicy(API_BASE):
|
||||
"""Represents the policy type for an instance group."""
|
||||
__tablename__ = 'instance_group_policy'
|
||||
__table_args__ = (
|
||||
Index('instance_group_policy_policy_idx', 'policy'),
|
||||
)
|
||||
id = Column(Integer, primary_key=True, nullable=False)
|
||||
policy = Column(String(255))
|
||||
group_id = Column(Integer, ForeignKey('instance_groups.id'),
|
||||
nullable=False)
|
||||
|
||||
|
||||
class InstanceGroup(API_BASE):
|
||||
"""Represents an instance group.
|
||||
|
||||
A group will maintain a collection of instances and the relationship
|
||||
between them.
|
||||
"""
|
||||
|
||||
__tablename__ = 'instance_groups'
|
||||
__table_args__ = (
|
||||
schema.UniqueConstraint('uuid', name='uniq_instance_groups0uuid'),
|
||||
)
|
||||
|
||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||
user_id = Column(String(255))
|
||||
project_id = Column(String(255))
|
||||
uuid = Column(String(36), nullable=False)
|
||||
name = Column(String(255))
|
||||
_policies = orm.relationship(InstanceGroupPolicy,
|
||||
primaryjoin='InstanceGroup.id == InstanceGroupPolicy.group_id')
|
||||
_members = orm.relationship(InstanceGroupMember,
|
||||
primaryjoin='InstanceGroup.id == InstanceGroupMember.group_id')
|
||||
|
||||
@property
|
||||
def policies(self):
|
||||
return [p.policy for p in self._policies]
|
||||
|
||||
@property
|
||||
def members(self):
|
||||
return [m.instance_uuid for m in self._members]
|
||||
|
Loading…
x
Reference in New Issue
Block a user