attaching Cinder volumes to Nova instances not possible

Bug #1073613 reported by Christian Berendt
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
OpenStack Compute (nova)
Invalid
Undecided
Unassigned

Bug Description

I'm trying to attach volumes created on Cinder. Cinder is working fine, I can create and delete volumes (using cinder.volume.driver.ISCSIDriver).

admin:~ # cinder list
+--------------------------------------+-----------+--------------+------+-------------+-------------+
| ID | Status | Display Name | Size | Volume Type | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+-------------+
| 375445c8-bc98-476c-8014-0af0227e3c10 | available | testing | 1 | iscsi | |
+--------------------------------------+-----------+--------------+------+-------------+-------------+

Trying to let Nova work together with Cinder to attach volumes to instances is not working at the moment. I'm not sure about the error, probably something is missing in the configuration of Nova.

I can use nova to list available volumes:

admin:~ # nova volume-list
+--------------------------------------+-----------+--------------+------+-------------+-------------+
| ID | Status | Display Name | Size | Volume Type | Attached to |
+--------------------------------------+-----------+--------------+------+-------------+-------------+
| 375445c8-bc98-476c-8014-0af0227e3c10 | available | testing | 1 | iscsi | |
+--------------------------------------+-----------+--------------+------+-------------+-------------+

In /etc/nova/nova.conf I set the following entries to let Nova use Cinder for volumes.

volume_manager=cinder.volume.manager.VolumeManager
volume_api_class=cinder.volume.api.API

Trying to attach the volume above to an instances fails ...

I copied the cinder.conf of cinder-api to /etc/cinder/cinder.conf on the nova-api system.

admin:~ # nova volume-attach 175130ba-9fbf-4f3e-9ef1-e8b325a1ff60 375445c8-bc98-476c-8014-0af0227e3c10 /dev/xvdb
ERROR: The server has either erred or is incapable of performing the requested operation. (HTTP 500) (Request-ID: req-556b3be3-3fba-4a65-b42b-2d4701cf0327)

... receiving this error message on the nova-api service.

