diff --git a/doc/source/command-objects/floating-ip.rst b/doc/source/command-objects/floating-ip.rst index 093bb8e481..2ab21f36eb 100644 --- a/doc/source/command-objects/floating-ip.rst +++ b/doc/source/command-objects/floating-ip.rst @@ -17,6 +17,7 @@ Create floating IP [--port ] [--floating-ip-address ] [--fixed-ip-address ] + [--description ] .. option:: --subnet @@ -39,6 +40,11 @@ Create floating IP Fixed IP address mapped to the floating IP *Network version 2 only* +.. option:: --description + + Set floating IP description + *Network version 2 only* + .. describe:: Network to allocate floating IP from (name or ID) diff --git a/doc/source/command-objects/router.rst b/doc/source/command-objects/router.rst index bbdca054eb..13a75158f4 100644 --- a/doc/source/command-objects/router.rst +++ b/doc/source/command-objects/router.rst @@ -64,6 +64,7 @@ Create new router [--project [--project-domain ]] [--enable | --disable] [--distributed] + [--description ] [--availability-zone-hint ] @@ -88,6 +89,10 @@ Create new router Create a distributed router +.. option:: --description + + Set router description + .. option:: --availability-zone-hint Availability Zone in which to create this router @@ -186,6 +191,7 @@ Set router properties [--name ] [--enable | --disable] [--distributed | --centralized] + [--description ] [--route destination=,gateway= | --no-route] @@ -209,6 +215,10 @@ Set router properties Set router to centralized mode (disabled router only) +.. option:: --description + + Set router description + .. option:: --route destination=,gateway= Routes associated with the router diff --git a/openstackclient/network/v2/floating_ip.py b/openstackclient/network/v2/floating_ip.py index 454335f1a5..bb75540cc6 100644 --- a/openstackclient/network/v2/floating_ip.py +++ b/openstackclient/network/v2/floating_ip.py @@ -55,6 +55,9 @@ def _get_attrs(client_manager, parsed_args): if parsed_args.fixed_ip_address: attrs['fixed_ip_address'] = parsed_args.fixed_ip_address + if parsed_args.description is not None: + attrs['description'] = parsed_args.description + return attrs @@ -97,6 +100,11 @@ class CreateFloatingIP(common.NetworkAndComputeShowOne): dest='fixed_ip_address', help=_("Fixed IP address mapped to the floating IP") ) + parser.add_argument( + '--description', + metavar='', + help=_('Set floating IP description') + ) return parser def take_action_network(self, client, parsed_args): diff --git a/openstackclient/network/v2/router.py b/openstackclient/network/v2/router.py index d30197cc41..ceebe66c5f 100644 --- a/openstackclient/network/v2/router.py +++ b/openstackclient/network/v2/router.py @@ -82,7 +82,8 @@ def _get_attrs(client_manager, parsed_args): if ('availability_zone_hints' in parsed_args and parsed_args.availability_zone_hints is not None): attrs['availability_zone_hints'] = parsed_args.availability_zone_hints - + if parsed_args.description is not None: + attrs['description'] = parsed_args.description # "router set" command doesn't support setting project. if 'project' in parsed_args and parsed_args.project is not None: identity_client = client_manager.identity @@ -179,6 +180,11 @@ class CreateRouter(command.ShowOne): default=False, help=_("Create a distributed router") ) + parser.add_argument( + '--description', + metavar='', + help=_('Set router description') + ) parser.add_argument( '--project', metavar='', @@ -370,6 +376,11 @@ class SetRouter(command.Command): metavar='', help=_("Set router name") ) + parser.add_argument( + '--description', + metavar='', + help=_('Set router description') + ) admin_group = parser.add_mutually_exclusive_group() admin_group.add_argument( '--enable', diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py index 89b128ee78..6bb35ed064 100644 --- a/openstackclient/tests/unit/network/v2/fakes.py +++ b/openstackclient/tests/unit/network/v2/fakes.py @@ -651,6 +651,7 @@ class FakeRouter(object): 'name': 'router-name-' + uuid.uuid4().hex, 'status': 'ACTIVE', 'admin_state_up': True, + 'description': 'router-description-' + uuid.uuid4().hex, 'distributed': False, 'ha': False, 'tenant_id': 'project-id-' + uuid.uuid4().hex, @@ -970,6 +971,7 @@ class FakeFloatingIP(object): 'router_id': 'router-id-' + uuid.uuid4().hex, 'port_id': 'port-id-' + uuid.uuid4().hex, 'tenant_id': 'project-id-' + uuid.uuid4().hex, + 'description': 'floating-ip-description-' + uuid.uuid4().hex, } # Overwrite default attributes. diff --git a/openstackclient/tests/unit/network/v2/test_floating_ip.py b/openstackclient/tests/unit/network/v2/test_floating_ip.py index a77fb24b5c..1f30f2e923 100644 --- a/openstackclient/tests/unit/network/v2/test_floating_ip.py +++ b/openstackclient/tests/unit/network/v2/test_floating_ip.py @@ -49,6 +49,7 @@ class TestCreateFloatingIPNetwork(TestFloatingIPNetwork): ) columns = ( + 'description', 'dns_domain', 'dns_name', 'fixed_ip_address', @@ -62,6 +63,7 @@ class TestCreateFloatingIPNetwork(TestFloatingIPNetwork): ) data = ( + floating_ip.description, floating_ip.dns_domain, floating_ip.dns_name, floating_ip.fixed_ip_address, @@ -117,14 +119,16 @@ class TestCreateFloatingIPNetwork(TestFloatingIPNetwork): '--port', self.floating_ip.port_id, '--floating-ip-address', self.floating_ip.floating_ip_address, '--fixed-ip-address', self.floating_ip.fixed_ip_address, + '--description', self.floating_ip.description, self.floating_ip.floating_network_id, ] verifylist = [ ('subnet', self.subnet.id), ('port', self.floating_ip.port_id), - ('floating_ip_address', self.floating_ip.floating_ip_address), ('fixed_ip_address', self.floating_ip.fixed_ip_address), ('network', self.floating_ip.floating_network_id), + ('description', self.floating_ip.description), + ('floating_ip_address', self.floating_ip.floating_ip_address), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -136,6 +140,7 @@ class TestCreateFloatingIPNetwork(TestFloatingIPNetwork): 'floating_ip_address': self.floating_ip.floating_ip_address, 'fixed_ip_address': self.floating_ip.fixed_ip_address, 'floating_network_id': self.floating_ip.floating_network_id, + 'description': self.floating_ip.description, }) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) @@ -269,6 +274,7 @@ class TestShowFloatingIPNetwork(TestFloatingIPNetwork): floating_ip = network_fakes.FakeFloatingIP.create_one_floating_ip() columns = ( + 'description', 'dns_domain', 'dns_name', 'fixed_ip_address', @@ -282,6 +288,7 @@ class TestShowFloatingIPNetwork(TestFloatingIPNetwork): ) data = ( + floating_ip.description, floating_ip.dns_domain, floating_ip.dns_name, floating_ip.fixed_ip_address, diff --git a/openstackclient/tests/unit/network/v2/test_router.py b/openstackclient/tests/unit/network/v2/test_router.py index 6898a046bf..8c1645e03f 100644 --- a/openstackclient/tests/unit/network/v2/test_router.py +++ b/openstackclient/tests/unit/network/v2/test_router.py @@ -119,6 +119,7 @@ class TestCreateRouter(TestRouter): 'admin_state_up', 'availability_zone_hints', 'availability_zones', + 'description', 'distributed', 'external_gateway_info', 'ha', @@ -132,6 +133,7 @@ class TestCreateRouter(TestRouter): router._format_admin_state(new_router.admin_state_up), osc_utils.format_list(new_router.availability_zone_hints), osc_utils.format_list(new_router.availability_zones), + new_router.description, new_router.distributed, router._format_external_gateway_info(new_router.external_gateway_info), new_router.ha, @@ -503,12 +505,14 @@ class TestSetRouter(TestRouter): '--enable', '--distributed', '--name', 'noob', + '--description', 'router', ] verifylist = [ ('router', self._router.name), ('enable', True), ('distributed', True), ('name', 'noob'), + ('description', 'router'), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -518,6 +522,7 @@ class TestSetRouter(TestRouter): 'admin_state_up': True, 'distributed': True, 'name': 'noob', + 'description': 'router', } self.network.update_router.assert_called_once_with( self._router, **attrs) @@ -681,6 +686,7 @@ class TestShowRouter(TestRouter): 'admin_state_up', 'availability_zone_hints', 'availability_zones', + 'description', 'distributed', 'external_gateway_info', 'ha', @@ -694,6 +700,7 @@ class TestShowRouter(TestRouter): router._format_admin_state(_router.admin_state_up), osc_utils.format_list(_router.availability_zone_hints), osc_utils.format_list(_router.availability_zones), + _router.description, _router.distributed, router._format_external_gateway_info(_router.external_gateway_info), _router.ha, diff --git a/releasenotes/notes/bp-neutron-client-descriptions-a80902b4295843cf.yaml b/releasenotes/notes/bp-neutron-client-descriptions-a80902b4295843cf.yaml new file mode 100644 index 0000000000..3c4f4a504c --- /dev/null +++ b/releasenotes/notes/bp-neutron-client-descriptions-a80902b4295843cf.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add ``--description`` option for core network resources. Allows users to + set a description for: ``floating ip create`` and ``router set/create``. + [Blueprint :oscbp:`neutron-client-descriptions`] + [Blueprint :oscbp:`network-commands-options`]