diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-10-04 15:54:19 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-10-04 15:54:19 +0000 |
| commit | 96f610516fb147c33380e4845ccfbf77cb351aed (patch) | |
| tree | 1977f4d2bee545e1b7a64b654077afd0e026074e /nova | |
| parent | 1d4506c16aec9674be6a3685ba585a8bbd9c1559 (diff) | |
| parent | 10d503b27b8e5abbd8802b3107acd35024761558 (diff) | |
| download | nova-96f610516fb147c33380e4845ccfbf77cb351aed.tar.gz nova-96f610516fb147c33380e4845ccfbf77cb351aed.tar.xz nova-96f610516fb147c33380e4845ccfbf77cb351aed.zip | |
Merge "ip_protocol for ec2 security groups"
Diffstat (limited to 'nova')
| -rw-r--r-- | nova/api/ec2/cloud.py | 11 | ||||
| -rw-r--r-- | nova/exception.py | 5 | ||||
| -rw-r--r-- | nova/tests/test_api.py | 2 | ||||
| -rw-r--r-- | nova/tests/test_exception.py | 1 |
4 files changed, 12 insertions, 7 deletions
diff --git a/nova/api/ec2/cloud.py b/nova/api/ec2/cloud.py index 5cb07eeac..a27057aa7 100644 --- a/nova/api/ec2/cloud.py +++ b/nova/api/ec2/cloud.py @@ -460,7 +460,7 @@ class CloudController(object): r['groups'] += [{'groupName': source_group.name, 'userId': source_group.project_id}] if rule.protocol: - r['ipProtocol'] = rule.protocol + r['ipProtocol'] = rule.protocol.lower() r['fromPort'] = rule.from_port r['toPort'] = rule.to_port g['ipPermissions'] += [dict(r)] @@ -562,6 +562,14 @@ class CloudController(object): err = _("%s Not enough parameters to build a valid rule") raise exception.EC2APIError(err % rulesvalues) + def _validate_security_group_protocol(self, values): + validprotocols = ['tcp', 'udp', 'icmp', '6', '17', '1'] + if 'ip_protocol' in values and \ + values['ip_protocol'] not in validprotocols: + protocol = values['ip_protocol'] + err = _("Invalid IP protocol %(protocol)s.") % locals() + raise exception.EC2APIError(message=err, code="400") + def revoke_security_group_ingress(self, context, group_name=None, group_id=None, **kwargs): self._validate_group_identifier(group_name, group_id) @@ -605,6 +613,7 @@ class CloudController(object): prevalues = kwargs.get('ip_permissions', [kwargs]) postvalues = [] for values in prevalues: + self._validate_security_group_protocol(values) rulesvalues = self._rule_args_to_dict(context, values) self._validate_rulevalues(rulesvalues) for values_for_rule in rulesvalues: diff --git a/nova/exception.py b/nova/exception.py index b8df7ddcc..0b969e625 100644 --- a/nova/exception.py +++ b/nova/exception.py @@ -164,10 +164,7 @@ class EC2APIError(NovaException): def __init__(self, message=None, code=None): self.msg = message self.code = code - if code: - outstr = '%s: %s' % (code, message) - else: - outstr = '%s' % message + outstr = '%s' % message super(EC2APIError, self).__init__(outstr) diff --git a/nova/tests/test_api.py b/nova/tests/test_api.py index 4a4260705..d2710777b 100644 --- a/nova/tests/test_api.py +++ b/nova/tests/test_api.py @@ -448,7 +448,7 @@ class ApiEc2TestCase(test.TestCase): # Invalid Cidr for ICMP type _assert('Invalid CIDR', 'icmp', -1, -1, '0.0.444.0/4') # Invalid protocol - _assert('An unknown error has occurred', 'xyz', 1, 14, '0.0.0.0/0') + _assert('Invalid IP protocol', 'xyz', 1, 14, '0.0.0.0/0') # Invalid port _assert('An unknown error has occurred', 'tcp', " ", "81", '0.0.0.0/0') # Invalid icmp port diff --git a/nova/tests/test_exception.py b/nova/tests/test_exception.py index 0db8067a2..f7e4bc037 100644 --- a/nova/tests/test_exception.py +++ b/nova/tests/test_exception.py @@ -30,7 +30,6 @@ class EC2APIErrorTestCase(test.TestCase): self.assertEqual(err.msg, 'fake error') # with 'code' arg err = exception.EC2APIError('fake error', 'blah code') - self.assertEqual(err.__str__(), 'blah code: fake error') self.assertEqual(err.code, 'blah code') self.assertEqual(err.msg, 'fake error') |
