diff options
| author | Tang Chen <tangchen@cn.fujitsu.com> | 2015-12-14 16:33:49 +0800 |
|---|---|---|
| committer | Tang Chen <tangchen@cn.fujitsu.com> | 2015-12-15 09:42:41 +0800 |
| commit | 6158ebb0e02ca2b796df973e71c6a7d5e829c959 (patch) | |
| tree | ea27dae63fa9d41ca1a46ae3b0394f9f00cf1cdf /openstackclient/network | |
| parent | 1ee5191cec53df588d51a7cee31cfe9cf3a57a1b (diff) | |
| download | python-openstackclient-6158ebb0e02ca2b796df973e71c6a7d5e829c959.tar.gz | |
Router: Add "router create" command using SDK
This patch adds "router create" command to osc using sdk.
NOTE: Test for --project needs support for fake identity client v2 and v3.
These tests will be added in other patches.
NOTE: external_gateway_info and routes are not supported to be passed to
create command now. They will be supported in another tow patches.
NOTE: Creating a ha router is not supported for now. Will support it in
another patch.
Change-Id: I7642295d27c27dd498331ae1da1c293706d8f6af
Implements: blueprint neutron-client
Partial-bug: #1519503
Diffstat (limited to 'openstackclient/network')
| -rw-r--r-- | openstackclient/network/v2/router.py | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/openstackclient/network/v2/router.py b/openstackclient/network/v2/router.py index cf5dae59..755bf100 100644 --- a/openstackclient/network/v2/router.py +++ b/openstackclient/network/v2/router.py @@ -17,8 +17,10 @@ import json import logging from cliff import lister +from cliff import show from openstackclient.common import utils +from openstackclient.identity import common as identity_common def _format_admin_state(state): @@ -38,6 +40,83 @@ _formatters = { } +def _get_attrs(client_manager, parsed_args): + attrs = {} + if parsed_args.name is not None: + attrs['name'] = str(parsed_args.name) + if parsed_args.admin_state_up is not None: + attrs['admin_state_up'] = parsed_args.admin_state_up + if parsed_args.distributed is not None: + attrs['distributed'] = parsed_args.distributed + if 'project' in parsed_args and parsed_args.project is not None: + identity_client = client_manager.identity + project_id = identity_common.find_project( + identity_client, + parsed_args.project, + parsed_args.project_domain, + ).id + attrs['tenant_id'] = project_id + return attrs + + +class CreateRouter(show.ShowOne): + """Create a new router""" + + log = logging.getLogger(__name__ + '.CreateRouter') + + def get_parser(self, prog_name): + parser = super(CreateRouter, self).get_parser(prog_name) + parser.add_argument( + 'name', + metavar='<name>', + help="New router name", + ) + admin_group = parser.add_mutually_exclusive_group() + admin_group.add_argument( + '--enable', + dest='admin_state_up', + action='store_true', + default=True, + help="Enable router (default)", + ) + admin_group.add_argument( + '--disable', + dest='admin_state_up', + action='store_false', + help="Disable router", + ) + parser.add_argument( + '--distributed', + dest='distributed', + action='store_true', + default=False, + help="Create a distributed router", + ) + parser.add_argument( + '--project', + metavar='<poroject>', + help="Owner's project (name or ID)", + ) + identity_common.add_project_domain_option_to_parser(parser) + return parser + + def take_action(self, parsed_args): + self.log.debug('take_action(%s)' % parsed_args) + client = self.app.client_manager.network + + attrs = _get_attrs(self.app.client_manager, parsed_args) + obj = client.create_router(**attrs) + + columns = sorted(obj.keys()) + data = utils.get_item_properties(obj, columns, formatters=_formatters) + + if 'tenant_id' in columns: + # Rename "tenant_id" to "project_id". + index = columns.index('tenant_id') + columns[index] = 'project_id' + return (tuple(columns), data) + + class ListRouter(lister.Lister): """List routers""" |
