Merge "Router: Add "router create" command using SDK"

This commit is contained in:
Jenkins 2015-12-15 15:37:36 +00:00 committed by Gerrit Code Review
commit 25666684d2
5 changed files with 186 additions and 1 deletions

View File

@ -4,6 +4,46 @@ router
Network v2 Network v2
router create
--------------
Create new router
.. program:: router create
.. code:: bash
os router create
[--project <project> [--project-domain <project-domain>]]
[--enable | --disable]
[--distributed]
<name>
.. option:: --project <project>
Owner's project (name or ID)
.. option:: --project-domain <project-domain>
Domain the project belongs to (name or ID).
This can be used in case collisions between project names exist.
.. option:: --enable
Enable router (default)
.. option:: --disable
Disable router
.. option:: --distributed
Create a distributed router
.. _router_create-name:
.. describe:: <name>
New router name
router list router list
----------- -----------

View File

@ -17,8 +17,10 @@ import json
import logging import logging
from cliff import lister from cliff import lister
from cliff import show
from openstackclient.common import utils from openstackclient.common import utils
from openstackclient.identity import common as identity_common
def _format_admin_state(state): 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): class ListRouter(lister.Lister):
"""List routers""" """List routers"""

View File

@ -174,7 +174,10 @@ class FakeRouter(object):
router_attrs.update(attrs) router_attrs.update(attrs)
# Set default methods. # Set default methods.
router_methods = {} router_methods = {
'keys': ['id', 'name', 'admin_state_up', 'distributed', 'ha',
'tenant_id'],
}
# Overwrite default methods. # Overwrite default methods.
router_methods.update(methods) router_methods.update(methods)

View File

@ -15,6 +15,7 @@ import mock
from openstackclient.network.v2 import router from openstackclient.network.v2 import router
from openstackclient.tests.network.v2 import fakes as network_fakes from openstackclient.tests.network.v2 import fakes as network_fakes
from openstackclient.tests import utils as tests_utils
class TestRouter(network_fakes.TestNetworkV2): class TestRouter(network_fakes.TestNetworkV2):
@ -26,6 +27,67 @@ class TestRouter(network_fakes.TestNetworkV2):
self.network = self.app.client_manager.network self.network = self.app.client_manager.network
class TestCreateRouter(TestRouter):
# The new router created.
new_router = network_fakes.FakeRouter.create_one_router()
columns = (
'admin_state_up',
'distributed',
'ha',
'id',
'name',
'project_id',
)
data = (
router._format_admin_state(new_router.admin_state_up),
new_router.distributed,
new_router.ha,
new_router.id,
new_router.name,
new_router.tenant_id,
)
def setUp(self):
super(TestCreateRouter, self).setUp()
self.network.create_router = mock.Mock(return_value=self.new_router)
# Get the command object to test
self.cmd = router.CreateRouter(self.app, self.namespace)
def test_create_no_options(self):
arglist = []
verifylist = []
try:
self.check_parser(self.cmd, arglist, verifylist)
except tests_utils.ParserException:
pass
def test_create_default_options(self):
arglist = [
self.new_router.name,
]
verifylist = [
('name', self.new_router.name),
('admin_state_up', True),
('distributed', False),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
columns, data = (self.cmd.take_action(parsed_args))
self.network.create_router.assert_called_with(**{
'admin_state_up': True,
'name': self.new_router.name,
'distributed': False,
})
self.assertEqual(self.columns, columns)
self.assertEqual(self.data, data)
class TestListRouter(TestRouter): class TestListRouter(TestRouter):
# The routers going to be listed up. # The routers going to be listed up.

View File

@ -332,6 +332,7 @@ openstack.network.v2 =
network_list = openstackclient.network.v2.network:ListNetwork network_list = openstackclient.network.v2.network:ListNetwork
network_set = openstackclient.network.v2.network:SetNetwork network_set = openstackclient.network.v2.network:SetNetwork
network_show = openstackclient.network.v2.network:ShowNetwork network_show = openstackclient.network.v2.network:ShowNetwork
router_create = openstackclient.network.v2.router:CreateRouter
router_list = openstackclient.network.v2.router:ListRouter router_list = openstackclient.network.v2.router:ListRouter
openstack.object_store.v1 = openstack.object_store.v1 =