diff --git a/doc/source/command-objects/router.rst b/doc/source/command-objects/router.rst index 151639802c..0eaae655d2 100644 --- a/doc/source/command-objects/router.rst +++ b/doc/source/command-objects/router.rst @@ -198,6 +198,7 @@ Set router properties [--distributed | --centralized] [--description ] [--route destination=,gateway= | --no-route] + [--ha | --no-ha] .. option:: --name @@ -235,6 +236,14 @@ Set router properties Clear routes associated with the router +.. option:: --ha + + Set the router as highly available (disabled router only) + +.. option:: --no-ha + + Clear high availablability attribute of the router (disabled router only) + .. _router_set-router: .. describe:: diff --git a/openstackclient/network/v2/router.py b/openstackclient/network/v2/router.py index 64bb881911..193bf6e9bd 100644 --- a/openstackclient/network/v2/router.py +++ b/openstackclient/network/v2/router.py @@ -433,11 +433,19 @@ class SetRouter(command.Command): action='store_true', help=argparse.SUPPRESS, ) - - # TODO(tangchen): Support setting 'ha' property in 'router set' - # command. It appears that changing the ha state is supported by - # neutron under certain conditions. - + routes_ha = parser.add_mutually_exclusive_group() + routes_ha.add_argument( + '--ha', + action='store_true', + help=_("Set the router as highly available " + "(disabled router only)") + ) + routes_ha.add_argument( + '--no-ha', + action='store_true', + help=_("Clear high availablability attribute of the router " + "(disabled router only)") + ) # TODO(tangchen): Support setting 'external_gateway_info' property in # 'router set' command. @@ -451,6 +459,10 @@ class SetRouter(command.Command): attrs = _get_attrs(self.app.client_manager, parsed_args) # Get the route attributes. + if parsed_args.ha: + attrs['ha'] = True + elif parsed_args.no_ha: + attrs['ha'] = False if parsed_args.no_route: attrs['routes'] = [] elif parsed_args.clear_routes: diff --git a/openstackclient/tests/unit/network/v2/test_router.py b/openstackclient/tests/unit/network/v2/test_router.py index d85561bc12..bc448d137e 100644 --- a/openstackclient/tests/unit/network/v2/test_router.py +++ b/openstackclient/tests/unit/network/v2/test_router.py @@ -529,6 +529,7 @@ class TestSetRouter(TestRouter): '--enable', '--distributed', '--name', 'noob', + '--no-ha', '--description', 'router', ] verifylist = [ @@ -537,6 +538,7 @@ class TestSetRouter(TestRouter): ('distributed', True), ('name', 'noob'), ('description', 'router'), + ('no_ha', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -546,6 +548,7 @@ class TestSetRouter(TestRouter): 'admin_state_up': True, 'distributed': True, 'name': 'noob', + 'ha': False, 'description': 'router', } self.network.update_router.assert_called_once_with( @@ -557,11 +560,13 @@ class TestSetRouter(TestRouter): self._router.name, '--disable', '--centralized', + '--ha', ] verifylist = [ ('router', self._router.name), ('disable', True), ('centralized', True), + ('ha', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -570,6 +575,7 @@ class TestSetRouter(TestRouter): attrs = { 'admin_state_up': False, 'distributed': False, + 'ha': True, } self.network.update_router.assert_called_once_with( self._router, **attrs) diff --git a/releasenotes/notes/add-ha-to-router-update-6a38a73cc112b2fc.yaml b/releasenotes/notes/add-ha-to-router-update-6a38a73cc112b2fc.yaml new file mode 100644 index 0000000000..905a1fdd50 --- /dev/null +++ b/releasenotes/notes/add-ha-to-router-update-6a38a73cc112b2fc.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add support to update high-availability property of + a router by adding ``--ha`` and ``--no-ha`` option + to ``router set`` CLI. + [Bug `1631492 `_]