mirror of https://github.com/jumpserver/jumpserver
fix: ldap ha periodic task did not execute as expected
parent
7791d6222a
commit
c0b301d52b
|
@ -3,6 +3,7 @@ from rest_framework import serializers
|
||||||
|
|
||||||
from common.serializers.fields import EncryptedField
|
from common.serializers.fields import EncryptedField
|
||||||
from .base import OrgListField
|
from .base import OrgListField
|
||||||
|
from .mixin import LDAPSerializerMixin
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'LDAPTestConfigSerializer', 'LDAPUserSerializer', 'LDAPTestLoginSerializer',
|
'LDAPTestConfigSerializer', 'LDAPUserSerializer', 'LDAPTestLoginSerializer',
|
||||||
|
@ -36,7 +37,7 @@ class LDAPUserSerializer(serializers.Serializer):
|
||||||
status = serializers.JSONField(read_only=True)
|
status = serializers.JSONField(read_only=True)
|
||||||
|
|
||||||
|
|
||||||
class LDAPSettingSerializer(serializers.Serializer):
|
class LDAPSettingSerializer(LDAPSerializerMixin, serializers.Serializer):
|
||||||
# encrypt_fields 现在使用 write_only 来判断了
|
# encrypt_fields 现在使用 write_only 来判断了
|
||||||
PREFIX_TITLE = _('LDAP')
|
PREFIX_TITLE = _('LDAP')
|
||||||
|
|
||||||
|
@ -103,10 +104,11 @@ class LDAPSettingSerializer(serializers.Serializer):
|
||||||
AUTH_LDAP = serializers.BooleanField(required=False, label=_('LDAP'))
|
AUTH_LDAP = serializers.BooleanField(required=False, label=_('LDAP'))
|
||||||
AUTH_LDAP_SYNC_ORG_IDS = OrgListField()
|
AUTH_LDAP_SYNC_ORG_IDS = OrgListField()
|
||||||
|
|
||||||
def post_save(self):
|
periodic_key = 'AUTH_LDAP_SYNC_IS_PERIODIC'
|
||||||
keys = ['AUTH_LDAP_SYNC_IS_PERIODIC', 'AUTH_LDAP_SYNC_INTERVAL', 'AUTH_LDAP_SYNC_CRONTAB']
|
interval_key = 'AUTH_LDAP_SYNC_INTERVAL'
|
||||||
kwargs = {k: self.validated_data[k] for k in keys if k in self.validated_data}
|
crontab_key = 'AUTH_LDAP_SYNC_CRONTAB'
|
||||||
if not kwargs:
|
|
||||||
return
|
@staticmethod
|
||||||
|
def import_task_function(**kwargs):
|
||||||
from settings.tasks import import_ldap_user_periodic
|
from settings.tasks import import_ldap_user_periodic
|
||||||
import_ldap_user_periodic(**kwargs)
|
import_ldap_user_periodic(**kwargs)
|
||||||
|
|
|
@ -3,6 +3,8 @@ from rest_framework import serializers
|
||||||
|
|
||||||
from common.serializers.fields import EncryptedField
|
from common.serializers.fields import EncryptedField
|
||||||
from .base import OrgListField
|
from .base import OrgListField
|
||||||
|
from .mixin import LDAPSerializerMixin
|
||||||
|
from ops.mixin import PeriodTaskSerializerMixin
|
||||||
|
|
||||||
__all__ = ['LDAPHATestConfigSerializer', 'LDAPHASettingSerializer']
|
__all__ = ['LDAPHATestConfigSerializer', 'LDAPHASettingSerializer']
|
||||||
|
|
||||||
|
@ -18,7 +20,7 @@ class LDAPHATestConfigSerializer(serializers.Serializer):
|
||||||
AUTH_LDAP_HA = serializers.BooleanField(required=False)
|
AUTH_LDAP_HA = serializers.BooleanField(required=False)
|
||||||
|
|
||||||
|
|
||||||
class LDAPHASettingSerializer(serializers.Serializer):
|
class LDAPHASettingSerializer(LDAPSerializerMixin, serializers.Serializer):
|
||||||
# encrypt_fields 现在使用 write_only 来判断了
|
# encrypt_fields 现在使用 write_only 来判断了
|
||||||
PREFIX_TITLE = _('LDAP HA')
|
PREFIX_TITLE = _('LDAP HA')
|
||||||
|
|
||||||
|
@ -85,10 +87,11 @@ class LDAPHASettingSerializer(serializers.Serializer):
|
||||||
AUTH_LDAP_HA = serializers.BooleanField(required=False, label=_('LDAP HA'))
|
AUTH_LDAP_HA = serializers.BooleanField(required=False, label=_('LDAP HA'))
|
||||||
AUTH_LDAP_HA_SYNC_ORG_IDS = OrgListField()
|
AUTH_LDAP_HA_SYNC_ORG_IDS = OrgListField()
|
||||||
|
|
||||||
def post_save(self):
|
periodic_key = 'AUTH_LDAP_HA_SYNC_IS_PERIODIC'
|
||||||
keys = ['AUTH_LDAP_HA_SYNC_IS_PERIODIC', 'AUTH_LDAP_HA_SYNC_INTERVAL', 'AUTH_LDAP_HA_SYNC_CRONTAB']
|
interval_key = 'AUTH_LDAP_HA_SYNC_INTERVAL'
|
||||||
kwargs = {k: self.validated_data[k] for k in keys if k in self.validated_data}
|
crontab_key = 'AUTH_LDAP_HA_SYNC_CRONTAB'
|
||||||
if not kwargs:
|
|
||||||
return
|
@staticmethod
|
||||||
|
def import_task_function(**kwargs):
|
||||||
from settings.tasks import import_ldap_ha_user_periodic
|
from settings.tasks import import_ldap_ha_user_periodic
|
||||||
import_ldap_ha_user_periodic(**kwargs)
|
import_ldap_ha_user_periodic(**kwargs)
|
||||||
|
|
|
@ -0,0 +1,21 @@
|
||||||
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from rest_framework import serializers
|
||||||
|
from ops.mixin import PeriodTaskSerializerMixin
|
||||||
|
|
||||||
|
|
||||||
|
class LDAPSerializerMixin:
|
||||||
|
def validate(self, attrs):
|
||||||
|
is_periodic = attrs.get(self.periodic_key)
|
||||||
|
crontab = attrs.get(self.crontab_key)
|
||||||
|
interval = attrs.get(self.interval_key)
|
||||||
|
if is_periodic and not any([crontab, interval]):
|
||||||
|
msg = _("Require interval or crontab setting")
|
||||||
|
raise serializers.ValidationError(msg)
|
||||||
|
return super().validate(attrs)
|
||||||
|
|
||||||
|
def post_save(self):
|
||||||
|
keys = [self.periodic_key, self.interval_key, self.crontab_key]
|
||||||
|
kwargs = {k: self.validated_data[k] for k in keys if k in self.validated_data}
|
||||||
|
if not kwargs:
|
||||||
|
return
|
||||||
|
self.import_task_function(**kwargs)
|
|
@ -9,7 +9,7 @@ from common.utils import get_logger
|
||||||
from common.utils.timezone import local_now_display
|
from common.utils.timezone import local_now_display
|
||||||
from ops.celery.decorator import after_app_ready_start
|
from ops.celery.decorator import after_app_ready_start
|
||||||
from ops.celery.utils import (
|
from ops.celery.utils import (
|
||||||
create_or_update_celery_periodic_tasks
|
create_or_update_celery_periodic_tasks, disable_celery_periodic_task
|
||||||
)
|
)
|
||||||
from orgs.models import Organization
|
from orgs.models import Organization
|
||||||
from settings.notifications import LDAPImportMessage
|
from settings.notifications import LDAPImportMessage
|
||||||
|
@ -90,9 +90,12 @@ def import_ldap_ha_user():
|
||||||
|
|
||||||
|
|
||||||
def register_periodic_task(task_name, task_func, interval_key, enabled_key, crontab_key, **kwargs):
|
def register_periodic_task(task_name, task_func, interval_key, enabled_key, crontab_key, **kwargs):
|
||||||
interval = kwargs.get(interval_key, settings.AUTH_LDAP_SYNC_INTERVAL)
|
interval = kwargs.get(interval_key, getattr(settings, interval_key))
|
||||||
enabled = kwargs.get(enabled_key, settings.AUTH_LDAP_SYNC_IS_PERIODIC)
|
enabled = kwargs.get(enabled_key, getattr(settings, enabled_key))
|
||||||
crontab = kwargs.get(crontab_key, settings.AUTH_LDAP_SYNC_CRONTAB)
|
crontab = kwargs.get(crontab_key, getattr(settings, crontab_key))
|
||||||
|
|
||||||
|
if not enabled:
|
||||||
|
disable_celery_periodic_task(task_name)
|
||||||
|
|
||||||
if isinstance(interval, int):
|
if isinstance(interval, int):
|
||||||
interval = interval * 3600
|
interval = interval * 3600
|
||||||
|
|
Loading…
Reference in New Issue