From c17819ab58db7ded30644d63575d47ee3c963ada Mon Sep 17 00:00:00 2001 From: Rodolfo Alonso Hernandez Date: Thu, 16 Feb 2017 18:55:02 +0000 Subject: [PATCH] Add new parameter "is_default" to Network QoS policy. Add a set of exclusive parameters to the Network QoS policy: --default: makes this policy the default policy for the project to which the qos policy belongs. --no-default: unset the property. Closes-Bug: #1639220 Depends-On: If5ff2b00fa828f93aa089e275ddbd1ff542b79d4 Depends-On: Ibe7b7881cb190bfd5582f35b6de51a8bc21135de Change-Id: I0269b837dc29bbd8ee2089d847cadb72d800fa30 --- .../command-objects/network-qos-policy.rst | 18 ++++++++ .../network/v2/network_qos_policy.py | 44 ++++++++++++++----- .../network/v2/test_network_qos_policy.py | 13 ++++++ .../tests/unit/network/v2/fakes.py | 1 + .../network/v2/test_network_qos_policy.py | 42 ++++++++++++++++-- ...o-network-qos-policy-89b11d4df032a789.yaml | 7 +++ 6 files changed, 112 insertions(+), 13 deletions(-) create mode 100644 releasenotes/notes/add-is-default-to-network-qos-policy-89b11d4df032a789.yaml diff --git a/doc/source/cli/command-objects/network-qos-policy.rst b/doc/source/cli/command-objects/network-qos-policy.rst index a75c32fe7..2e86f8f3a 100644 --- a/doc/source/cli/command-objects/network-qos-policy.rst +++ b/doc/source/cli/command-objects/network-qos-policy.rst @@ -20,6 +20,7 @@ Create new Network QoS policy [--share | --no-share] [--project ] [--project-domain ] + [--default | --no-default] .. option:: --description @@ -43,6 +44,14 @@ Create new Network QoS policy Domain the project belongs to (name or ID). This can be used in case collisions between project names exist. +.. option:: --default + + Set this as a default network QoS policy + +.. option:: --no-default + + Set this as a non-default network QoS policy + .. _network_qos_policy_create-name: .. describe:: @@ -105,6 +114,7 @@ Set Network QoS policy properties [--name ] [--description ] [--share | --no-share] + [--default | --no-default] .. option:: --name @@ -123,6 +133,14 @@ Set Network QoS policy properties Make the QoS policy not accessible by other projects +.. option:: --default + + Set this as a default network QoS policy + +.. option:: --no-default + + Set this as a non-default network QoS policy + .. _network_qos_policy_set-qos-policy: .. describe:: diff --git a/openstackclient/network/v2/network_qos_policy.py b/openstackclient/network/v2/network_qos_policy.py index fef3ec88a..2c6b841b4 100644 --- a/openstackclient/network/v2/network_qos_policy.py +++ b/openstackclient/network/v2/network_qos_policy.py @@ -45,7 +45,15 @@ def _get_attrs(client_manager, parsed_args): attrs['shared'] = True if parsed_args.no_share: attrs['shared'] = False - if parsed_args.project is not None: + # NOTE(ralonsoh): 'default' and 'no_default' parameters are defined only in + # create and set commands context only. + if 'default' in parsed_args and parsed_args.default: + attrs['is_default'] = True + if 'no_default' in parsed_args and parsed_args.no_default: + attrs['is_default'] = False + # NOTE(ralonsoh): 'project' parameter is defined only in create and list + # commands context only. + 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, @@ -93,6 +101,17 @@ class CreateNetworkQosPolicy(command.ShowOne): help=_("Owner's project (name or ID)") ) identity_common.add_project_domain_option_to_parser(parser) + default_group = parser.add_mutually_exclusive_group() + default_group.add_argument( + '--default', + action='store_true', + help=_("Set this as a default network QoS policy"), + ) + default_group.add_argument( + '--no-default', + action='store_true', + help=_("Set this as a non-default network QoS policy"), + ) return parser def take_action(self, parsed_args): @@ -170,12 +189,14 @@ class ListNetworkQosPolicy(command.Lister): 'id', 'name', 'is_shared', + 'is_default', 'project_id', ) column_headers = ( 'ID', 'Name', 'Shared', + 'Default', 'Project', ) attrs = _get_attrs(self.app.client_manager, parsed_args) @@ -219,6 +240,17 @@ class SetNetworkQosPolicy(command.Command): action='store_true', help=_('Make the QoS policy not accessible by other projects'), ) + default_group = parser.add_mutually_exclusive_group() + default_group.add_argument( + '--default', + action='store_true', + help=_("Set this as a default network QoS policy"), + ) + default_group.add_argument( + '--no-default', + action='store_true', + help=_("Set this as a non-default network QoS policy"), + ) return parser def take_action(self, parsed_args): @@ -226,15 +258,7 @@ class SetNetworkQosPolicy(command.Command): obj = client.find_qos_policy( parsed_args.policy, ignore_missing=False) - attrs = {} - if parsed_args.name is not None: - attrs['name'] = parsed_args.name - if parsed_args.share: - attrs['shared'] = True - if parsed_args.no_share: - attrs['shared'] = False - if parsed_args.description is not None: - attrs['description'] = parsed_args.description + attrs = _get_attrs(self.app.client_manager, parsed_args) client.update_qos_policy(obj, **attrs) diff --git a/openstackclient/tests/functional/network/v2/test_network_qos_policy.py b/openstackclient/tests/functional/network/v2/test_network_qos_policy.py index 282efbfa7..ac3e0fc6c 100644 --- a/openstackclient/tests/functional/network/v2/test_network_qos_policy.py +++ b/openstackclient/tests/functional/network/v2/test_network_qos_policy.py @@ -68,3 +68,16 @@ class NetworkQosPolicyTests(common.NetworkTests): raw_output = self.openstack('network qos policy show ' + self.NAME + opts) self.assertEqual("True\n", raw_output) + + def test_qos_policy_default(self): + self.openstack('network qos policy set --default ' + self.NAME) + opts = self.get_opts(['is_default']) + raw_output = self.openstack('network qos policy show ' + self.NAME + + opts) + self.assertEqual("True\n", raw_output) + + self.openstack('network qos policy set --no-default ' + self.NAME) + opts = self.get_opts(['is_default']) + raw_output = self.openstack('network qos policy show ' + self.NAME + + opts) + self.assertEqual("False\n", raw_output) diff --git a/openstackclient/tests/unit/network/v2/fakes.py b/openstackclient/tests/unit/network/v2/fakes.py index 66b35cc5a..0b8eee90b 100644 --- a/openstackclient/tests/unit/network/v2/fakes.py +++ b/openstackclient/tests/unit/network/v2/fakes.py @@ -841,6 +841,7 @@ class FakeNetworkQosPolicy(object): qos_policy_attrs = { 'name': 'qos-policy-name-' + uuid.uuid4().hex, 'id': qos_id, + 'is_default': False, 'tenant_id': 'project-id-' + uuid.uuid4().hex, 'shared': False, 'description': 'qos-policy-description-' + uuid.uuid4().hex, diff --git a/openstackclient/tests/unit/network/v2/test_network_qos_policy.py b/openstackclient/tests/unit/network/v2/test_network_qos_policy.py index 667f50151..e7239932a 100644 --- a/openstackclient/tests/unit/network/v2/test_network_qos_policy.py +++ b/openstackclient/tests/unit/network/v2/test_network_qos_policy.py @@ -48,6 +48,7 @@ class TestCreateNetworkQosPolicy(TestQosPolicy): columns = ( 'description', 'id', + 'is_default', 'name', 'project_id', 'rules', @@ -57,6 +58,7 @@ class TestCreateNetworkQosPolicy(TestQosPolicy): data = ( new_qos_policy.description, new_qos_policy.id, + new_qos_policy.is_default, new_qos_policy.name, new_qos_policy.project_id, new_qos_policy.rules, @@ -106,12 +108,14 @@ class TestCreateNetworkQosPolicy(TestQosPolicy): '--project', self.project.name, self.new_qos_policy.name, '--description', 'QoS policy description', + '--default', ] verifylist = [ ('share', True), ('project', self.project.name), ('name', self.new_qos_policy.name), ('description', 'QoS policy description'), + ('default', True), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) @@ -122,6 +126,28 @@ class TestCreateNetworkQosPolicy(TestQosPolicy): 'tenant_id': self.project.id, 'name': self.new_qos_policy.name, 'description': 'QoS policy description', + 'is_default': True, + }) + self.assertEqual(self.columns, columns) + self.assertEqual(self.data, data) + + def test_create_no_default(self): + arglist = [ + self.new_qos_policy.name, + '--no-default' + ] + verifylist = [ + ('project', None), + ('name', self.new_qos_policy.name), + ('default', False), + ] + + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + columns, data = (self.cmd.take_action(parsed_args)) + + self.network.create_qos_policy.assert_called_once_with(**{ + 'name': self.new_qos_policy.name, + 'is_default': False, }) self.assertEqual(self.columns, columns) self.assertEqual(self.data, data) @@ -220,6 +246,7 @@ class TestListNetworkQosPolicy(TestQosPolicy): 'ID', 'Name', 'Shared', + 'Default', 'Project', ) data = [] @@ -228,6 +255,7 @@ class TestListNetworkQosPolicy(TestQosPolicy): qos_policy.id, qos_policy.name, qos_policy.shared, + qos_policy.is_default, qos_policy.project_id, )) @@ -333,17 +361,19 @@ class TestSetNetworkQosPolicy(TestQosPolicy): self._qos_policy, **attrs) self.assertIsNone(result) - def test_set_name_share_description(self): + def test_set_name_share_description_default(self): arglist = [ '--name', 'new_qos_policy', '--share', '--description', 'QoS policy description', + '--default', self._qos_policy.name, ] verifylist = [ ('name', 'new_qos_policy'), ('share', True), ('description', 'QoS policy description'), + ('default', True), ('policy', self._qos_policy.name), ] @@ -353,25 +383,29 @@ class TestSetNetworkQosPolicy(TestQosPolicy): 'name': 'new_qos_policy', 'description': 'QoS policy description', 'shared': True, + 'is_default': True, } self.network.update_qos_policy.assert_called_with( self._qos_policy, **attrs) self.assertIsNone(result) - def test_set_no_share(self): + def test_set_no_share_no_default(self): arglist = [ '--no-share', + '--no-default', self._qos_policy.name, ] verifylist = [ ('no_share', True), + ('no_default', True), ('policy', self._qos_policy.name), ] parsed_args = self.check_parser(self.cmd, arglist, verifylist) result = self.cmd.take_action(parsed_args) attrs = { - 'shared': False + 'shared': False, + 'is_default': False } self.network.update_qos_policy.assert_called_with( self._qos_policy, **attrs) @@ -386,6 +420,7 @@ class TestShowNetworkQosPolicy(TestQosPolicy): columns = ( 'description', 'id', + 'is_default', 'name', 'project_id', 'rules', @@ -394,6 +429,7 @@ class TestShowNetworkQosPolicy(TestQosPolicy): data = ( _qos_policy.description, _qos_policy.id, + _qos_policy.is_default, _qos_policy.name, _qos_policy.project_id, _qos_policy.rules, diff --git a/releasenotes/notes/add-is-default-to-network-qos-policy-89b11d4df032a789.yaml b/releasenotes/notes/add-is-default-to-network-qos-policy-89b11d4df032a789.yaml new file mode 100644 index 000000000..abd08f036 --- /dev/null +++ b/releasenotes/notes/add-is-default-to-network-qos-policy-89b11d4df032a789.yaml @@ -0,0 +1,7 @@ +--- +features: + - | + Add ``--default`` and ``--no-default`` options to + ``network qos policy create`` and ``network qos policy set`` + comamnds. + [Bug `1639220 `_]