summaryrefslogtreecommitdiff
path: root/openstackclient/network
diff options
context:
space:
mode:
authorRichard Theis <rtheis@us.ibm.com>2016-04-05 13:27:42 -0500
committerRichard Theis <rtheis@us.ibm.com>2016-04-18 13:35:38 -0500
commita90c824e0407f931b5c45df53103b43aa564de12 (patch)
tree2a11f8529ecac6a14516c9013625de1a8912e272 /openstackclient/network
parente3a6fc27b0cfc9b82801e13d61c2fad3a09bf6b1 (diff)
downloadpython-openstackclient-a90c824e0407f931b5c45df53103b43aa564de12.tar.gz
Fix router set --route option
Fix the "--route" option on the "os router set" command. The option did not properly format the new routes to set which resulted in a "HttpException: Bad Request" error. In addition, the output for routes was fixed to improve readability and to align with the "--route" option on the "os router set" command. Change-Id: I9c514153ec201e2feae32be6dd281771e3298b9c Closes-Bug: #1564460
Diffstat (limited to 'openstackclient/network')
-rw-r--r--openstackclient/network/v2/router.py26
1 files changed, 21 insertions, 5 deletions
diff --git a/openstackclient/network/v2/router.py b/openstackclient/network/v2/router.py
index 56630a23..a32ab5ea 100644
--- a/openstackclient/network/v2/router.py
+++ b/openstackclient/network/v2/router.py
@@ -34,11 +34,20 @@ def _format_external_gateway_info(info):
return ''
+def _format_routes(routes):
+ # Map the route keys to match --route option.
+ for route in routes:
+ if 'nexthop' in route:
+ route['gateway'] = route.pop('nexthop')
+ return utils.format_list_of_dicts(routes)
+
+
_formatters = {
'admin_state_up': _format_admin_state,
'external_gateway_info': _format_external_gateway_info,
'availability_zones': utils.format_list,
'availability_zone_hints': utils.format_list,
+ 'routes': _format_routes,
}
@@ -67,11 +76,6 @@ def _get_attrs(client_manager, parsed_args):
and parsed_args.availability_zone_hints is not None):
attrs['availability_zone_hints'] = parsed_args.availability_zone_hints
- if 'clear_routes' in parsed_args and parsed_args.clear_routes:
- attrs['routes'] = []
- elif 'routes' in parsed_args and parsed_args.routes is not None:
- attrs['routes'] = parsed_args.routes
-
# "router set" command doesn't support setting project.
if 'project' in parsed_args and parsed_args.project is not None:
identity_client = client_manager.identity
@@ -393,7 +397,19 @@ class SetRouter(command.Command):
client = self.app.client_manager.network
obj = client.find_router(parsed_args.router, ignore_missing=False)
+ # Get the common attributes.
attrs = _get_attrs(self.app.client_manager, parsed_args)
+
+ # Get the route attributes.
+ if parsed_args.clear_routes:
+ attrs['routes'] = []
+ elif parsed_args.routes is not None:
+ # Map the route keys and append to the current routes.
+ # The REST API will handle route validation and duplicates.
+ for route in parsed_args.routes:
+ route['nexthop'] = route.pop('gateway')
+ attrs['routes'] = obj.routes + parsed_args.routes
+
if attrs == {}:
msg = "Nothing specified to be set"
raise exceptions.CommandError(msg)