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)
|
resource_provider_id = Column(Integer, primary_key=True, nullable=False)
|
||||||
aggregate_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