2012-10-31 16:37:38 ERROR nova.api.openstack [req-556b3be3-3fba-4a65-b42b-2d4701cf0327 5d795ef6a803425e902922bb8f817828 5536f9774f2f42f4a5d4bbc47a484ae8] Caught error: (OperationalError) no such table: volume_types u'SELECT anon_1.volumes_created_at AS anon_1_volumes_created_at, anon_1.volumes_updated_at AS anon_1_volumes_updated_at, anon_1.volumes_deleted_at AS anon_1_volumes_deleted_at, anon_1.volumes_deleted AS anon_1_volumes_deleted, anon_1.volumes_id AS anon_1_volumes_id, anon_1.volumes_ec2_id AS anon_1_volumes_ec2_id, anon_1.volumes_user_id AS anon_1_volumes_user_id, anon_1.volumes_project_id AS anon_1_volumes_project_id, anon_1.volumes_snapshot_id AS anon_1_volumes_snapshot_id, anon_1.volumes_host AS anon_1_volumes_host, anon_1.volumes_size AS anon_1_volumes_size, anon_1.volumes_availability_zone AS anon_1_volumes_availability_zone, anon_1.volumes_instance_uuid AS anon_1_volumes_instance_uuid, anon_1.volumes_mountpoint AS anon_1_volumes_mountpoint, anon_1.volumes_attach_time AS anon_1_volumes_attach_time, anon_1.volumes_status AS anon_1_volumes_status, anon_1.volumes_attach_status AS anon_1_volumes_attach_status, anon_1.volumes_scheduled_at AS anon_1_volumes_scheduled_at, anon_1.volumes_launched_at AS anon_1_volumes_launched_at, anon_1.volumes_terminated_at AS anon_1_volumes_terminated_at, anon_1.volumes_display_name AS anon_1_volumes_display_name, anon_1.volumes_display_description AS anon_1_volumes_display_description, anon_1.volumes_provider_location AS anon_1_volumes_provider_location, anon_1.volumes_provider_auth AS anon_1_volumes_provider_auth, anon_1.volumes_volume_type_id AS anon_1_volumes_volume_type_id, volume_types_1.created_at AS volume_types_1_created_at, volume_types_1.updated_at AS volume_types_1_updated_at, volume_types_1.deleted_at AS volume_types_1_deleted_at, volume_types_1.deleted AS volume_types_1_deleted, volume_types_1.id AS volume_types_1_id, volume_types_1.name AS volume_types_1_name, volume_metadata_1.created_at AS volume_metadata_1_created_at, volume_metadata_1.updated_at AS volume_metadata_1_updated_at, volume_metadata_1.deleted_at AS volume_metadata_1_deleted_at, volume_metadata_1.deleted AS volume_metadata_1_deleted, volume_metadata_1.id AS volume_metadata_1_id, volume_metadata_1."key" AS volume_metadata_1_key, volume_metadata_1.value AS volume_metadata_1_value, volume_metadata_1.volume_id AS volume_metadata_1_volume_id \nFROM (SELECT volumes.created_at AS volumes_created_at, volumes.updated_at AS volumes_updated_at, volumes.deleted_at AS volumes_deleted_at, volumes.deleted AS volumes_deleted, volumes.id AS volumes_id, volumes.ec2_id AS volumes_ec2_id, volumes.user_id AS volumes_user_id, volumes.project_id AS volumes_project_id, volumes.snapshot_id AS volumes_snapshot_id, volumes.host AS volumes_host, volumes.size AS volumes_size, volumes.availability_zone AS volumes_availability_zone, volumes.instance_uuid AS volumes_instance_uuid, volumes.mountpoint AS volumes_mountpoint, volumes.attach_time AS volumes_attach_time, volumes.status AS volumes_status, volumes.attach_status AS volumes_attach_status, volumes.scheduled_at AS volumes_scheduled_at, volumes.launched_at AS volumes_launched_at, volumes.terminated_at AS volumes_terminated_at, volumes.display_name AS volumes_display_name, volumes.display_description AS volumes_display_description, volumes.provider_location AS volumes_provider_location, volumes.provider_auth AS volumes_provider_auth, volumes.volume_type_id AS volumes_volume_type_id \nFROM volumes \nWHERE volumes.deleted = ? AND volumes.id = ?\n LIMIT ? OFFSET ?) AS anon_1 LEFT OUTER JOIN volume_types AS volume_types_1 ON anon_1.volumes_volume_type_id = volume_types_1.id AND volume_types_1.deleted = ? LEFT OUTER JOIN volume_metadata AS volume_metadata_1 ON volume_metadata_1.volume_id = anon_1.volumes_id AND volume_metadata_1.deleted = ?' (0, u'375445c8-bc98-476c-8014-0af0227e3c10', 1, 0, 0, 0)
2012-10-31 16:37:38 TRACE nova.api.openstack Traceback (most recent call last):
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/nova/api/openstack/__init__.py", line 78, in __call__
2012-10-31 16:37:38 TRACE nova.api.openstack return req.get_response(self.application)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/webob/request.py", line 1053, in get_response
2012-10-31 16:37:38 TRACE nova.api.openstack application, catch_exc_info=False)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/webob/request.py", line 1022, in call_application
2012-10-31 16:37:38 TRACE nova.api.openstack app_iter = application(self.environ, start_response)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/webob/dec.py", line 159, in __call__
2012-10-31 16:37:38 TRACE nova.api.openstack return resp(environ, start_response)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/keystone/middleware/auth_token.py", line 278, in __call__
2012-10-31 16:37:38 TRACE nova.api.openstack return self.app(env, start_response)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/webob/dec.py", line 159, in __call__
2012-10-31 16:37:38 TRACE nova.api.openstack return resp(environ, start_response)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/webob/dec.py", line 159, in __call__
2012-10-31 16:37:38 TRACE nova.api.openstack return resp(environ, start_response)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/routes/middleware.py", line 131, in __call__
2012-10-31 16:37:38 TRACE nova.api.openstack response = self.app(environ, start_response)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/webob/dec.py", line 159, in __call__
2012-10-31 16:37:38 TRACE nova.api.openstack return resp(environ, start_response)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/webob/dec.py", line 147, in __call__
2012-10-31 16:37:38 TRACE nova.api.openstack resp = self.call_func(req, *args, **self.kwargs)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/webob/dec.py", line 208, in call_func
2012-10-31 16:37:38 TRACE nova.api.openstack return self.func(req, *args, **kwargs)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/nova/api/openstack/wsgi.py", line 885, in __call__
2012-10-31 16:37:38 TRACE nova.api.openstack content_type, body, accept)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/nova/api/openstack/wsgi.py", line 933, in _process_stack
2012-10-31 16:37:38 TRACE nova.api.openstack action_result = self.dispatch(meth, request, action_args)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/nova/api/openstack/wsgi.py", line 1021, in dispatch
2012-10-31 16:37:38 TRACE nova.api.openstack return method(req=request, **action_args)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/nova/api/openstack/compute/contrib/volumes.py", line 397, in create
2012-10-31 16:37:38 TRACE nova.api.openstack volume_id, device)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/nova/compute/api.py", line 114, in wrapped
2012-10-31 16:37:38 TRACE nova.api.openstack return func(self, context, target, *args, **kwargs)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/nova/compute/api.py", line 104, in inner
2012-10-31 16:37:38 TRACE nova.api.openstack return function(self, context, instance, *args, **kwargs)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/nova/compute/api.py", line 1845, in attach_volume
2012-10-31 16:37:38 TRACE nova.api.openstack context, instance['uuid'], device)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/contextlib.py", line 23, in __exit__
2012-10-31 16:37:38 TRACE nova.api.openstack self.gen.next()
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/nova/compute/api.py", line 1837, in attach_volume
2012-10-31 16:37:38 TRACE nova.api.openstack volume = self.volume_api.get(context, volume_id)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/cinder/volume/api.py", line 245, in get
2012-10-31 16:37:38 TRACE nova.api.openstack rv = self.db.volume_get(context, volume_id)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/cinder/db/api.py", line 222, in volume_get
2012-10-31 16:37:38 TRACE nova.api.openstack return IMPL.volume_get(context, volume_id)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/cinder/db/sqlalchemy/api.py", line 124, in wrapper
2012-10-31 16:37:38 TRACE nova.api.openstack return f(*args, **kwargs)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/cinder/db/sqlalchemy/api.py", line 1010, in volume_get
2012-10-31 16:37:38 TRACE nova.api.openstack filter_by(id=volume_id).\
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/query.py", line 2156, in first
2012-10-31 16:37:38 TRACE nova.api.openstack ret = list(self[0:1])
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/query.py", line 2023, in __getitem__
2012-10-31 16:37:38 TRACE nova.api.openstack return list(res)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/query.py", line 2227, in __iter__
2012-10-31 16:37:38 TRACE nova.api.openstack return self._execute_and_instances(context)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/sqlalchemy/orm/query.py", line 2242, in _execute_and_instances
2012-10-31 16:37:38 TRACE nova.api.openstack result = conn.execute(querycontext.statement, self._params)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/base.py", line 1449, in execute
2012-10-31 16:37:38 TRACE nova.api.openstack params)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/base.py", line 1584, in _execute_clauseelement
2012-10-31 16:37:38 TRACE nova.api.openstack compiled_sql, distilled_params
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/base.py", line 1698, in _execute_context
2012-10-31 16:37:38 TRACE nova.api.openstack context)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/base.py", line 1691, in _execute_context
2012-10-31 16:37:38 TRACE nova.api.openstack context)
2012-10-31 16:37:38 TRACE nova.api.openstack File "/usr/lib64/python2.6/site-packages/sqlalchemy/engine/default.py", line 331, in do_execute
2012-10-31 16:37:38 TRACE nova.api.openstack cursor.execute(statement, parameters)
2012-10-31 16:37:38 TRACE nova.api.openstack OperationalError: (OperationalError) no such table: volume_types u'SELECT anon_1.volumes_created_at AS anon_1_volumes_created_at, anon_1.volumes_updated_at AS anon_1_volumes_updated_at, anon_1.volumes_deleted_at AS anon_1_volumes_deleted_at, anon_1.volumes_deleted AS anon_1_volumes_deleted, anon_1.volumes_id AS anon_1_volumes_id, anon_1.volumes_ec2_id AS anon_1_volumes_ec2_id, anon_1.volumes_user_id AS anon_1_volumes_user_id, anon_1.volumes_project_id AS anon_1_volumes_project_id, anon_1.volumes_snapshot_id AS anon_1_volumes_snapshot_id, anon_1.volumes_host AS anon_1_volumes_host, anon_1.volumes_size AS anon_1_volumes_size, anon_1.volumes_availability_zone AS anon_1_volumes_availability_zone, anon_1.volumes_instance_uuid AS anon_1_volumes_instance_uuid, anon_1.volumes_mountpoint AS anon_1_volumes_mountpoint, anon_1.volumes_attach_time AS anon_1_volumes_attach_time, anon_1.volumes_status AS anon_1_volumes_status, anon_1.volumes_attach_status AS anon_1_volumes_attach_status, anon_1.volumes_scheduled_at AS anon_1_volumes_scheduled_at, anon_1.volumes_launched_at AS anon_1_volumes_launched_at, anon_1.volumes_terminated_at AS anon_1_volumes_terminated_at, anon_1.volumes_display_name AS anon_1_volumes_display_name, anon_1.volumes_display_description AS anon_1_volumes_display_description, anon_1.volumes_provider_location AS anon_1_volumes_provider_location, anon_1.volumes_provider_auth AS anon_1_volumes_provider_auth, anon_1.volumes_volume_type_id AS anon_1_volumes_volume_type_id, volume_types_1.created_at AS volume_types_1_created_at, volume_types_1.updated_at AS volume_types_1_updated_at, volume_types_1.deleted_at AS volume_types_1_deleted_at, volume_types_1.deleted AS volume_types_1_deleted, volume_types_1.id AS volume_types_1_id, volume_types_1.name AS volume_types_1_name, volume_metadata_1.created_at AS volume_metadata_1_created_at, volume_metadata_1.updated_at AS volume_metadata_1_updated_at, volume_metadata_1.deleted_at AS volume_metadata_1_deleted_at, volume_metadata_1.deleted AS volume_metadata_1_deleted, volume_metadata_1.id AS volume_metadata_1_id, volume_metadata_1."key" AS volume_metadata_1_key, volume_metadata_1.value AS volume_metadata_1_value, volume_metadata_1.volume_id AS volume_metadata_1_volume_id \nFROM (SELECT volumes.created_at AS volumes_created_at, volumes.updated_at AS volumes_updated_at, volumes.deleted_at AS volumes_deleted_at, volumes.deleted AS volumes_deleted, volumes.id AS volumes_id, volumes.ec2_id AS volumes_ec2_id, volumes.user_id AS volumes_user_id, volumes.project_id AS volumes_project_id, volumes.snapshot_id AS volumes_snapshot_id, volumes.host AS volumes_host, volumes.size AS volumes_size, volumes.availability_zone AS volumes_availability_zone, volumes.instance_uuid AS volumes_instance_uuid, volumes.mountpoint AS volumes_mountpoint, volumes.attach_time AS volumes_attach_time, volumes.status AS volumes_status, volumes.attach_status AS volumes_attach_status, volumes.scheduled_at AS volumes_scheduled_at, volumes.launched_at AS volumes_launched_at, volumes.terminated_at AS volumes_terminated_at, volumes.display_name AS volumes_display_name, volumes.display_description AS volumes_display_description, volumes.provider_location AS volumes_provider_location, volumes.provider_auth AS volumes_provider_auth, volumes.volume_type_id AS volumes_volume_type_id \nFROM volumes \nWHERE volumes.deleted = ? AND volumes.id = ?\n LIMIT ? OFFSET ?) AS anon_1 LEFT OUTER JOIN volume_types AS volume_types_1 ON anon_1.volumes_volume_type_id = volume_types_1.id AND volume_types_1.deleted = ? LEFT OUTER JOIN volume_metadata AS volume_metadata_1 ON volume_metadata_1.volume_id = anon_1.volumes_id AND volume_metadata_1.deleted = ?' (0, u'375445c8-bc98-476c-8014-0af0227e3c10', 1, 0, 0, 0)
2012-10-31 16:37:38 TRACE nova.api.openstack
2012-10-31 16:37:38 INFO nova.api.openstack [req-556b3be3-3fba-4a65-b42b-2d4701cf0327 5d795ef6a803425e902922bb8f817828 5536f9774f2f42f4a5d4bbc47a484ae8] http://172.19.13.70:8774/v2/5536f9774f2f42f4a5d4bbc47a484ae8/servers/175130ba-9fbf-4f3e-9ef1-e8b325a1ff60/os-volume_attachments returned with HTTP 500
2012-10-31 16:37:38 INFO nova.osapi_compute.wsgi.server [req-556b3be3-3fba-4a65-b42b-2d4701cf0327 5d795ef6a803425e902922bb8f817828 5536f9774f2f42f4a5d4bbc47a484ae8] 172.19.134.140 - - [31/Oct/2012 16:37:38] "POST /v2/5536f9774f2f42f4a5d4bbc47a484ae8/servers/175130ba-9fbf-4f3e-9ef1-e8b325a1ff60/os-volume_attachments HTTP/1.1" 500 335 0.786586

Revision history for this message
Vish Ishaya (vishvananda) wrote :

The correct parameter to use is:

volume_api_class=nova.volume.cinder.API

as documented on:

http://wiki.openstack.org/MigrateToCinder

Needs to be set on both api and compute nodes.

Changed in nova:
status: New → Incomplete
status: Incomplete → Invalid
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.