Validates security group name and description
RM11507 Security group names and descriptions are now correctly limited to 255 characters a piece, and an error will be thrown to the user if either is greater.
This commit is contained in:
@@ -27,6 +27,8 @@ from quark import protocols
|
|||||||
CONF = cfg.CONF
|
CONF = cfg.CONF
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
DEFAULT_SG_UUID = "00000000-0000-0000-0000-000000000000"
|
DEFAULT_SG_UUID = "00000000-0000-0000-0000-000000000000"
|
||||||
|
GROUP_NAME_MAX_LENGTH = 255
|
||||||
|
GROUP_DESCRIPTION_MAX_LENGTH = 255
|
||||||
|
|
||||||
|
|
||||||
def _validate_security_group_rule(context, rule):
|
def _validate_security_group_rule(context, rule):
|
||||||
@@ -63,13 +65,28 @@ def _validate_security_group_rule(context, rule):
|
|||||||
return rule
|
return rule
|
||||||
|
|
||||||
|
|
||||||
|
def _validate_security_group(security_group):
|
||||||
|
if "name" in security_group:
|
||||||
|
if len(security_group["name"]) > GROUP_NAME_MAX_LENGTH:
|
||||||
|
raise exceptions.InvalidInput(msg="Group name must be 255 "
|
||||||
|
"characters or less")
|
||||||
|
|
||||||
|
if security_group["name"] == "default":
|
||||||
|
raise sg_ext.SecurityGroupDefaultAlreadyExists()
|
||||||
|
|
||||||
|
if ("description" in security_group and
|
||||||
|
len(security_group["description"]) > GROUP_DESCRIPTION_MAX_LENGTH):
|
||||||
|
raise exceptions.InvalidInput(msg="Group description must be 255 "
|
||||||
|
"characters or less")
|
||||||
|
|
||||||
|
|
||||||
def create_security_group(context, security_group):
|
def create_security_group(context, security_group):
|
||||||
LOG.info("create_security_group for tenant %s" %
|
LOG.info("create_security_group for tenant %s" %
|
||||||
(context.tenant_id))
|
(context.tenant_id))
|
||||||
group = security_group["security_group"]
|
group = security_group["security_group"]
|
||||||
|
_validate_security_group(group)
|
||||||
|
|
||||||
group_name = group.get('name', '')
|
group_name = group.get('name', '')
|
||||||
if group_name == "default":
|
|
||||||
raise sg_ext.SecurityGroupDefaultAlreadyExists()
|
|
||||||
group_id = uuidutils.generate_uuid()
|
group_id = uuidutils.generate_uuid()
|
||||||
|
|
||||||
with context.session.begin():
|
with context.session.begin():
|
||||||
@@ -178,6 +195,8 @@ def update_security_group(context, id, security_group):
|
|||||||
if id == DEFAULT_SG_UUID:
|
if id == DEFAULT_SG_UUID:
|
||||||
raise sg_ext.SecurityGroupCannotUpdateDefault()
|
raise sg_ext.SecurityGroupCannotUpdateDefault()
|
||||||
new_group = security_group["security_group"]
|
new_group = security_group["security_group"]
|
||||||
|
_validate_security_group(new_group)
|
||||||
|
|
||||||
with context.session.begin():
|
with context.session.begin():
|
||||||
group = db_api.security_group_find(context, id=id, scope=db_api.ONE)
|
group = db_api.security_group_find(context, id=id, scope=db_api.ONE)
|
||||||
db_group = db_api.security_group_update(context, group, **new_group)
|
db_group = db_api.security_group_update(context, group, **new_group)
|
||||||
|
|||||||
@@ -209,6 +209,22 @@ class TestQuarkCreateSecurityGroup(test_quark_plugin.TestQuarkPlugin):
|
|||||||
self.context, {'security_group': group})
|
self.context, {'security_group': group})
|
||||||
self.assertTrue(group_create.called)
|
self.assertTrue(group_create.called)
|
||||||
|
|
||||||
|
def test_create_security_group_name_too_long(self):
|
||||||
|
group = {'name': 'a' * 256, 'description': 'bar',
|
||||||
|
'tenant_id': self.context.tenant_id}
|
||||||
|
with self._stubs(group):
|
||||||
|
with self.assertRaises(exceptions.InvalidInput):
|
||||||
|
self.plugin.create_security_group(
|
||||||
|
self.context, {'security_group': group})
|
||||||
|
|
||||||
|
def test_create_security_group_description(self):
|
||||||
|
group = {'name': 'foo', 'description': 'b' * 256,
|
||||||
|
'tenant_id': self.context.tenant_id}
|
||||||
|
with self._stubs(group):
|
||||||
|
with self.assertRaises(exceptions.InvalidInput):
|
||||||
|
self.plugin.create_security_group(
|
||||||
|
self.context, {'security_group': group})
|
||||||
|
|
||||||
|
|
||||||
class TestQuarkDeleteSecurityGroup(test_quark_plugin.TestQuarkPlugin):
|
class TestQuarkDeleteSecurityGroup(test_quark_plugin.TestQuarkPlugin):
|
||||||
@contextlib.contextmanager
|
@contextlib.contextmanager
|
||||||
|
|||||||
Reference in New Issue
Block a user