Merge "placement: add nested resource providers"

This commit is contained in:
Zuul 2017-11-29 19:55:39 +00:00 committed by Gerrit Code Review
commit d90cb2f333
2 changed files with 61 additions and 0 deletions
nova/db/sqlalchemy
api_migrations/migrate_repo/versions
api_models.py

@ -0,0 +1,50 @@
# 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.
from sqlalchemy import Column
from sqlalchemy import ForeignKey
from sqlalchemy import Index
from sqlalchemy import Integer
from sqlalchemy import MetaData
from sqlalchemy import Table
def upgrade(migrate_engine):
meta = MetaData()
meta.bind = migrate_engine
resource_providers = Table('resource_providers', meta, autoload=True)
columns_to_add = [
('root_provider_id',
Column('root_provider_id', Integer,
ForeignKey('resource_providers.id'))),
('parent_provider_id',
Column('parent_provider_id', Integer,
ForeignKey('resource_providers.id'))),
]
for col_name, column in columns_to_add:
if not hasattr(resource_providers.c, col_name):
resource_providers.create_column(column)
indexed_columns = set()
for idx in resource_providers.indexes:
for c in idx.columns:
indexed_columns.add(c.name)
if 'root_provider_id' not in indexed_columns:
index = Index('resource_providers_root_provider_id_idx',
resource_providers.c.root_provider_id)
index.create()
if 'parent_provider_id' not in indexed_columns:
index = Index('resource_providers_parent_provider_id_idx',
resource_providers.c.parent_provider_id)
index.create()

@ -293,6 +293,10 @@ class ResourceProvider(API_BASE):
schema.UniqueConstraint('uuid',
name='uniq_resource_providers0uuid'),
Index('resource_providers_name_idx', 'name'),
Index('resource_providers_root_provider_id_idx',
'root_provider_id'),
Index('resource_providers_parent_provider_id_idx',
'parent_provider_id'),
schema.UniqueConstraint('name',
name='uniq_resource_providers0name')
)
@ -301,6 +305,13 @@ class ResourceProvider(API_BASE):
uuid = Column(String(36), nullable=False)
name = Column(Unicode(200), nullable=True)
generation = Column(Integer, default=0)
# Represents the root of the "tree" that the provider belongs to
root_provider_id = Column(Integer, ForeignKey('resource_providers.id'),
nullable=True)
# The immediate parent provider of this provider, or NULL if there is no
# parent. If parent_provider_id == NULL then root_provider_id == id
parent_provider_id = Column(Integer, ForeignKey('resource_providers.id'),
nullable=True)
class Inventory(API_BASE):