diff --git a/nova/api/openstack/compute/plugins/v3/server_groups.py b/nova/api/openstack/compute/plugins/v3/server_groups.py index 50b0c49cef02..1389b05254e2 100644 --- a/nova/api/openstack/compute/plugins/v3/server_groups.py +++ b/nova/api/openstack/compute/plugins/v3/server_groups.py @@ -131,6 +131,12 @@ class ServerGroupController(wsgi.Controller): """Creates a new server group.""" context = _authorize_context(req) + policies = body['server_group']['policies'] + if ('anti-affinity' in policies and + 'affinity' in policies): + msg = _("Conflicting policies configured!") + raise exc.HTTPBadRequest(explanation=msg) + quotas = objects.Quotas() try: quotas.reserve(context, project_id=context.project_id, diff --git a/nova/api/openstack/compute/schemas/v3/server_groups.py b/nova/api/openstack/compute/schemas/v3/server_groups.py index f270ff7f1d8e..56449d2f5393 100644 --- a/nova/api/openstack/compute/schemas/v3/server_groups.py +++ b/nova/api/openstack/compute/schemas/v3/server_groups.py @@ -30,13 +30,7 @@ create = { 'policies': { 'type': 'array', 'items': { - 'type': 'string', 'enum': SUPPORTED_POLICIES, - 'not': {'allOf': [ - # NOTE: Clients cannot specify both affinity and - # anti-affinity in a single request. - {'enum': 'affinity'}, - {'enum': 'anti-affinity'} - ]} + 'type': 'string', 'enum': SUPPORTED_POLICIES }, 'uniqueItems': True, 'minItems': 1 diff --git a/nova/tests/unit/api/openstack/compute/contrib/test_server_groups.py b/nova/tests/unit/api/openstack/compute/contrib/test_server_groups.py index 45e186c6dad8..6c48e82f2213 100644 --- a/nova/tests/unit/api/openstack/compute/contrib/test_server_groups.py +++ b/nova/tests/unit/api/openstack/compute/contrib/test_server_groups.py @@ -208,7 +208,7 @@ class ServerGroupTestV21(test.TestCase): sgroup = server_group_template() policies = ['anti-affinity', 'affinity'] sgroup['policies'] = policies - self.assertRaises(self.validation_error, self.controller.create, + self.assertRaises(webob.exc.HTTPBadRequest, self.controller.create, self.req, body={'server_group': sgroup}) def test_create_server_group_with_duplicate_policies(self):