summaryrefslogtreecommitdiff
path: root/openstackclient/network/v2
diff options
context:
space:
mode:
authorTang Chen <tangchen@cn.fujitsu.com>2015-12-14 16:33:49 +0800
committerTang Chen <tangchen@cn.fujitsu.com>2015-12-15 09:42:41 +0800
commit6158ebb0e02ca2b796df973e71c6a7d5e829c959 (patch)
treeea27dae63fa9d41ca1a46ae3b0394f9f00cf1cdf /openstackclient/network/v2
parent1ee5191cec53df588d51a7cee31cfe9cf3a57a1b (diff)
downloadpython-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/v2')
-rw-r--r--openstackclient/network/v2/router.py79
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"""