Merge "Error out if nic auto or none are not alone"

This commit is contained in:
Jenkins 2017-06-14 14:16:21 +00:00 committed by Gerrit Code Review
commit c45bb4dfc7
2 changed files with 43 additions and 0 deletions
novaclient
tests/unit/v2
v2

@ -650,6 +650,30 @@ class ShellTest(utils.TestCase):
},
)
def test_boot_nic_auto_not_alone_after(self):
cmd = ('boot --image %s --flavor 1 '
'--nic auto,tag=foo some-server' %
FAKE_UUID_1)
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
def test_boot_nic_auto_not_alone_before(self):
cmd = ('boot --image %s --flavor 1 '
'--nic tag=foo,auto some-server' %
FAKE_UUID_1)
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
def test_boot_nic_none_not_alone_before(self):
cmd = ('boot --image %s --flavor 1 '
'--nic none,tag=foo some-server' %
FAKE_UUID_1)
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
def test_boot_nic_none_not_alone_after(self):
cmd = ('boot --image %s --flavor 1 '
'--nic tag=foo,none some-server' %
FAKE_UUID_1)
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
def test_boot_nics(self):
cmd = ('boot --image %s --flavor 1 '
'--nic net-id=a=c,v4-fixed-ip=10.0.0.1 some-server' %

@ -310,12 +310,30 @@ def _parse_nics(cs, args):
auto_or_none = False
nics = []
for nic_str in args.nics:
nic_info_set = False
for kv_str in nic_str.split(","):
if auto_or_none:
# Since we start with auto_or_none being False, it being true
# means we've parsed an auto or none argument, then continued
# after the comma to another key=value pair. Since auto or none
# can only be given by themselves, raise.
raise exceptions.CommandError(_("'auto' or 'none' cannot be "
"used with any other nic "
"arguments"))
try:
# handle the special auto/none cases
if kv_str in ('auto', 'none'):
if not supports_auto_alloc:
raise exceptions.CommandError(err_msg % nic_str)
if nic_info_set:
# Since we start with nic_info_set being False, it
# being true means we've parsed a key=value pair, then
# landed on a auto or none argument after the comma.
# Since auto or none can only be given by themselves,
# raise.
raise exceptions.CommandError(
_("'auto' or 'none' cannot be used with any "
"other nic arguments"))
nics.append(kv_str)
auto_or_none = True
continue
@ -332,6 +350,7 @@ def _parse_nics(cs, args):
if nic_info[k]:
raise exceptions.CommandError(err_msg % nic_str)
nic_info[k] = v
nic_info_set = True
else:
raise exceptions.CommandError(err_msg % nic_str)