Skip to content

Commit fcafd98

Browse files
author
M V P Nitesh
committed
Now OSC server create check keys in --nic
Now OSC command to create server will check all the keys in --nic and throws an exception if the key is invalid key. Change-Id: I5482da0ae63d6d4298aa614e4d09bb0547da9ec3 Closes-Bug: #1681411
1 parent eb793dc commit fcafd98

2 files changed

Lines changed: 70 additions & 6 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -651,12 +651,16 @@ def take_action(self, parsed_args):
651651
else:
652652
nic_info = {"net-id": "", "v4-fixed-ip": "",
653653
"v6-fixed-ip": "", "port-id": ""}
654-
try:
655-
nic_info.update(dict(kv_str.split("=", 1)
656-
for kv_str in nic_str.split(",")))
657-
except ValueError:
658-
msg = _('Invalid --nic argument %s.') % nic_str
659-
raise exceptions.CommandError(msg)
654+
for kv_str in nic_str.split(","):
655+
k, sep, v = kv_str.partition("=")
656+
if k in nic_info and v:
657+
nic_info[k] = v
658+
else:
659+
msg = (_("Invalid nic argument '%s'. Nic arguments "
660+
"must be of the form --nic <net-id=net-uuid"
661+
",v4-fixed-ip=ip-addr,v6-fixed-ip=ip-addr,"
662+
"port-id=port-uuid>."))
663+
raise exceptions.CommandError(msg % k)
660664
if bool(nic_info["net-id"]) == bool(nic_info["port-id"]):
661665
msg = _("either network or port should be specified "
662666
"but not both")

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,66 @@ def test_server_create_with_invalid_network_options(self):
795795
self.cmd.take_action, parsed_args)
796796
self.assertNotCalled(self.servers_mock.create)
797797

798+
def test_server_create_with_invalid_network_key(self):
799+
arglist = [
800+
'--image', 'image1',
801+
'--flavor', 'flavor1',
802+
'--nic', 'abcdefgh=12324',
803+
self.new_server.name,
804+
]
805+
verifylist = [
806+
('image', 'image1'),
807+
('flavor', 'flavor1'),
808+
('nic', ['abcdefgh=12324']),
809+
('config_drive', False),
810+
('server_name', self.new_server.name),
811+
]
812+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
813+
814+
self.assertRaises(exceptions.CommandError,
815+
self.cmd.take_action, parsed_args)
816+
self.assertNotCalled(self.servers_mock.create)
817+
818+
def test_server_create_with_empty_network_key_value(self):
819+
arglist = [
820+
'--image', 'image1',
821+
'--flavor', 'flavor1',
822+
'--nic', 'net-id=',
823+
self.new_server.name,
824+
]
825+
verifylist = [
826+
('image', 'image1'),
827+
('flavor', 'flavor1'),
828+
('nic', ['net-id=']),
829+
('config_drive', False),
830+
('server_name', self.new_server.name),
831+
]
832+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
833+
834+
self.assertRaises(exceptions.CommandError,
835+
self.cmd.take_action, parsed_args)
836+
self.assertNotCalled(self.servers_mock.create)
837+
838+
def test_server_create_with_only_network_key(self):
839+
arglist = [
840+
'--image', 'image1',
841+
'--flavor', 'flavor1',
842+
'--nic', 'net-id',
843+
self.new_server.name,
844+
]
845+
verifylist = [
846+
('image', 'image1'),
847+
('flavor', 'flavor1'),
848+
('nic', ['net-id']),
849+
('config_drive', False),
850+
('server_name', self.new_server.name),
851+
]
852+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
853+
854+
self.assertRaises(exceptions.CommandError,
855+
self.cmd.take_action, parsed_args)
856+
self.assertNotCalled(self.servers_mock.create)
857+
798858
@mock.patch.object(common_utils, 'wait_for_status', return_value=True)
799859
def test_server_create_with_wait_ok(self, mock_wait_for_status):
800860
arglist = [

0 commit comments

Comments
 (0)