Merge branch 'v3' of github.com:jumpserver/jumpserver into v3

pull/9223/head
ibuler 2022-12-20 16:57:07 +08:00
commit 88355f55bb
6 changed files with 33 additions and 29 deletions

View File

@ -6,7 +6,7 @@ from rest_framework.generics import CreateAPIView, ListAPIView
from orgs.mixins.api import OrgBulkModelViewSet from orgs.mixins.api import OrgBulkModelViewSet
from common.mixins import RecordViewLogMixin from common.mixins import RecordViewLogMixin
from assets.models import Account from assets.models import Account, Asset
from assets.filters import AccountFilterSet from assets.filters import AccountFilterSet
from assets.tasks import verify_accounts_connectivity from assets.tasks import verify_accounts_connectivity
from assets import serializers from assets import serializers
@ -30,10 +30,18 @@ class AccountViewSet(OrgBulkModelViewSet):
'su_from_accounts': 'assets.view_account', 'su_from_accounts': 'assets.view_account',
} }
@action(methods=['get'], detail=True, url_path='su-from-accounts') @action(methods=['get'], detail=False, url_path='su-from-accounts')
def su_from_accounts(self, request, *args, **kwargs): def su_from_accounts(self, request, *args, **kwargs):
account = get_object_or_404(Account, pk=self.kwargs['pk']) account_id = request.query_params.get('account')
accounts = account.get_su_from_accounts() asset_id = request.query_params.get('asset')
if account_id:
account = get_object_or_404(Account, pk=account_id)
accounts = account.get_su_from_accounts()
elif asset_id:
asset = get_object_or_404(Asset, pk=asset_id)
accounts = asset.accounts.all()
else:
accounts = []
serializer = serializers.AccountSerializer(accounts, many=True) serializer = serializers.AccountSerializer(accounts, many=True)
return Response(data=serializer.data) return Response(data=serializer.data)

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:9f0b10566b4d35accd3a8766b14d6903243d93c5d7c55b208d930a189e590f2f oid sha256:eaeedc4823f9b7e236b36a169b5587ef5988d3c3e529d6cbede6bae5e2b57ab8
size 106125 size 106349

View File

@ -3067,19 +3067,19 @@ msgstr "跳过"
#: ops/models/job.py:39 #: ops/models/job.py:39
msgid "Chdir" msgid "Chdir"
msgstr "" msgstr "运行目录"
#: ops/models/job.py:40 #: ops/models/job.py:40
msgid "Timeout (Seconds)" msgid "Timeout (Seconds)"
msgstr "" msgstr "超市时间(秒)"
#: ops/models/job.py:45 #: ops/models/job.py:45
msgid "Runas" msgid "Runas"
msgstr "" msgstr "运行用户"
#: ops/models/job.py:47 #: ops/models/job.py:47
msgid "Runas policy" msgid "Runas policy"
msgstr "" msgstr "用户策略"
#: ops/models/job.py:48 #: ops/models/job.py:48
msgid "Use Parameter Define" msgid "Use Parameter Define"

View File

@ -99,14 +99,11 @@ class JobExecution(JMSOrgBaseModel):
date_finished = models.DateTimeField(null=True, verbose_name=_("Date finished")) date_finished = models.DateTimeField(null=True, verbose_name=_("Date finished"))
@property @property
def count(self): def material(self):
if self.is_finished and not self.summary.get('error', None): if self.job.type == 'adhoc':
return { return "{}:{}".format(self.job.module, self.job.args)
"ok": len(self.summary['ok']), if self.job.type == 'playbook':
"failed": len(self.summary['failures']) + len(self.summary['dark']), return "{}:{}:{}".format(self.org.name, self.job.creator.name, self.job.playbook.name)
"excludes": len(self.summary['excludes']),
"total": self.job.assets.count()
}
@property @property
def assent_result_detail(self): def assent_result_detail(self):
@ -121,7 +118,7 @@ class JobExecution(JMSOrgBaseModel):
"status": "ok", "status": "ok",
"tasks": [], "tasks": [],
} }
if self.summary["excludes"].get(asset.name, None): if self.summary.get("excludes", None) and self.summary["excludes"].get(asset.name, None):
asset_detail.update({"status": "excludes"}) asset_detail.update({"status": "excludes"})
result["detail"].append(asset_detail) result["detail"].append(asset_detail)
break break
@ -160,9 +157,10 @@ class JobExecution(JMSOrgBaseModel):
def get_runner(self): def get_runner(self):
inv = self.job.inventory inv = self.job.inventory
inv.write_to_file(self.inventory_path) inv.write_to_file(self.inventory_path)
self.summary = self.result = {"excludes": {}}
if len(inv.exclude_hosts) > 0: if len(inv.exclude_hosts) > 0:
self.summary['excludes'] = inv.exclude_hosts self.summary.update({"excludes": inv.exclude_hosts})
self.result['excludes'] = inv.exclude_hosts self.result.update({"excludes": inv.exclude_hosts})
self.save() self.save()
if isinstance(self.parameters, str): if isinstance(self.parameters, str):

View File

@ -30,17 +30,14 @@ class JobSerializer(BulkOrgResourceModelSerializer, PeriodTaskSerializerMixin):
class JobExecutionSerializer(BulkOrgResourceModelSerializer): class JobExecutionSerializer(BulkOrgResourceModelSerializer):
creator = ReadableHiddenField(default=serializers.CurrentUserDefault()) creator = ReadableHiddenField(default=serializers.CurrentUserDefault())
job_type = serializers.ReadOnlyField(label=_("Job type")) job_type = serializers.ReadOnlyField(label=_("Job type"))
count = serializers.ReadOnlyField(label=_("Count")) material = serializers.ReadOnlyField(label=_("Material"))
class Meta: class Meta:
model = JobExecution model = JobExecution
read_only_fields = ["id", "task_id", "timedelta", "count", "time_cost", 'is_finished', 'date_start', read_only_fields = ["id", "task_id", "timedelta", "time_cost", 'is_finished', 'date_start',
'date_finished', 'date_finished',
'date_created', 'date_created',
'is_success', 'task_id', 'short_id', 'job_type', 'creator'] 'is_success', 'task_id', 'short_id', 'job_type', 'summary', 'material']
fields = read_only_fields + [ fields = read_only_fields + [
"job", "parameters" "job", "parameters", "creator"
] ]

View File

@ -96,7 +96,8 @@ class UserPermTreeRefreshUtil(_UserPermTreeCacheMixin):
logger.info(f'Need to refresh orgs: {to_refresh_orgs}') logger.info(f'Need to refresh orgs: {to_refresh_orgs}')
return to_refresh_orgs return to_refresh_orgs
def _mark_user_orgs_refresh_finished(self, org_ids): def _mark_user_orgs_refresh_finished(self, orgs):
org_ids = [str(org.id) for org in orgs]
self.client.sadd(self.cache_key_user, *org_ids) self.client.sadd(self.cache_key_user, *org_ids)