Make set/unset commands in network return normally when nothing specified

set/unset commands should ends up normally instead of raising
an exception when nothing is specified to modify. The main
reason is: When nothing is specified, the command sets/unsets
nothing, which is a normal behavior, and ends up normally.
No API call fails. No error happens.

This patch also adds a releasenote for both network, and volume
commands that fix patch has been merged.

Change-Id: I78c348066078decd350417a431f3b8bea8fcf9ef
Partial-bug: #1588588
This commit is contained in:
Tang Chen 2016-06-03 12:21:45 +08:00
parent 84506a6b71
commit e3270cdfd8
13 changed files with 57 additions and 39 deletions

View File

@ -200,9 +200,6 @@ class SetAddressScope(command.Command):
attrs['shared'] = True attrs['shared'] = True
if parsed_args.no_share: if parsed_args.no_share:
attrs['shared'] = False attrs['shared'] = False
if attrs == {}:
msg = _("Nothing specified to be set.")
raise exceptions.CommandError(msg)
client.update_address_scope(obj, **attrs) client.update_address_scope(obj, **attrs)

View File

@ -14,7 +14,6 @@
"""Network action implementations""" """Network action implementations"""
from openstackclient.common import command from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import utils from openstackclient.common import utils
from openstackclient.i18n import _ from openstackclient.i18n import _
from openstackclient.identity import common as identity_common from openstackclient.identity import common as identity_common
@ -434,10 +433,6 @@ class SetNetwork(command.Command):
obj = client.find_network(parsed_args.network, ignore_missing=False) obj = client.find_network(parsed_args.network, ignore_missing=False)
attrs = _get_attrs(self.app.client_manager, parsed_args) attrs = _get_attrs(self.app.client_manager, parsed_args)
if attrs == {}:
msg = _("Nothing specified to be set")
raise exceptions.CommandError(msg)
client.update_network(obj, **attrs) client.update_network(obj, **attrs)

View File

@ -426,9 +426,6 @@ class SetPort(command.Command):
elif parsed_args.no_fixed_ip: elif parsed_args.no_fixed_ip:
attrs['fixed_ips'] = [] attrs['fixed_ips'] = []
if attrs == {}:
msg = _("Nothing specified to be set")
raise exceptions.CommandError(msg)
client.update_port(obj, **attrs) client.update_port(obj, **attrs)

View File

@ -18,7 +18,6 @@ import json
import logging import logging
from openstackclient.common import command from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import parseractions from openstackclient.common import parseractions
from openstackclient.common import utils from openstackclient.common import utils
from openstackclient.i18n import _ from openstackclient.i18n import _
@ -426,10 +425,6 @@ class SetRouter(command.Command):
route['nexthop'] = route.pop('gateway') route['nexthop'] = route.pop('gateway')
attrs['routes'] = obj.routes + parsed_args.routes attrs['routes'] = obj.routes + parsed_args.routes
if attrs == {}:
msg = _("Nothing specified to be set")
raise exceptions.CommandError(msg)
client.update_router(obj, **attrs) client.update_router(obj, **attrs)

View File

@ -373,9 +373,6 @@ class SetSubnet(command.Command):
obj = client.find_subnet(parsed_args.subnet, ignore_missing=False) obj = client.find_subnet(parsed_args.subnet, ignore_missing=False)
attrs = _get_attrs(self.app.client_manager, parsed_args, attrs = _get_attrs(self.app.client_manager, parsed_args,
is_create=False) is_create=False)
if not attrs:
msg = "Nothing specified to be set"
raise exceptions.CommandError(msg)
if 'dns_nameservers' in attrs: if 'dns_nameservers' in attrs:
attrs['dns_nameservers'] += obj.dns_nameservers attrs['dns_nameservers'] += obj.dns_nameservers
if 'host_routes' in attrs: if 'host_routes' in attrs:

View File

@ -14,7 +14,6 @@
"""Subnet pool action implementations""" """Subnet pool action implementations"""
from openstackclient.common import command from openstackclient.common import command
from openstackclient.common import exceptions
from openstackclient.common import parseractions from openstackclient.common import parseractions
from openstackclient.common import utils from openstackclient.common import utils
from openstackclient.i18n import _ from openstackclient.i18n import _
@ -286,9 +285,6 @@ class SetSubnetPool(command.Command):
ignore_missing=False) ignore_missing=False)
attrs = _get_attrs(self.app.client_manager, parsed_args) attrs = _get_attrs(self.app.client_manager, parsed_args)
if attrs == {}:
msg = _("Nothing specified to be set")
raise exceptions.CommandError(msg)
# Existing prefixes must be a subset of the new prefixes. # Existing prefixes must be a subset of the new prefixes.
if 'prefixes' in attrs: if 'prefixes' in attrs:

View File

