diff options
| author | Jenkins <jenkins@review.openstack.org> | 2013-02-20 20:03:29 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2013-02-20 20:03:29 +0000 |
| commit | cd9447f87290219003abebeae2cec1d2d7dbe544 (patch) | |
| tree | 5b13637fa39c872caee903a5a0a0e98d2526b6e5 /nova/virt | |
| parent | 51055262c2e354d3ad69f7ce6470a6b549881aad (diff) | |
| parent | c20110d15be37948ddd9ef5f38001328aabf5b1d (diff) | |
Merge "Add better status to baremetal deployments."
Diffstat (limited to 'nova/virt')
| -rw-r--r-- | nova/virt/baremetal/baremetal_states.py | 5 | ||||
| -rw-r--r-- | nova/virt/baremetal/db/api.py | 14 | ||||
| -rw-r--r-- | nova/virt/baremetal/db/sqlalchemy/api.py | 36 | ||||
| -rw-r--r-- | nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/002_drop_bm_deployments.py | 73 | ||||
| -rw-r--r-- | nova/virt/baremetal/db/sqlalchemy/models.py | 15 | ||||
| -rw-r--r-- | nova/virt/baremetal/pxe.py | 26 |
6 files changed, 104 insertions, 65 deletions
diff --git a/nova/virt/baremetal/baremetal_states.py b/nova/virt/baremetal/baremetal_states.py index 28a41ab47..115ed091c 100644 --- a/nova/virt/baremetal/baremetal_states.py +++ b/nova/virt/baremetal/baremetal_states.py @@ -26,7 +26,12 @@ health. """ +NULL = None +INIT = 'initializing' ACTIVE = 'active' BUILDING = 'building' +DEPLOYING = 'deploying' +DEPLOYFAIL = 'deploy failed' +DEPLOYDONE = 'deploy complete' DELETED = 'deleted' ERROR = 'error' diff --git a/nova/virt/baremetal/db/api.py b/nova/virt/baremetal/db/api.py index 672f14486..af42cf1a0 100644 --- a/nova/virt/baremetal/db/api.py +++ b/nova/virt/baremetal/db/api.py @@ -170,17 +170,3 @@ def bm_interface_get_by_vif_uuid(context, vif_uuid): def bm_interface_get_all_by_bm_node_id(context, bm_node_id): return IMPL.bm_interface_get_all_by_bm_node_id(context, bm_node_id) - - -def bm_deployment_create(context, key, image_path, pxe_config_path, root_mb, - swap_mb): - return IMPL.bm_deployment_create(context, key, image_path, - pxe_config_path, root_mb, swap_mb) - - -def bm_deployment_get(context, dep_id): - return IMPL.bm_deployment_get(context, dep_id) - - -def bm_deployment_destroy(context, dep_id): - return IMPL.bm_deployment_destroy(context, dep_id) diff --git a/nova/virt/baremetal/db/sqlalchemy/api.py b/nova/virt/baremetal/db/sqlalchemy/api.py index 20d35b743..bc5c2f773 100644 --- a/nova/virt/baremetal/db/sqlalchemy/api.py +++ b/nova/virt/baremetal/db/sqlalchemy/api.py @@ -144,10 +144,13 @@ def bm_node_create(context, values): @sqlalchemy_api.require_admin_context def bm_node_update(context, bm_node_id, values): - model_query(context, models.BareMetalNode, read_deleted="no").\ + rows = model_query(context, models.BareMetalNode, read_deleted="no").\ filter_by(id=bm_node_id).\ update(values) + if not rows: + raise exception.InstanceNotFound(instance_id=bm_node_id) + @sqlalchemy_api.require_admin_context def bm_node_set_uuid_safe(context, bm_node_id, values): @@ -390,34 +393,3 @@ def bm_interface_get_all_by_bm_node_id(context, bm_node_id): raise exception.InstanceNotFound(instance_id=bm_node_id) return result - - -@sqlalchemy_api.require_admin_context -def bm_deployment_create(context, key, image_path, pxe_config_path, root_mb, - swap_mb): - ref = models.BareMetalDeployment() - ref.key = key - ref.image_path = image_path - ref.pxe_config_path = pxe_config_path - ref.root_mb = root_mb - ref.swap_mb = swap_mb - _save(ref) - return ref.id - - -@sqlalchemy_api.require_admin_context -def bm_deployment_get(context, dep_id): - result = model_query(context, models.BareMetalDeployment, - read_deleted="no").\ - filter_by(id=dep_id).\ - first() - return result - - -@sqlalchemy_api.require_admin_context -def bm_deployment_destroy(context, dep_id): - model_query(context, models.BareMetalDeployment).\ - filter_by(id=dep_id).\ - update({'deleted': True, - 'deleted_at': timeutils.utcnow(), - 'updated_at': literal_column('updated_at')}) diff --git a/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/002_drop_bm_deployments.py b/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/002_drop_bm_deployments.py new file mode 100644 index 000000000..2a560e24e --- /dev/null +++ b/nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/002_drop_bm_deployments.py @@ -0,0 +1,73 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2013 Hewlett-Packard Development Company, L.P. +# 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 Column, Index, MetaData, Table +from sqlalchemy import Integer, String, DateTime, Boolean + + +def upgrade(migrate_engine): + meta = MetaData() + meta.bind = migrate_engine + + bm_nodes = Table('bm_nodes', meta, autoload=True) + + image_path = Column('image_path', String(length=255)) + pxe_config_path = Column('pxe_config_path', String(length=255)) + deploy_key = Column('deploy_key', String(length=255)) + root_mb = Column('root_mb', Integer()) + swap_mb = Column('swap_mb', Integer()) + + for c in [image_path, pxe_config_path, deploy_key, root_mb, swap_mb]: + bm_nodes.create_column(c) + + deploy_key_idx = Index('deploy_key_idx', bm_nodes.c.deploy_key) + deploy_key_idx.create(migrate_engine) + + bm_deployments = Table('bm_deployments', meta, autoload=True) + bm_deployments.drop() + + +def downgrade(migrate_engine): + meta = MetaData() + meta.bind = migrate_engine + + bm_nodes = Table('bm_nodes', meta, autoload=True) + + image_path = Column('image_path', String(length=255)) + pxe_config_path = Column('pxe_config_path', String(length=255)) + deploy_key = Column('deploy_key', String(length=255)) + root_mb = Column('root_mb', Integer()) + swap_mb = Column('swap_mb', Integer()) + + for c in [image_path, pxe_config_path, deploy_key, root_mb, swap_mb]: + bm_nodes.drop_column(c) + + bm_deployments = Table('bm_deployments', 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('bm_node_id', Integer), + Column('key', String(length=255)), + Column('image_path', String(length=255)), + Column('pxe_config_path', String(length=255)), + Column('root_mb', Integer), + Column('swap_mb', Integer), + mysql_engine='InnoDB', + ) + bm_deployments.create() diff --git a/nova/virt/baremetal/db/sqlalchemy/models.py b/nova/virt/baremetal/db/sqlalchemy/models.py index 7f9ffb901..fe86d7244 100644 --- a/nova/virt/baremetal/db/sqlalchemy/models.py +++ b/nova/virt/baremetal/db/sqlalchemy/models.py @@ -47,6 +47,11 @@ class BareMetalNode(BASE, models.NovaBase): task_state = Column(String(255)) prov_vlan_id = Column(Integer) terminal_port = Column(Integer) + image_path = Column(String(255), nullable=True) + pxe_config_path = Column(String(255), nullable=True) + deploy_key = Column(String(255), nullable=True) + root_mb = Column(Integer) + swap_mb = Column(Integer) class BareMetalPxeIp(BASE, models.NovaBase): @@ -65,13 +70,3 @@ class BareMetalInterface(BASE, models.NovaBase): datapath_id = Column(String(255)) port_no = Column(Integer) vif_uuid = Column(String(36), unique=True) - - -class BareMetalDeployment(BASE, models.NovaBase): - __tablename__ = 'bm_deployments' - id = Column(Integer, primary_key=True) - key = Column(String(255)) - image_path = Column(String(255)) - pxe_config_path = Column(String(255)) - root_mb = Column(Integer) - swap_mb = Column(Integer) diff --git a/nova/virt/baremetal/pxe.py b/nova/virt/baremetal/pxe.py index ce4060a5e..e6cefcca1 100644 --- a/nova/virt/baremetal/pxe.py +++ b/nova/virt/baremetal/pxe.py @@ -374,16 +374,14 @@ class PXE(base.NodeDriver): deployment_key = bm_utils.random_alnum(32) deployment_iscsi_iqn = "iqn-%s" % instance['uuid'] - deployment_id = db.bm_deployment_create( - context, - deployment_key, - image_file_path, - pxe_config_file_path, - root_mb, - swap_mb - ) + db.bm_node_update(context, node['id'], + {'deploy_key': deployment_key, + 'image_path': image_file_path, + 'pxe_config_path': pxe_config_file_path, + 'root_mb': root_mb, + 'swap_mb': swap_mb}) pxe_config = build_pxe_config( - deployment_id, + node['id'], deployment_key, deployment_iscsi_iqn, image_info['deploy_kernel'][1], @@ -402,6 +400,16 @@ class PXE(base.NodeDriver): def deactivate_bootloader(self, context, node, instance): """Delete PXE bootloader images and config.""" try: + db.bm_node_update(context, node['id'], + {'deploy_key': None, + 'image_path': None, + 'pxe_config_path': None, + 'root_mb': 0, + 'swap_mb': 0}) + except exception.InstanceNotFound: + pass + + try: image_info = get_tftp_image_info(instance) except exception.NovaException: pass |
