diff --git a/apps/assets/models/base.py b/apps/assets/models/base.py index 282c9b9280f9d9cd06fa5e7403bc4efad840dd49..b7239da758d360692aa0161f69ba622ce1283e1a 100644 --- a/apps/assets/models/base.py +++ b/apps/assets/models/base.py @@ -158,9 +158,11 @@ class AuthMixin: if update_fields: self.save(update_fields=update_fields) - def has_special_auth(self, asset=None): + def has_special_auth(self, asset=None, username=None): from .authbook import AuthBook - queryset = AuthBook.objects.filter(username=self.username) + if username is None: + username = self.username + queryset = AuthBook.objects.filter(username=username) if asset: queryset = queryset.filter(asset=asset) return queryset.exists() diff --git a/apps/assets/models/user.py b/apps/assets/models/user.py index 1dfd79ad29143fae7f890673361d7704964e9a64..5a1f47284f12209813257aef04c1740a876dd141 100644 --- a/apps/assets/models/user.py +++ b/apps/assets/models/user.py @@ -165,6 +165,11 @@ class SystemUser(BaseUser): def is_need_test_asset_connective(self): return self.protocol not in self.application_category_protocols + def has_special_auth(self, asset=None, username=None): + if username is None and self.username_same_with_user: + raise TypeError('System user is dynamic, username should be pass') + return super().has_special_auth(asset=asset, username=username) + @property def can_perm_to_asset(self): return self.protocol not in self.application_category_protocols diff --git a/apps/assets/tasks/push_system_user.py b/apps/assets/tasks/push_system_user.py index 0072a862aa21ccfee83429df23ea8f2002789bfa..0bb9be4076643cdc17af125d84a58bf43d06bed7 100644 --- a/apps/assets/tasks/push_system_user.py +++ b/apps/assets/tasks/push_system_user.py @@ -139,6 +139,7 @@ def get_push_windows_system_user_tasks(system_user, username=None): tasks = [] if not password: + logger.error("Error: no password found") return tasks task = { 'name': 'Add user {}'.format(username), @@ -214,14 +215,15 @@ def push_system_user_util(system_user, assets, task_name, username=None): print(_("Start push system user for platform: [{}]").format(platform)) print(_("Hosts count: {}").format(len(_hosts))) - if not system_user.has_special_auth(): + # 如果没有特殊密码设置,就不需要单独推送某台机器了 + if not system_user.has_special_auth(username=username): logger.debug("System user not has special auth") tasks = get_push_system_user_tasks(system_user, platform, username=username) run_task(tasks, _hosts) continue for _host in _hosts: - system_user.load_asset_special_auth(_host) + system_user.load_asset_special_auth(_host, username=username) tasks = get_push_system_user_tasks(system_user, platform, username=username) run_task(tasks, [_host])