Disallow setting default on internal network

The ``--default`` option should be only used for external network.
Default internal network is not currently supported so we disallow
it for now.

Change-Id: Ia9d39b40e1e041d7bda0f6a27d058e382b572e1a
Closes-Bug: #1745658
This commit is contained in:
Hongbin Lu 2018-01-30 19:11:40 +00:00 committed by Sean McGinnis
parent ee0170824f
commit 962efd949f
3 changed files with 48 additions and 1 deletions

View File

@ -16,6 +16,7 @@
from cliff import columns as cliff_columns
from osc_lib.cli import format_columns
from osc_lib.command import command
from osc_lib import exceptions
from osc_lib import utils
from osc_lib.utils import tags as _tag
@ -125,6 +126,9 @@ def _get_attrs_network(client_manager, parsed_args):
attrs['is_default'] = False
if parsed_args.default:
attrs['is_default'] = True
if attrs.get('is_default') and not attrs.get('router:external'):
msg = _("Cannot set default for internal network")
raise exceptions.CommandError(msg)
# Update Provider network options
if parsed_args.provider_network_type:
attrs['provider:network_type'] = parsed_args.provider_network_type
@ -702,7 +706,8 @@ class SetNetwork(command.Command):
default_router_grp.add_argument(
'--default',
action='store_true',
help=_("Set the network as the default external network")
help=_("Set the network as the default external network "
"(cannot be used with internal network).")
)
default_router_grp.add_argument(
'--no-default',

View File

@ -278,6 +278,24 @@ class TestCreateNetworkIdentityV3(TestNetwork):
def test_create_with_no_tag(self):
self._test_create_with_tag(add_tags=False)
def test_create_default_internal(self):
arglist = [
self._network.name,
"--default",
]
verifylist = [
('name', self._network.name),
('enable', True),
('share', None),
('project', None),
('external', False),
('default', True),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.cmd.take_action,
parsed_args)
class TestCreateNetworkIdentityV2(TestNetwork):
@ -1025,6 +1043,21 @@ class TestSetNetwork(TestNetwork):
def test_set_with_no_tag(self):
self._test_set_tags(with_tags=False)
def test_set_default_internal(self):
arglist = [
self._network.name,
'--internal',
'--default',
]
verifylist = [
('internal', True),
('default', True),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.cmd.take_action,
parsed_args)
class TestShowNetwork(TestNetwork):

View File

@ -0,0 +1,9 @@
---
fixes:
- |
For ``network create`` the
`--default`` option should be only used for external networks.
After this release, we enforce this scenario. If a users attempts
to create an internal default network or update a network to be
internal default, the command will be denied.
[Bug `1745658 <https://bugs.launchpad.net/bugs/1745658>`_]