diff options
| author | Alex Meade <alex.meade@rackspace.com> | 2012-03-08 21:56:56 +0000 |
|---|---|---|
| committer | Alex Meade <alex.meade@rackspace.com> | 2012-03-09 19:29:07 +0000 |
| commit | 77495cfed17f12f225e11fbc10e0f8db516dadf2 (patch) | |
| tree | 9a78bd3818b67cabd5425df6aa7c570969750a0b | |
| parent | 1c68d20e4bc9ca48a01b932f4c511f55cd54f4a9 (diff) | |
| download | nova-77495cfed17f12f225e11fbc10e0f8db516dadf2.tar.gz nova-77495cfed17f12f225e11fbc10e0f8db516dadf2.tar.xz nova-77495cfed17f12f225e11fbc10e0f8db516dadf2.zip | |
Fix nova-manage backend_add with sr_uuid
Fixes bug 950964
Remove FIXME in db.sm_backend_conf_get_by_sr
Add first() to sm_backend_conf_get_by_sr query
Change db/api.py:sm_backend_conf_get_by_sr to call correct impl method
Have nova-manage generate an actuall sr_uuid instead of always 'None'
Actually update backend values when specifying uuid
Change-Id: I620da4563d8c936b5a072c4683ae145280104fc2
| -rwxr-xr-x | bin/nova-manage | 48 | ||||
| -rw-r--r-- | nova/db/api.py | 2 | ||||
| -rw-r--r-- | nova/db/sqlalchemy/api.py | 4 |
3 files changed, 25 insertions, 29 deletions
diff --git a/bin/nova-manage b/bin/nova-manage index 00a824b00..0ae700b16 100755 --- a/bin/nova-manage +++ b/bin/nova-manage @@ -1793,58 +1793,54 @@ class StorageManagerCommands(object): # TODO Add backend_introduce. ctxt = context.get_admin_context() params = dict(map(self._splitfun, args)) + sr_uuid = utils.gen_uuid() + + if flavor_label is None: + print "error: backend needs to be associated with flavor" + sys.exit(2) + + try: + flavors = db.sm_flavor_get(ctxt, flavor_label) + + except exception.NotFound as ex: + print "error: %s" % ex + sys.exit(2) + + config_params = " ".join(['%s=%s' % + (key, params[key]) for key in params]) if 'sr_uuid' in params: + sr_uuid = params['sr_uuid'] try: - backend = db.sm_backend_conf_get_by_sr(ctxt, - params['sr_uuid']) + backend = db.sm_backend_conf_get_by_sr(ctxt, sr_uuid) except exception.DBError, e: _db_error(e) if backend: - if len(backend) > 1: - print 'error: Multiple backends found with given sr_uuid' - sys.exit(2) - print 'Backend config found. Would you like to recreate this?' print '(WARNING:Recreating will destroy all VDIs on backend!!)' c = raw_input('Proceed? (y/n) ') if c == 'y' or c == 'Y': try: db.sm_backend_conf_update(ctxt, backend['id'], - dict(created=False)) + dict(created=False, + flavor_id=flavors['id'], + sr_type=sr_type, + config_params=config_params)) except exception.DBError, e: _db_error(e) return else: print 'Backend config not found. Would you like to create it?' - print '(WARNING: Creating will destroy all data on backend!!!)' - c = raw_input('Proceed? (y/n) ') - if c != 'y' and c != 'Y': - return print '(WARNING: Creating will destroy all data on backend!!!)' c = raw_input('Proceed? (y/n) ') if c == 'y' or c == 'Y': - if flavor_label is None: - print "error: backend needs to be associated with flavor" - sys.exit(2) - - try: - flavors = db.sm_flavor_get(ctxt, flavor_label) - - except exception.NotFound as ex: - print "error: %s" % ex - sys.exit(2) - - config_params = "".join(['%s=%s ' % - (key, params[key]) for key in params]) - try: db.sm_backend_conf_create(ctxt, dict(flavor_id=flavors['id'], - sr_uuid=None, + sr_uuid=sr_uuid, sr_type=sr_type, config_params=config_params)) except exception.DBError, e: diff --git a/nova/db/api.py b/nova/db/api.py index 9d4fae11e..6791c0de3 100644 --- a/nova/db/api.py +++ b/nova/db/api.py @@ -1718,7 +1718,7 @@ def sm_backend_conf_get(context, sm_backend_conf_id): def sm_backend_conf_get_by_sr(context, sr_uuid): """Get a specific SM Backend Config.""" - return IMPL.sm_backend_conf_get(context, sr_uuid) + return IMPL.sm_backend_conf_get_by_sr(context, sr_uuid) def sm_backend_conf_get_all(context): diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index e38f62b38..97fba1e00 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -4214,9 +4214,9 @@ def sm_backend_conf_get(context, sm_backend_id): @require_admin_context def sm_backend_conf_get_by_sr(context, sr_uuid): session = get_session() - # FIXME(sirp): shouldn't this have a `first()` qualifier attached? return model_query(context, models.SMBackendConf, read_deleted="yes").\ - filter_by(sr_uuid=sr_uuid) + filter_by(sr_uuid=sr_uuid).\ + first() @require_admin_context |
