Commit 2185b5fb by Czémán Arnold

storage, dashboard: rework ceph_user field tracking, avoids pickling errors

parent 79aeec80
Pipeline #165 passed with stage
in 0 seconds
...@@ -283,17 +283,20 @@ class StorageDetail(SuperuserRequiredMixin, UpdateView): ...@@ -283,17 +283,20 @@ class StorageDetail(SuperuserRequiredMixin, UpdateView):
return reverse("dashboard.views.storage-detail", kwargs={"pk": ds.id}) return reverse("dashboard.views.storage-detail", kwargs={"pk": ds.id})
def form_valid(self, form): def form_valid(self, form):
response = super(StorageDetail, self).form_valid(form)
# automatic credential refresh # automatic credential refresh
changed = (self.object.type == "ceph_block" and changed = (self.object.type == "ceph_block" and
self.object.tracker.has_changed("ceph_user")) self.object.ceph_user_changed)
response = super(StorageDetail, self).form_valid(form)
if changed: if changed:
nodes = Node.objects.all() try:
for node in nodes: nodes = Node.objects.all()
if node.get_online(): for node in nodes:
node.refresh_credential( if node.get_online():
user=self.request.user, node.refresh_credential(
username=self.object.ceph_user) user=self.request.user,
username=self.object.ceph_user)
except Exception as e:
messages.error(self.request, unicode(e))
return response return response
......
...@@ -33,7 +33,6 @@ from django.core.urlresolvers import reverse ...@@ -33,7 +33,6 @@ from django.core.urlresolvers import reverse
from django.utils import timezone from django.utils import timezone
from django.utils.translation import ugettext_lazy as _, ugettext_noop from django.utils.translation import ugettext_lazy as _, ugettext_noop
from model_utils.models import TimeStampedModel from model_utils.models import TimeStampedModel
from model_utils import FieldTracker
from sizefield.models import FileSizeField from sizefield.models import FileSizeField
from .tasks import local_tasks, storage_tasks from .tasks import local_tasks, storage_tasks
...@@ -73,7 +72,7 @@ class DataStore(Model): ...@@ -73,7 +72,7 @@ class DataStore(Model):
verbose_name=_('Ceph username')) verbose_name=_('Ceph username'))
destroyed = DateTimeField(blank=True, default=None, null=True) destroyed = DateTimeField(blank=True, default=None, null=True)
tracker = FieldTracker(fields=["ceph_user"]) ceph_user_changed = False
class Meta: class Meta:
ordering = ['name'] ordering = ['name']
...@@ -83,6 +82,12 @@ class DataStore(Model): ...@@ -83,6 +82,12 @@ class DataStore(Model):
def __unicode__(self): def __unicode__(self):
return u'%s (%s)' % (self.name, self.path) return u'%s (%s)' % (self.name, self.path)
def save(self, *args, **kwargs):
if self.pk is not None:
orig = DataStore.objects.get(pk=self.pk)
self.ceph_user_changed = orig.ceph_user != self.ceph_user
super(DataStore, self).save(*args, **kwargs)
def get_remote_queue_name(self, queue_id, priority=None, def get_remote_queue_name(self, queue_id, priority=None,
check_worker=True): check_worker=True):
logger.debug("Checking for storage queue %s.%s", logger.debug("Checking for storage queue %s.%s",
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment