diff --git a/doc/source/command-objects/network.rst b/doc/source/command-objects/network.rst index 622568e4e..6d3f505ab 100644 --- a/doc/source/command-objects/network.rst +++ b/doc/source/command-objects/network.rst @@ -171,6 +171,7 @@ Set network properties [--name ] [--enable | --disable] [--share | --no-share] + [--external [--default | --no-default] | --internal] .. option:: --name @@ -193,6 +194,24 @@ Set network properties Do not share the network between projects +.. option:: --external + + Set this network as an external network. + Requires the "external-net" extension to be enabled. + +.. option:: --internal + + Set this network as an internal network + +.. option:: --default + + Specify if this network should be used as + the default external network + +.. option:: --no-default + + Do not use the network as the default external network. + .. _network_set-network: .. describe:: diff --git a/openstackclient/network/v2/network.py b/openstackclient/network/v2/network.py index 20d943ed6..afac471a7 100644 --- a/openstackclient/network/v2/network.py +++ b/openstackclient/network/v2/network.py @@ -76,6 +76,16 @@ def _get_attrs(client_manager, parsed_args): parsed_args.availability_zone_hints is not None: attrs['availability_zone_hints'] = parsed_args.availability_zone_hints + # update_external_network_options + if parsed_args.internal: + attrs['router:external'] = False + if parsed_args.external: + attrs['router:external'] = True + if parsed_args.no_default: + attrs['is_default'] = False + if parsed_args.default: + attrs['is_default'] = True + return attrs @@ -197,14 +207,6 @@ class CreateNetwork(common.NetworkAndComputeShowOne): def take_action_network(self, client, parsed_args): attrs = _get_attrs(self.app.client_manager, parsed_args) - if parsed_args.internal: - attrs['router:external'] = False - if parsed_args.external: - attrs['router:external'] = True - if parsed_args.no_default: - attrs['is_default'] = False - if parsed_args.default: - attrs['is_default'] = True if parsed_args.provider_network_type: attrs['provider:network_type'] = parsed_args.provider_network_type if parsed_args.physical_network: @@ -379,6 +381,26 @@ class SetNetwork(command.Command): action='store_true', help='Do not share the network between projects', ) + external_router_grp = parser.add_mutually_exclusive_group() + external_router_grp.add_argument( + '--external', + action='store_true', + help='Set this network as an external network. ' + 'Requires the "external-net" extension to be enabled.') + external_router_grp.add_argument( + '--internal', + action='store_true', + help='Set this network as an internal network') + default_router_grp = parser.add_mutually_exclusive_group() + default_router_grp.add_argument( + '--default', + action='store_true', + help='Specify if this network should be used as ' + 'the default external network') + default_router_grp.add_argument( + '--no-default', + action='store_true', + help='Do not use the network as the default external network.') return parser def take_action(self, parsed_args): diff --git a/openstackclient/tests/network/v2/test_network.py b/openstackclient/tests/network/v2/test_network.py index 8a75101b5..7d0f8717f 100644 --- a/openstackclient/tests/network/v2/test_network.py +++ b/openstackclient/tests/network/v2/test_network.py @@ -482,12 +482,16 @@ class TestSetNetwork(TestNetwork): '--enable', '--name', 'noob', '--share', + '--external', + '--default', ] verifylist = [ ('network', self._network.name), ('enable', True), ('name', 'noob'), ('share', True), + ('external', True), + ('default', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -497,6 +501,8 @@ class TestSetNetwork(TestNetwork): 'name': 'noob', 'admin_state_up': True, 'shared': True, + 'router:external': True, + 'is_default': True, } self.network.update_network.assert_called_once_with( self._network, **attrs) @@ -507,11 +513,13 @@ class TestSetNetwork(TestNetwork): self._network.name, '--disable', '--no-share', + '--internal', ] verifylist = [ ('network', self._network.name), ('disable', True), ('no_share', True), + ('internal', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -520,6 +528,7 @@ class TestSetNetwork(TestNetwork): attrs = { 'admin_state_up': False, 'shared': False, + 'router:external': False, } self.network.update_network.assert_called_once_with( self._network, **attrs) diff --git a/releasenotes/notes/bug-1545537-7a66219d263bb1e5.yaml b/releasenotes/notes/bug-1545537-7a66219d263bb1e5.yaml index db0e22a1c..30056eb7d 100644 --- a/releasenotes/notes/bug-1545537-7a66219d263bb1e5.yaml +++ b/releasenotes/notes/bug-1545537-7a66219d263bb1e5.yaml @@ -2,6 +2,7 @@ features: - | Add external network options ``--external|--internal`` and ``--external`` - suboptions ``--default|--no-default`` to the ``network create`` command. - These options are available for Networkv2 only. - [Bug `1545537 `_] + suboptions ``--default|--no-default`` to the ``network create`` and + ``network set`` commands. + These options are available for Network version 2 only. + [Bug `1545537 `_] \ No newline at end of file