Merge "Append existing information during port set"

This commit is contained in:
Jenkins 2016-04-15 16:30:48 +00:00 committed by Gerrit Code Review
commit f66f989d83
2 changed files with 34 additions and 7 deletions

View File

@ -30,6 +30,7 @@ LOG = logging.getLogger(__name__)
def _format_admin_state(state):
return 'UP' if state else 'DOWN'
_formatters = {
'admin_state_up': _format_admin_state,
'allowed_address_pairs': utils.format_list_of_dicts,
@ -383,17 +384,24 @@ class SetPort(command.Command):
_prepare_fixed_ips(self.app.client_manager, parsed_args)
attrs = _get_attrs(self.app.client_manager, parsed_args)
if parsed_args.no_fixed_ip:
attrs['fixed_ips'] = []
if parsed_args.no_binding_profile:
obj = client.find_port(parsed_args.port, ignore_missing=False)
if 'binding:profile' in attrs:
attrs['binding:profile'].update(obj.binding_profile)
elif parsed_args.no_binding_profile:
attrs['binding:profile'] = {}
if 'fixed_ips' in attrs:
# When user unsets the fixed_ips, obj.fixed_ips = [{}].
# Adding the obj.fixed_ips list to attrs['fixed_ips']
# would therefore add an empty dictionary, while we need
# to append the attrs['fixed_ips'] iff there is some info
# in the obj.fixed_ips. Therefore I have opted for this `for` loop
attrs['fixed_ips'] += [ip for ip in obj.fixed_ips if ip]
elif parsed_args.no_fixed_ip:
attrs['fixed_ips'] = []
if attrs == {}:
msg = "Nothing specified to be set"
raise exceptions.CommandError(msg)
obj = client.find_port(parsed_args.port, ignore_missing=False)
client.update_port(obj, **attrs)

View File

@ -268,7 +268,6 @@ class TestSetPort(TestPort):
def setUp(self):
super(TestSetPort, self).setUp()
self.fake_subnet = network_fakes.FakeSubnet.create_one_subnet()
self.network.find_subnet = mock.Mock(return_value=self.fake_subnet)
self.network.find_port = mock.Mock(return_value=self._port)
@ -295,6 +294,26 @@ class TestSetPort(TestPort):
self.network.update_port.assert_called_once_with(self._port, **attrs)
self.assertIsNone(result)
def test_append_fixed_ip(self):
_testport = network_fakes.FakePort.create_one_port(
{'fixed_ips': [{'ip_address': '0.0.0.1'}]})
self.network.find_port = mock.Mock(return_value=_testport)
arglist = [
'--fixed-ip', 'ip-address=10.0.0.12',
_testport.name,
]
verifylist = [
('fixed_ip', [{'ip-address': '10.0.0.12'}]),
]
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
result = self.cmd.take_action(parsed_args)
attrs = {
'fixed_ips': [
{'ip_address': '10.0.0.12'}, {'ip_address': '0.0.0.1'}],
}
self.network.update_port.assert_called_once_with(_testport, **attrs)
self.assertIsNone(result)
def test_set_this(self):
arglist = [
'--disable',