I'm running devstack with the "USE_CONSTRAINTS=True", and I get cliff version 1.17.0 (from upper-constraints file), on debian.
here is what's happening with cliff 1.17 and python-neutronclient 4.0.0 :
$ neutron -v port-list
DEBUG: stevedore.extension found extension EntryPoint.parse('v2token = keystoneauth1.loading._plugins.identity.v2:Token')
DEBUG: stevedore.extension found extension EntryPoint.parse('admin_token = keystoneauth1.loading._plugins.admin_token:AdminToken')
DEBUG: stevedore.extension found extension EntryPoint.parse('v3oidcauthcode = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectAuthorizationCode')
DEBUG: stevedore.extension found extension EntryPoint.parse('v2password = keystoneauth1.loading._plugins.identity.v2:Password')
DEBUG: stevedore.extension found extension EntryPoint.parse('v3password = keystoneauth1.loading._plugins.identity.v3:Password')
DEBUG: stevedore.extension found extension EntryPoint.parse('v3oidcpassword = keystoneauth1.loading._plugins.identity.v3:OpenIDConnectPassword')
DEBUG: stevedore.extension found extension EntryPoint.parse('token = keystoneauth1.loading._plugins.identity.generic:Token')
DEBUG: stevedore.extension found extension EntryPoint.parse('v3token = keystoneauth1.loading._plugins.identity.v3:Token')
DEBUG: stevedore.extension found extension EntryPoint.parse('password = keystoneauth1.loading._plugins.identity.generic:Password')
DEBUG: stevedore.extension found extension EntryPoint.parse('table = cliff.formatters.table:TableFormatter')
DEBUG: stevedore.extension found extension EntryPoint.parse('json = cliff.formatters.json_format:JSONFormatter')
DEBUG: stevedore.extension found extension EntryPoint.parse('csv = cliff.formatters.commaseparated:CSVLister')
DEBUG: stevedore.extension found extension EntryPoint.parse('value = cliff.formatters.value:ValueFormatter')
DEBUG: stevedore.extension found extension EntryPoint.parse('yaml = cliff.formatters.yaml_format:YAMLFormatter')
DEBUG: stevedore.extension found extension EntryPoint.parse('yaml = clifftablib.formatters:YamlFormatter')
DEBUG: stevedore.extension found extension EntryPoint.parse('json = clifftablib.formatters:JsonFormatter')
DEBUG: stevedore.extension found extension EntryPoint.parse('html = clifftablib.formatters:HtmlFormatter')
DEBUG: neutronclient.neutron.v2_0.port.ListPort get_data(Namespace(columns=[], fields=[], formatter='table', max_width=0, noindent=False, page_size=None, quote_mode='nonnumeric', request_format='json', show_details=False, sort_dir=[], sort_key=[]))
DEBUG: keystoneauth.session REQ: curl -g -i -X GET http://192.168.122.17:5000/v2.0 -H "Accept: application/json" -H "User-Agent: keystoneauth1/2.3.0 python-requests/2.9.1 CPython/2.7.9"
DEBUG: keystoneauth.session RESP: [200] Content-Length: 340 Vary: X-Auth-Token Keep-Alive: timeout=5, max=100 Server: Apache/2.4.10 (Debian) Connection: Keep-Alive Date: Thu, 18 Feb 2016 16:04:00 GMT Content-Type: application/json x-openstack-request-id: req-50aca64d-a25a-444d-92b3-bea27bfa91ed
RESP BODY: {"version": {"status": "stable", "updated": "2014-04-17T00:00:00Z", "media-types": [{"base": "application/json", "type": "application/vnd.openstack.identity-v2.0+json"}], "id": "v2.0", "links": [{"href": "http://192.168.122.17:5000/v2.0/", "rel": "self"}, {"href": "http://docs.openstack.org/", "type": "text/html", "rel": "describedby"}]}}
DEBUG: keystoneauth.identity.v2 Making authentication request to http://192.168.122.17:5000/v2.0/tokens
DEBUG: stevedore.extension found extension EntryPoint.parse('bgpvpn = networking_bgpvpn.neutronclient.neutron.v2_0.bgpvpn.bgpvpn')
DEBUG: keystoneauth.session REQ: curl -g -i -X GET http://192.168.122.17:9696/v2.0/ports.json -H "User-Agent: python-neutronclient" -H "Accept: application/json" -H "X-Auth-Token: {SHA1}a1f8c210cb966f7c930f66b4f76d6b1110e82b05"
DEBUG: keystoneauth.session RESP: [200] Date: Thu, 18 Feb 2016 16:04:00 GMT Connection: keep-alive Content-Type: application/json; charset=UTF-8 Content-Length: 13 X-Openstack-Request-Id: req-2942bfbd-a55a-4920-9179-aa337f238145
RESP BODY: {"ports": []}
ERROR: neutronclient.shell list index out of range
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/neutronclient/shell.py", line 819, in run_subcommand
return run_command(cmd, cmd_parser, sub_argv)
File "/usr/local/lib/python2.7/dist-packages/neutronclient/shell.py", line 105, in run_command
return cmd.run(known_args)
File "/usr/local/lib/python2.7/dist-packages/neutronclient/common/command.py", line 29, in run
return super(OpenStackCommand, self).run(parsed_args)
File "/usr/local/lib/python2.7/dist-packages/cliff/display.py", line 88, in run
self.produce_output(parsed_args, column_names, data)
File "/usr/local/lib/python2.7/dist-packages/cliff/lister.py", line 51, in produce_output
parsed_args,
File "/usr/local/lib/python2.7/dist-packages/cliff/formatters/table.py", line 64, in emit_list
stdout, x, int(parsed_args.max_width), min_width)
File "/usr/local/lib/python2.7/dist-packages/cliff/formatters/table.py", line 148, in _assign_max_widths
first_line = x.get_string().splitlines()[0]
IndexError: list index out of range
list index out of range
Everything is fine after downgrading to cliff 1.15.0.
Change abandoned by Mathieu Rohon (<email address hidden>) on branch: master /review. openstack. org/283598
Review: https:/
Reason: fix already proposed :
https:/ /review. openstack. org/#/c/ 282886/