快照失败,在一个新鲜的Kilo安装

我有一个新鲜的OpenStack Kilo安装。

当我尝试从仪表板或nova cli创build快照时,快照未被创build。

本地快照以成功结束,但nova在尝试上传图像时会出现“HTTP 400:无效磁盘格式无图像”错误。

完整的日志在最后。

问题是:为什么会发生这个错误? 我该如何解决呢?

更新:经过一些testing,我发现Nova使用Glance API v1上传图片。 nova做的请求是正确的 ,并发送container_formatbare_format 。 该请求也是对Glance v1 API规范的投诉。 但是,正如我们在下面的Glance API的curl命令中看到的那样,出现了一些问题:

 curl -i -X PUT -H 'X-Auth-Token: MY_TOKEN_HERE' \ -H 'x-image-meta-property-image_state: available' \ -H 'x-image-meta-name: rarytest2-snapshot' -H 'x-image-meta-container_format: bare' \ -H 'User-Agent: python-glanceclient' -H 'X-User-Id: e45cf65e7ae94cd5aa86341c87308657' \ -H 'x-image-meta-property-image_location: snapshot' -H 'Accept-Encoding: gzip, deflate' \ -H 'x-glance-registry-purge-props: false' -H 'x-image-meta-property-ramdisk_id: ' \ -H 'Connection: keep-alive' -H 'x-image-meta-property-kernel_id: ' \ -H 'X-Service-Catalog: []' \ -H 'x-image-meta-property-owner_id: 2dd6aa6ee0554c0ea5afce27dc63ff3a' \ -H 'Accept: */*' -H 'X-Roles: _member_,admin' -H 'x-image-meta-size: 1549991936' \ -H 'X-Tenant-Id: 2dd6aa6ee0554c0ea5afce27dc63ff3a' -H 'x-image-meta-is_public: False' \ -H 'X-Identity-Status: Confirmed' -H 'Content-Type: application/octet-stream' \ -H 'x-image-meta-disk_format: qcow2' \ http://MY_IP_HERE:9292/v1/images/3b3cdac1-d76c-48f2-8150-0977d8720684 

预期的行为是将disk_format更新为qcow2和container_format 。 但是,它不会发生。

出于某种奇怪的原因,如果为x-image-meta-disk-formatx-image-meta-container-format (改变x-image-meta-disk_formatx-image-meta-container_format头用连字符下划线)它的工作原理!

完整日志:

 2015-05-24 17:50:46.229 2400 INFO nova.compute.manager [req-b6489814-f538-4773-a15d-c1224b5583b7 e45cf65e7ae94cd5aa86341c87308657 2dd6aa6ee0554c0ea5afce27dc63ff3a - - -] [instance: 00652f00-5a32-44ad-8ad6-ac33610236ac] instance snapshotting [...] 2015-05-24 17:50:58.670 2400 INFO nova.virt.libvirt.driver [req-b6489814-f538-4773-a15d-c1224b5583b7 e45cf65e7ae94cd5aa86341c87308657 2dd6aa6ee0554c0ea5afce27dc63ff3a - - -] [instance: 00652f00-5a32-44ad-8ad6-ac33610236ac] Snapshot extracted, beginning image upload [...] 2015-05-24 17:51:01.251 2400 ERROR oslo_messaging.rpc.dispatcher [req-b6489814-f538-4773-a15d-c1224b5583b7 e45cf65e7ae94cd5aa86341c87308657 2dd6aa6ee0554c0ea5afce27dc63ff3a - - -] Exception during message handling: <html> <head> <title>400 Bad Request</title> </head> <body> <h1>400 Bad Request</h1> Invalid disk format 'None' for image.<br /><br /> </body> </html> (HTTP 400) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher Traceback (most recent call last): 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py", line 142, in _dispatch_and_reply 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher executor_callback)) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py", line 186, in _dispatch 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher executor_callback) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py", line 130, in _do_dispatch 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher result = func(ctxt, **new_args) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 6791, in snapshot_instance 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher return self.manager.snapshot_instance(ctxt, image_id, instance) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/exception.py", line 88, in wrapped 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher payload) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 85, in __exit__ 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher six.reraise(self.type_, self.value, self.tb) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/exception.py", line 71, in wrapped 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher return f(self, context, *args, **kw) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 327, in decorated_function 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher LOG.warning(msg, e, instance_uuid=instance_uuid) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 85, in __exit__ 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher six.reraise(self.type_, self.value, self.tb) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 298, in decorated_function 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher return function(self, context, *args, **kwargs) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 355, in decorated_function 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher kwargs['instance'], e, sys.exc_info()) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 85, in __exit__ 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher six.reraise(self.type_, self.value, self.tb) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 343, in decorated_function 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher return function(self, context, *args, **kwargs) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 403, in decorated_function 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher instance=instance) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/oslo_utils/excutils.py", line 85, in __exit__ 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher six.reraise(self.type_, self.value, self.tb) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 393, in decorated_function 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher *args, **kwargs) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 3227, in snapshot_instance 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher task_states.IMAGE_SNAPSHOT) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/compute/manager.py", line 3257, in _snapshot_instance 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher update_task_state) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/virt/libvirt/driver.py", line 1410, in snapshot 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher image_file) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/image/api.py", line 130, in update 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher purge_props=purge_props) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/image/glance.py", line 398, in update 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher _reraise_translated_image_exception(image_id) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/image/glance.py", line 396, in update 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher image_id, **image_meta) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/nova/image/glance.py", line 219, in call 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher return getattr(client.images, method)(*args, **kwargs) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/glanceclient/v1/images.py", line 329, in update 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher resp, body = self.client.put(url, headers=hdrs, data=image_data) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/glanceclient/common/http.py", line 265, in put 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher return self._request('PUT', url, **kwargs) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher File "/usr/lib/python2.7/dist-packages/glanceclient/common/http.py", line 227, in _request 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher raise exc.from_response(resp, resp.content) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher Invalid: <html> 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher <head> 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher <title>400 Bad Request</title> 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher </head> 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher <body> 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher <h1>400 Bad Request</h1> 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher Invalid disk format 'None' for image.<br /><br /> 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher </body> 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher </html> (HTTP 400) 2015-05-24 17:51:01.251 2400 TRACE oslo_messaging.rpc.dispatcher 

由于使用了Nginx和Glance API v1,所以出现了这个问题。

总之, 在Stack Overflow的这个线程中可以find解释。

Nginx,默认情况下,下拉列表下拉列表。 这是为了:

防止将标题映射到CGIvariables时出现歧义

参考: Nginx – 陷阱 – 缺less(消失)的HTTP头 。

但是,在Glance v1 API中指定具有下划线的标头。

参考: Glance v1 API – 检索图像元数据 。

我还发现带下划线的标头是完全有效的,并且对RFC 7230有所抱怨 。

解决方法是将以下行添加到nginxconfiguration文件中:

 underscores_in_headers on;