summaryrefslogtreecommitdiffstats
path: root/nova/virt
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-02-20 20:03:29 +0000
committerGerrit Code Review <review@openstack.org>2013-02-20 20:03:29 +0000
commitcd9447f87290219003abebeae2cec1d2d7dbe544 (patch)
tree5b13637fa39c872caee903a5a0a0e98d2526b6e5 /nova/virt
parent51055262c2e354d3ad69f7ce6470a6b549881aad (diff)
parentc20110d15be37948ddd9ef5f38001328aabf5b1d (diff)
Merge "Add better status to baremetal deployments."
Diffstat (limited to 'nova/virt')
-rw-r--r--nova/virt/baremetal/baremetal_states.py5
-rw-r--r--nova/virt/baremetal/db/api.py14
-rw-r--r--nova/virt/baremetal/db/sqlalchemy/api.py36
-rw-r--r--nova/virt/baremetal/db/sqlalchemy/migrate_repo/versions/002_drop_bm_deployments.py73
-rw-r--r--nova/virt/baremetal/db/sqlalchemy/models.py15
-rw-r--r--nova/virt/baremetal/pxe.py26
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