summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-07-20 18:43:18 +0000
committerGerrit Code Review <review@openstack.org>2017-07-20 18:43:18 +0000
commit57e7d9fdb33c17a96460655e46ff93bc9d19f807 (patch)
treec37f7af24ba055b27a43585aa1e3f602fc446902
parent64c458f0ee64db5e4aa43d52546634abe7664e52 (diff)
parentfcafd987b0143a08eff964f1e988a3aaa40ad824 (diff)
downloadpython-openstackclient-57e7d9fdb33c17a96460655e46ff93bc9d19f807.tar.gz
Merge "Now OSC server create check keys in --nic"
-rw-r--r--openstackclient/compute/v2/server.py16
-rw-r--r--openstackclient/tests/unit/compute/v2/test_server.py60
2 files changed, 70 insertions, 6 deletions
diff --git a/openstackclient/compute/v2/server.py b/openstackclient/compute/v2/server.py
index a991ed45..ce4191c1 100644
--- a/openstackclient/compute/v2/server.py
+++ b/openstackclient/compute/v2/server.py
@@ -651,12 +651,16 @@ class CreateServer(command.ShowOne):
else:
nic_info = {"net-id": "", "v4-fixed-ip": "",
"v6-fixed-ip": "", "port-id": ""}
- try:
- nic_info.update(dict(kv_str.split("=", 1)
- for kv_str in nic_str.split(",")))
- except ValueError:
- msg = _('Invalid --nic argument %s.') % nic_str
- raise exceptions.CommandError(msg)
+ for kv_str in nic_str.split(","):
+ k, sep, v = kv_str.partition("=")
+ if k in nic_info and v:
+ nic_info[k] = v
+ else:
+ msg = (_("Invalid nic argument '%s'. Nic arguments "
+ "must be of the form --nic <net-id=net-uuid"
+ ",v4-fixed-ip=ip-addr,v6-fixed-ip=ip-addr,"
+ "port-id=port-uuid>."))
+ raise exceptions.CommandError(msg % k)
if bool(nic_info["net-id"]) == bool(nic_info["port-id"]):
msg = _("either network or port should be specified "
"but not both")
diff --git a/openstackclient/tests/unit/compute/v2/test_server.py b/openstackclient/tests/unit/compute/v2/test_server.py
index b02b1491..5b0d28a1 100644
--- a/openstackclient/tests/unit/compute/v2/test_server.py
+++ b/openstackclient/tests/unit/compute/v2/test_server.py
@@ -797,6 +797,66 @@ class TestServerCreate(TestServer):
self.cmd.take_action, parsed_args)
self.assertNotCalled(self.servers_mock.create)
+ def test_server_create_with_invalid_network_key(self):
+ arglist = [
+ '--image', 'image1',
+ '--flavor', 'flavor1',
+ '--nic', 'abcdefgh=12324',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('image', 'image1'),
+ ('flavor', 'flavor1'),
+ ('nic', ['abcdefgh=12324']),
+ ('config_drive', False),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(exceptions.CommandError,
+ self.cmd.take_action, parsed_args)
+ self.assertNotCalled(self.servers_mock.create)
+
+ def test_server_create_with_empty_network_key_value(self):
+ arglist = [
+ '--image', 'image1',
+ '--flavor', 'flavor1',
+ '--nic', 'net-id=',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('image', 'image1'),
+ ('flavor', 'flavor1'),
+ ('nic', ['net-id=']),
+ ('config_drive', False),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(exceptions.CommandError,
+ self.cmd.take_action, parsed_args)
+ self.assertNotCalled(self.servers_mock.create)
+
+ def test_server_create_with_only_network_key(self):
+ arglist = [
+ '--image', 'image1',
+ '--flavor', 'flavor1',
+ '--nic', 'net-id',
+ self.new_server.name,
+ ]
+ verifylist = [
+ ('image', 'image1'),
+ ('flavor', 'flavor1'),
+ ('nic', ['net-id']),
+ ('config_drive', False),
+ ('server_name', self.new_server.name),
+ ]
+ parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+ self.assertRaises(exceptions.CommandError,
+ self.cmd.take_action, parsed_args)
+ self.assertNotCalled(self.servers_mock.create)
+
@mock.patch.object(common_utils, 'wait_for_status', return_value=True)
def test_server_create_with_wait_ok(self, mock_wait_for_status):
arglist = [