diff options
Diffstat (limited to 'nova/virt/baremetal/db')
-rw-r--r-- | nova/virt/baremetal/db/api.py | 36 | ||||
-rw-r--r-- | nova/virt/baremetal/db/sqlalchemy/api.py | 108 | ||||
-rw-r--r-- | nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/008_remove_bm_pxe_ips_table.py | 61 | ||||
-rw-r--r-- | nova/virt/baremetal/db/sqlalchemy/models.py | 9 |
4 files changed, 62 insertions, 152 deletions
diff --git a/nova/virt/baremetal/db/api.py b/nova/virt/baremetal/db/api.py index 91edc05d9..3943b7902 100644 --- a/nova/virt/baremetal/db/api.py +++ b/nova/virt/baremetal/db/api.py @@ -121,42 +121,6 @@ def bm_node_associate_and_update(context, node_uuid, values): return IMPL.bm_node_associate_and_update(context, node_uuid, values) -def bm_pxe_ip_create(context, address, server_address): - return IMPL.bm_pxe_ip_create(context, address, server_address) - - -def bm_pxe_ip_create_direct(context, bm_pxe_ip): - return IMPL.bm_pxe_ip_create_direct(context, bm_pxe_ip) - - -def bm_pxe_ip_destroy(context, ip_id): - return IMPL.bm_pxe_ip_destroy(context, ip_id) - - -def bm_pxe_ip_destroy_by_address(context, address): - return IMPL.bm_pxe_ip_destroy_by_address(context, address) - - -def bm_pxe_ip_get_all(context): - return IMPL.bm_pxe_ip_get_all(context) - - -def bm_pxe_ip_get(context, ip_id): - return IMPL.bm_pxe_ip_get(context, ip_id) - - -def bm_pxe_ip_get_by_bm_node_id(context, bm_node_id): - return IMPL.bm_pxe_ip_get_by_bm_node_id(context, bm_node_id) - - -def bm_pxe_ip_associate(context, bm_node_id): - return IMPL.bm_pxe_ip_associate(context, bm_node_id) - - -def bm_pxe_ip_disassociate(context, bm_node_id): - return IMPL.bm_pxe_ip_disassociate(context, bm_node_id) - - def bm_interface_get(context, if_id): return IMPL.bm_interface_get(context, if_id) diff --git a/nova/virt/baremetal/db/sqlalchemy/api.py b/nova/virt/baremetal/db/sqlalchemy/api.py index 88d44e3d3..3c140556e 100644 --- a/nova/virt/baremetal/db/sqlalchemy/api.py +++ b/nova/virt/baremetal/db/sqlalchemy/api.py @@ -236,111 +236,6 @@ def bm_node_destroy(context, bm_node_id): @sqlalchemy_api.require_admin_context -def bm_pxe_ip_get_all(context): - query = model_query(context, models.BareMetalPxeIp, read_deleted="no") - return query.all() - - -@sqlalchemy_api.require_admin_context -def bm_pxe_ip_create(context, address, server_address): - ref = models.BareMetalPxeIp() - ref.address = address - ref.server_address = server_address - _save(ref) - return ref - - -@sqlalchemy_api.require_admin_context -def bm_pxe_ip_create_direct(context, bm_pxe_ip): - ref = bm_pxe_ip_create(context, - address=bm_pxe_ip['address'], - server_address=bm_pxe_ip['server_address']) - return ref - - -@sqlalchemy_api.require_admin_context -def bm_pxe_ip_destroy(context, ip_id): - # Delete physically since it has unique columns - model_query(context, models.BareMetalPxeIp, read_deleted="no").\ - filter_by(id=ip_id).\ - delete() - - -@sqlalchemy_api.require_admin_context -def bm_pxe_ip_destroy_by_address(context, address): - # Delete physically since it has unique columns - model_query(context, models.BareMetalPxeIp, read_deleted="no").\ - filter_by(address=address).\ - delete() - - -@sqlalchemy_api.require_admin_context -def bm_pxe_ip_get(context, ip_id): - result = model_query(context, models.BareMetalPxeIp, read_deleted="no").\ - filter_by(id=ip_id).\ - first() - - return result - - -@sqlalchemy_api.require_admin_context -def bm_pxe_ip_get_by_bm_node_id(context, bm_node_id): - result = model_query(context, models.BareMetalPxeIp, read_deleted="no").\ - filter_by(bm_node_id=bm_node_id).\ - first() - - if not result: - raise exception.NodeNotFound(node_id=bm_node_id) - - return result - - -@sqlalchemy_api.require_admin_context -def bm_pxe_ip_associate(context, bm_node_id): - session = db_session.get_session() - with session.begin(): - # Check if the node really exists - node_ref = model_query(context, models.BareMetalNode, - read_deleted="no", session=session).\ - filter_by(id=bm_node_id).\ - first() - if not node_ref: - raise exception.NodeNotFound(node_id=bm_node_id) - - # Check if the node already has a pxe_ip - ip_ref = model_query(context, models.BareMetalPxeIp, - read_deleted="no", session=session).\ - filter_by(bm_node_id=bm_node_id).\ - first() - if ip_ref: - return ip_ref.id - - # with_lockmode('update') and filter_by(bm_node_id=None) will lock all - # records. It may cause a performance problem in high-concurrency - # environment. - ip_ref = model_query(context, models.BareMetalPxeIp, - read_deleted="no", session=session).\ - filter_by(bm_node_id=None).\ - with_lockmode('update').\ - first() - - # this exception is not caught in nova/compute/manager - if not ip_ref: - raise exception.NovaException(_("No more PXE IPs available")) - - ip_ref.bm_node_id = bm_node_id - session.add(ip_ref) - return ip_ref.id - - -@sqlalchemy_api.require_admin_context -def bm_pxe_ip_disassociate(context, bm_node_id): - model_query(context, models.BareMetalPxeIp, read_deleted="no").\ - filter_by(bm_node_id=bm_node_id).\ - update({'bm_node_id': None}) - - -@sqlalchemy_api.require_admin_context def bm_interface_get(context, if_id): result = model_query(context, models.BareMetalInterface, read_deleted="no").\ @@ -402,8 +297,7 @@ def bm_interface_set_vif_uuid(context, if_id, vif_uuid): if str(e).find('IntegrityError') != -1: raise exception.NovaException(_("Baremetal interface %s " "already in use") % vif_uuid) - else: - raise e + raise @sqlalchemy_api.require_admin_context diff --git a/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/008_remove_bm_pxe_ips_table.py b/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/008_remove_bm_pxe_ips_table.py new file mode 100644 index 000000000..22b45c480 --- /dev/null +++ b/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/008_remove_bm_pxe_ips_table.py @@ -0,0 +1,61 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2013 Mirantis Inc. +# All Rights Reserved +# +# 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 Boolean +from sqlalchemy import Column +from sqlalchemy import DateTime +from sqlalchemy import Index +from sqlalchemy import Integer +from sqlalchemy import MetaData +from sqlalchemy import String +from sqlalchemy import Table + + +table_name = 'bm_pxe_ips' + + +def upgrade(migrate_engine): + meta = MetaData() + meta.bind = migrate_engine + + table = Table(table_name, meta, autoload=True) + table.drop() + + +def downgrade(migrate_engine): + meta = MetaData() + meta.bind = migrate_engine + + bm_pxe_ips = Table(table_name, meta, + Column('created_at', DateTime), + Column('updated_at', DateTime), + Column('deleted_at', DateTime), + Column('deleted', Boolean), + Column('id', Integer, primary_key=True, nullable=False), + Column('address', String(length=255), unique=True), + Column('bm_node_id', Integer), + Column('server_address', + String(length=255), unique=True), + mysql_engine='InnoDB', + ) + bm_pxe_ips.create() + + Index( + 'idx_bm_pxe_ips_bm_node_id_deleted', + bm_pxe_ips.c.bm_node_id, + bm_pxe_ips.c.deleted + ).create(migrate_engine) diff --git a/nova/virt/baremetal/db/sqlalchemy/models.py b/nova/virt/baremetal/db/sqlalchemy/models.py index dbc9386ec..e21999634 100644 --- a/nova/virt/baremetal/db/sqlalchemy/models.py +++ b/nova/virt/baremetal/db/sqlalchemy/models.py @@ -54,15 +54,6 @@ class BareMetalNode(BASE, models.NovaBase): swap_mb = Column(Integer) -class BareMetalPxeIp(BASE, models.NovaBase): - __tablename__ = 'bm_pxe_ips' - id = Column(Integer, primary_key=True) - deleted = Column(Boolean, default=False) - address = Column(String(255), unique=True) - server_address = Column(String(255), unique=True) - bm_node_id = Column(Integer, ForeignKey('bm_nodes.id'), nullable=True) - - class BareMetalInterface(BASE, models.NovaBase): __tablename__ = 'bm_interfaces' id = Column(Integer, primary_key=True) |