情景描述:

在一台openstack的控制节点上执行nova get-vnc-console UUID novnc命令,无法输出带有token的NoVNC url地址,添加debug选项再次运行该命令时,提示“504 Gateway Time-out”:

# nova --debug get-vnc-console 930egk8f-ea94-40df-a4cd-c2540221ce9c novnc
....
send: u'POST /v1.1/ee6f4449201b4e48b329bea27974f2e7/servers/930egk8f-ea94-40df-a4cd-c2540221ce9c/action HTTP/1.1\r\nHost: *.*.*.*:58774\r\nContent-Length: 39\r\nx-auth-project-id: ****\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nx-auth-token: dd318058a3424ce18be2821c764dfc88\r\nuser-agent: python-novaclient\r\ncontent-type: application/json\r\n\r\n'
send: '{"os-getVNCConsole": {"type": "novnc"}}'
reply: ''
connect: (*.*.*.*, 58774) ************
send: u'POST /v1.1/ee6f4449201b4e48b329bea27974f2e7/servers/930egk8f-ea94-40df-a4cd-c2540221ce9c/action HTTP/1.1\r\nHost: *.*.*.*:58774\r\nContent-Length: 39\r\nx-auth-project-id: ****\r\naccept-encoding: gzip, deflate\r\naccept: application/json\r\nx-auth-token: dd318058a3424ce18be2821c764dfc88\r\nuser-agent: python-novaclient\r\ncontent-type: application/json\r\n\r\n'
send: '{"os-getVNCConsole": {"type": "novnc"}}'
reply: 'HTTP/1.0 504 Gateway Time-out\r\n'
header: Cache-Control: no-cache
header: Connection: close
header: Content-Type: text/html
DEBUG (shell:416) string indices must be integers, not str
Traceback (most recent call last):
  File "/usr/lib/python2.6/site-packages/novaclient/shell.py", line 413, in main
    OpenStackComputeShell().main(sys.argv[1:])
  File "/usr/lib/python2.6/site-packages/novaclient/shell.py", line 364, in main
    args.func(self.cs, args)
  File "/usr/lib/python2.6/site-packages/novaclient/v1_1/shell.py", line 1038, in do_get_vnc_console
    utils.print_list([VNCConsole(data['console'])], ['Type', 'Url'])
TypeError: string indices must be integers, not str
ERROR: string indices must be integers, not str

查询了相关的日志(messages.log,nova的api.log,nova的compute.log),发现如下相关记录:

messages.log:

Feb 16 09:46:56 upnode2 2016-02-16 09:46:56 ERROR nova.rpc.common [req-5865192b-5fd9-44a7-ad11-12f0adadadaf 381b738171bd4c30bb34bb982f78d943 ee6f4449201b4e48b329bea27974f2e7] Timed out waiting for RPC response: timed out#0122016-02-16 09:46:56 TRACE nova.rpc.common Traceback (most recent call last):#0122016-02-16 09:46:56 TRACE nova.rpc.common   File "/usr/lib/python2.6/site-packages/nova/rpc/impl_kombu.py", line 490, in ensure#0122016-02-16 09:46:56 TRACE nova.rpc.common     return method(*args, **kwargs)#0122016-02-16 09:46:56 TRACE nova.rpc.common   File "/usr/lib/python2.6/site-packages/nova/rpc/impl_kombu.py", line 567, in _consume#0122016-02-16 09:46:56 TRACE nova.rpc.common     return self.connection.drain_events(timeout=timeout)#0122016-02-16 09:46:56 TRACE nova.rpc.common   File "/usr/lib/python2.6/site-packages/kombu/connection.py", line 139, in drain_events#0122016-02-16 09:46:56 TRACE nova.rpc.common     return self.transport.drain_events(self.connection, **kwargs)#0122016-02-16 09:46:56 TRACE nova.rpc.common   File "/usr/lib/python2.6/site-packages/kombu/transport/pyamqplib.py", line 223, in drain_events#0122016-02-16 09:46:56 TRACE nova.rpc.common     return connection.drain_events(**kwargs)#0122016-02-16 09:46:56 TRACE nova.rpc.common   File "/usr/lib/python2.6/site-packages/kombu/transport/pyamqplib.py", line 56, in drain_events#0122016-02-16 09:46:56 TRACE nova.rpc.common     return self.wait_multi(self.channels.values(), timeout=timeout)#0122016-02-16 09:46:56 TRACE nova.rpc.common   File "/usr/lib/python2.6/site-packages/kombu/transport/pyamqplib.py", line 62, in wait_multi#0122016-02-16 09:46:56 TRACE nova.rpc.common     chanmap.keys(), allowed_methods, timeout=timeout)#0122016-02-16 09:46:56 TRACE nova.