@ -313,8 +313,12 @@ class TestSetAddressScope(TestAddressScope):
] ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.cmd.take_action, result = self.cmd.take_action(parsed_args)
parsed_args)
attrs = {}
self.network.update_address_scope.assert_called_with(
self._address_scope, **attrs)
self.assertIsNone(result)
def test_set_name_and_share(self): def test_set_name_and_share(self):
arglist = [ arglist = [

View File

@ -609,8 +609,12 @@ class TestSetNetwork(TestNetwork):
verifylist = [('network', self._network.name), ] verifylist = [('network', self._network.name), ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.cmd.take_action, result = self.cmd.take_action(parsed_args)
parsed_args)
attrs = {}
self.network.update_network.assert_called_once_with(
self._network, **attrs)
self.assertIsNone(result)
class TestShowNetwork(TestNetwork): class TestShowNetwork(TestNetwork):

View File

@ -426,6 +426,21 @@ class TestSetPort(TestPort):
self.network.update_port.assert_called_once_with(self._port, **attrs) self.network.update_port.assert_called_once_with(self._port, **attrs)
self.assertIsNone(result) self.assertIsNone(result)
def test_set_nothing(self):
arglist = [
self._port.name,
]
verifylist = [
('port', self._port.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
attrs = {}
self.network.update_port.assert_called_once_with(self._port, **attrs)
self.assertIsNone(result)
class TestShowPort(TestPort): class TestShowPort(TestPort):

View File

@ -13,7 +13,6 @@
import mock import mock
from openstackclient.common import exceptions
from openstackclient.common import utils as osc_utils from openstackclient.common import utils as osc_utils
from openstackclient.network.v2 import router from openstackclient.network.v2 import router
from openstackclient.tests.network.v2 import fakes as network_fakes from openstackclient.tests.network.v2 import fakes as network_fakes
@ -568,12 +567,20 @@ class TestSetRouter(TestRouter):
self.cmd, arglist, verifylist) self.cmd, arglist, verifylist)
def test_set_nothing(self): def test_set_nothing(self):
arglist = [self._router.name, ] arglist = [
verifylist = [('router', self._router.name), ] self._router.name,
]
verifylist = [
('router', self._router.name),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.cmd.take_action, result = self.cmd.take_action(parsed_args)
parsed_args)
attrs = {}
self.network.update_router.assert_called_once_with(
self._router, **attrs)
self.assertIsNone(result)
class TestShowRouter(TestRouter): class TestShowRouter(TestRouter):

View File

@ -14,7 +14,6 @@
import copy import copy
import mock import mock
from openstackclient.common import exceptions
from openstackclient.common import utils from openstackclient.common import utils
from openstackclient.network.v2 import subnet as subnet_v2 from openstackclient.network.v2 import subnet as subnet_v2
from openstackclient.tests import fakes from openstackclient.tests import fakes
@ -549,8 +548,11 @@ class TestSetSubnet(TestSubnet):
verifylist = [('subnet', self._subnet.name)] verifylist = [('subnet', self._subnet.name)]
parsed_args = self.check_parser(self.cmd, arglist, verifylist) parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.cmd.take_action, result = self.cmd.take_action(parsed_args)
parsed_args)
attrs = {}
self.network.update_subnet.assert_called_with(self._subnet, **attrs)
self.assertIsNone(result)
def test_append_options(self): def test_append_options(self):
_testsubnet = network_fakes.FakeSubnet.create_one_subnet( _testsubnet = network_fakes.FakeSubnet.create_one_subnet(

View File

@ -15,7 +15,6 @@ import argparse
import copy import copy
import mock import mock
from openstackclient.common import exceptions
from openstackclient.common import utils from openstackclient.common import utils
from openstackclient.network.v2 import subnet_pool from openstackclient.network.v2 import subnet_pool
from openstackclient.tests import fakes from openstackclient.tests import fakes
@ -443,10 +442,14 @@ class TestSetSubnetPool(TestSubnetPool):
def test_set_nothing(self): def test_set_nothing(self):
arglist = [self._subnet_pool.name, ] arglist = [self._subnet_pool.name, ]
verifylist = [('subnet_pool', self._subnet_pool.name), ] verifylist = [('subnet_pool', self._subnet_pool.name), ]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
self.assertRaises(exceptions.CommandError, self.cmd.take_action, parsed_args = self.check_parser(self.cmd, arglist, verifylist)
parsed_args) result = self.cmd.take_action(parsed_args)
attrs = {}
self.network.update_subnet_pool.assert_called_once_with(
self._subnet_pool, **attrs)
self.assertIsNone(result)
def test_set_len_negative(self): def test_set_len_negative(self):
arglist = [ arglist = [

View File

@ -0,0 +1,6 @@
---
upgrade:
- All ``set`` and ``unset`` commands in network and volume now return
normally when nothing specified to modify. This will become the default
behavior of OSC ``set`` and ``unset`` commands.
[Bug `1588588 <https://bugs.launchpad.net/python-openstackclient/+bug/1588588>`_]