mirror of https://github.com/jumpserver/jumpserver
fix(assets): 向资产推送系统用户bug
parent
f6031d6f5d
commit
f7e6c14bc5
|
@ -58,7 +58,8 @@ def on_asset_created_or_update(sender, instance=None, created=False, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=SystemUser, dispatch_uid="jms")
|
@receiver(post_save, sender=SystemUser, dispatch_uid="jms")
|
||||||
def on_system_user_update(sender, instance=None, created=True, **kwargs):
|
@on_transaction_commit
|
||||||
|
def on_system_user_update(instance: SystemUser, created, **kwargs):
|
||||||
"""
|
"""
|
||||||
当系统用户更新时,可能更新了秘钥,用户名等,这时要自动推送系统用户到资产上,
|
当系统用户更新时,可能更新了秘钥,用户名等,这时要自动推送系统用户到资产上,
|
||||||
其实应该当 用户名,密码,秘钥 sudo等更新时再推送,这里偷个懒,
|
其实应该当 用户名,密码,秘钥 sudo等更新时再推送,这里偷个懒,
|
||||||
|
@ -68,26 +69,25 @@ def on_system_user_update(sender, instance=None, created=True, **kwargs):
|
||||||
if instance and not created:
|
if instance and not created:
|
||||||
logger.info("System user update signal recv: {}".format(instance))
|
logger.info("System user update signal recv: {}".format(instance))
|
||||||
assets = instance.assets.all().valid()
|
assets = instance.assets.all().valid()
|
||||||
push_system_user_to_assets.delay(instance, assets)
|
push_system_user_to_assets.delay(instance.id, [_asset.id for _asset in assets])
|
||||||
|
|
||||||
|
|
||||||
@receiver(m2m_changed, sender=SystemUser.assets.through)
|
@receiver(m2m_changed, sender=SystemUser.assets.through)
|
||||||
def on_system_user_assets_change(sender, instance=None, action='', model=None, pk_set=None, **kwargs):
|
def on_system_user_assets_change(instance, action, model, pk_set, **kwargs):
|
||||||
"""
|
"""
|
||||||
当系统用户和资产关系发生变化时,应该重新推送系统用户到新添加的资产中
|
当系统用户和资产关系发生变化时,应该重新推送系统用户到新添加的资产中
|
||||||
"""
|
"""
|
||||||
if action != POST_ADD:
|
if action != POST_ADD:
|
||||||
return
|
return
|
||||||
logger.debug("System user assets change signal recv: {}".format(instance))
|
logger.debug("System user assets change signal recv: {}".format(instance))
|
||||||
queryset = model.objects.filter(pk__in=pk_set)
|
|
||||||
if model == Asset:
|
if model == Asset:
|
||||||
system_users = [instance]
|
system_users_id = [instance.id]
|
||||||
assets = queryset
|
assets_id = pk_set
|
||||||
else:
|
else:
|
||||||
system_users = queryset
|
system_users_id = pk_set
|
||||||
assets = [instance]
|
assets_id = [instance.id]
|
||||||
for system_user in system_users:
|
for system_user_id in system_users_id:
|
||||||
push_system_user_to_assets.delay(system_user, assets)
|
push_system_user_to_assets.delay(system_user_id, assets_id)
|
||||||
|
|
||||||
|
|
||||||
@receiver(m2m_changed, sender=SystemUser.users.through)
|
@receiver(m2m_changed, sender=SystemUser.users.through)
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
from itertools import groupby
|
from itertools import groupby
|
||||||
from celery import shared_task
|
from celery import shared_task
|
||||||
from common.db.utils import get_object_if_need, get_objects_if_need
|
from common.db.utils import get_object_if_need, get_objects_if_need, get_objects
|
||||||
from django.utils.translation import ugettext as _
|
from django.utils.translation import ugettext as _
|
||||||
from django.db.models import Empty
|
from django.db.models import Empty
|
||||||
|
|
||||||
|
@ -240,10 +240,10 @@ def push_system_user_a_asset_manual(system_user, asset, username=None):
|
||||||
|
|
||||||
|
|
||||||
@shared_task(queue="ansible")
|
@shared_task(queue="ansible")
|
||||||
def push_system_user_to_assets(system_user, assets, username=None):
|
def push_system_user_to_assets(system_user_id, assets_id, username=None):
|
||||||
|
system_user = SystemUser.objects.get(id=system_user_id)
|
||||||
|
assets = get_objects(Asset, assets_id)
|
||||||
task_name = _("Push system users to assets: {}").format(system_user.name)
|
task_name = _("Push system users to assets: {}").format(system_user.name)
|
||||||
system_user = get_object_if_need(SystemUser, system_user)
|
|
||||||
assets = get_objects_if_need(Asset, assets)
|
|
||||||
return push_system_user_util(system_user, assets, task_name, username=username)
|
return push_system_user_util(system_user, assets, task_name, username=username)
|
||||||
|
|
||||||
# @shared_task
|
# @shared_task
|
||||||
|
|
|
@ -25,3 +25,16 @@ def get_objects_if_need(model, pks):
|
||||||
logger.error(f'DoesNotExist: <{model.__name__}: {not_found_pks}>')
|
logger.error(f'DoesNotExist: <{model.__name__}: {not_found_pks}>')
|
||||||
return objs
|
return objs
|
||||||
return pks
|
return pks
|
||||||
|
|
||||||
|
|
||||||
|
def get_objects(model, pks):
|
||||||
|
if not pks:
|
||||||
|
return pks
|
||||||
|
|
||||||
|
objs = list(model.objects.filter(id__in=pks))
|
||||||
|
if len(objs) != len(pks):
|
||||||
|
pks = set(pks)
|
||||||
|
exists_pks = {o.id for o in objs}
|
||||||
|
not_found_pks = ','.join(pks - exists_pks)
|
||||||
|
logger.error(f'DoesNotExist: <{model.__name__}: {not_found_pks}>')
|
||||||
|
return objs
|
||||||
|
|
Loading…
Reference in New Issue