Skip to content
Snippets Groups Projects
Commit 633b05b3 authored by André Anjos's avatar André Anjos :speech_balloon:
Browse files

[backend] Correctly dump and assign group permissions

parent 2fac5168
No related branches found
No related tags found
1 merge request!194Scheduler
......@@ -59,7 +59,10 @@ DEFAULT_CONFIGURATION = {
"quantity": CORES,
"priority": 0
}
}
},
"groups": [
"Default",
],
}
},
"environments": {
......
......@@ -37,6 +37,9 @@ from django.db import transaction
from django.conf import settings
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext_lazy as _
from django.contrib.auth.models import Group
from guardian.shortcuts import get_perms
import beat.core.stats
import beat.core.data
......@@ -343,6 +346,7 @@ class Queue(models.Model):
'environments': [k.natural_key() for k in self.environments.all()],
'slots': dict([(s.worker.name, dict(quantity=s.quantity,
priority=s.priority)) for s in self.slots.all()]),
'groups': [k.name for k in Group.objects.all() if 'can_access' in get_perms(k, self)]
}
......
......@@ -34,20 +34,6 @@ from django.conf import settings
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
# Override the Scheduler API
from ..utils import scheduler
def mockPutMessage(url, params=None, data=None):
return (200, None)
def mockPostMessage(url, params=None, data=None):
return (200, None)
scheduler.putMessage = mockPutMessage
scheduler.postMessage = mockPostMessage
from ..experiments.models import Experiment
from ..experiments.models import Block
from ..dataformats.models import DataFormat
......@@ -60,6 +46,7 @@ from ..backend.models import Queue
from ..common.testutils import BaseTestCase
class BackendAPIBase(BaseTestCase):
DECLARATION1 = {
......@@ -351,29 +338,10 @@ class BackendAPIBase(BaseTestCase):
#----------------------------------------------------------
class SchedulerAPI(BackendAPIBase):
def setUp(self):
super(SchedulerAPI, self).setUp()
self.url = reverse('api_backend:backend-api-scheduler')
def test_no_access_for_anonymous_user(self):
response = self.client.get(self.url)
self.checkResponse(response, 403)
def test_no_access_for_non_superuser(self):
self.client.login(username='johndoe', password='1234')
response = self.client.get(self.url)
self.checkResponse(response, 403)
#----------------------------------------------------------
class CancelAllExperimentsAPI(BackendAPIBase):
def setUp(self):
super(CancelAllExperimentsAPI, self).setUp()
self.url = reverse('api_backend:backend-api-cancel-all-experiments')
self.url = reverse('backend:cancel-experiments')
def test_no_access_for_anonymous_user(self):
response = self.client.get(self.url)
......
......@@ -36,8 +36,11 @@ import logging
logger = logging.getLogger(__name__)
from django.db import transaction
from django.contrib.auth.models import Group
from guardian.shortcuts import assign_perm
from ..experiments.models import CachedFile, Block, Experiment
from ..common.models import Shareable
from .models import Queue, Worker, Slot, Job, Environment
......@@ -165,7 +168,7 @@ def setup_backend(d):
# 2. We get a list of new queue/environment combinations
config_q_envs = set([(qname, envkey) \
for qname, qpar in d['queues'].items() \
for envkey in qpar['environments'].keys()])
for envkey in qpar['environments']])
# 3. We figure out which combinations of queue/environment's need to be
# deleted.
......@@ -214,6 +217,7 @@ def setup_backend(d):
version=attrs['version'],
short_description=attrs.get('short_description'),
description=attrs.get('description'),
sharing=Shareable.PUBLIC,
)
logger.info("Creating `%s'...", env)
env.save()
......@@ -261,6 +265,11 @@ def setup_backend(d):
logger.info("Creating `%s'...", queue)
queue.save()
for gname in attrs['groups']:
group = Group.objects.get(name=gname)
logger.info("Allowing group `%s' access to `%s'...", group, queue)
assign_perm('can_access', group, queue)
for hostname, par in attrs['slots'].items():
worker = Worker.objects.get(name=hostname)
priority = par.get('priority', 0)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment