From 39e618c12760995175c456dbb6124921a6b15d06 Mon Sep 17 00:00:00 2001
From: fit2bot <68588906+fit2bot@users.noreply.github.com>
Date: Sun, 19 Mar 2023 23:55:16 +0800
Subject: [PATCH] =?UTF-8?q?perf:=20=E8=B5=84=E4=BA=A7=E6=89=B9=E9=87=8F?=
=?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=B9=B3=E5=8F=B0=20(#10013)?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Co-authored-by: feng <1304903146@qq.com>
---
apps/assets/api/asset/asset.py | 32 ++++-
apps/assets/notifications.py | 25 ++++
apps/locale/ja/LC_MESSAGES/django.mo | 4 +-
apps/locale/ja/LC_MESSAGES/django.po | 207 ++++++++++++++-------------
apps/locale/zh/LC_MESSAGES/django.mo | 4 +-
apps/locale/zh/LC_MESSAGES/django.po | 205 +++++++++++++-------------
6 files changed, 273 insertions(+), 204 deletions(-)
create mode 100644 apps/assets/notifications.py
diff --git a/apps/assets/api/asset/asset.py b/apps/assets/api/asset/asset.py
index c917e09d9..1e887e572 100644
--- a/apps/assets/api/asset/asset.py
+++ b/apps/assets/api/asset/asset.py
@@ -2,15 +2,17 @@
#
import django_filters
from django.db.models import Q
+from django.shortcuts import get_object_or_404
from django.utils.translation import gettext as _
from rest_framework.decorators import action
from rest_framework.response import Response
+from rest_framework.status import HTTP_200_OK
from accounts.tasks import push_accounts_to_assets_task, verify_accounts_connectivity_task
from assets import serializers
from assets.exceptions import NotSupportedTemporarilyError
from assets.filters import IpInFilterBackend, LabelFilterBackend, NodeFilterBackend
-from assets.models import Asset, Gateway
+from assets.models import Asset, Gateway, Platform
from assets.tasks import test_assets_connectivity_manual, update_assets_hardware_info_manual
from common.api import SuggestionMixin
from common.drf.filters import BaseFilterSet
@@ -18,6 +20,7 @@ from common.utils import get_logger, is_uuid
from orgs.mixins import generics
from orgs.mixins.api import OrgBulkModelViewSet
from ..mixin import NodeFilterMixin
+from ...notifications import BulkUpdatePlatformSkipAssetUserMsg
logger = get_logger(__file__)
__all__ = [
@@ -109,6 +112,7 @@ class AssetViewSet(SuggestionMixin, NodeFilterMixin, OrgBulkModelViewSet):
("info", "assets.view_asset"),
)
extra_filter_backends = [LabelFilterBackend, IpInFilterBackend, NodeFilterBackend]
+ skip_assets = []
def get_serializer_class(self):
cls = super().get_serializer_class()
@@ -144,6 +148,30 @@ class AssetViewSet(SuggestionMixin, NodeFilterMixin, OrgBulkModelViewSet):
return Response({'error': error}, status=400)
return super().create(request, *args, **kwargs)
+ def filter_bulk_update_data(self):
+ bulk_data = []
+ for data in self.request.data:
+ pk = data.get('id')
+ platform = data.get('platform')
+ if not platform:
+ bulk_data.append(data)
+ continue
+ asset = get_object_or_404(Asset, pk=pk)
+ platform = get_object_or_404(Platform, **platform)
+ if platform.type == asset.type:
+ bulk_data.append(data)
+ continue
+ self.skip_assets.append(asset)
+ return bulk_data
+ def bulk_update(self, request, *args, **kwargs):
+ bulk_data = self.filter_bulk_update_data()
+ request._full_data = bulk_data
+ response = super().bulk_update(request, *args, **kwargs)
+ if response.status_code == HTTP_200_OK and self.skip_assets:
+ user = request.user
+ BulkUpdatePlatformSkipAssetUserMsg(user, self.skip_assets).publish()
+ return response
+
class AssetsTaskMixin:
def perform_assets_task(self, serializer):
@@ -155,7 +183,7 @@ class AssetsTaskMixin:
else:
asset = assets[0]
if not asset.auto_info['ansible_enabled'] or \
- not asset.auto_info['ping_enabled']:
+ not asset.auto_info['ping_enabled']:
raise NotSupportedTemporarilyError()
task = test_assets_connectivity_manual(assets)
return task
diff --git a/apps/assets/notifications.py b/apps/assets/notifications.py
new file mode 100644
index 000000000..14e84768e
--- /dev/null
+++ b/apps/assets/notifications.py
@@ -0,0 +1,25 @@
+from django.utils.translation import ugettext as _
+
+from notifications.notifications import UserMessage
+
+
+class BulkUpdatePlatformSkipAssetUserMsg(UserMessage):
+ def __init__(self, user, assets):
+ super().__init__(user)
+ self.assets = assets
+
+ def get_html_msg(self) -> dict:
+ subject = _("Batch update platform in assets, skipping assets that do not meet platform type")
+ message = f'
{"".join([f"- {asset}
" for asset in self.assets])}
'
+ return {
+ 'subject': subject,
+ 'message': message
+ }
+
+ @classmethod
+ def gen_test_msg(cls):
+ from users.models import User
+ from assets.models import Asset
+ user = User.objects.first()
+ assets = Asset.objects.all()[:10]
+ return cls(user, assets)
\ No newline at end of file
diff --git a/apps/locale/ja/LC_MESSAGES/django.mo b/apps/locale/ja/LC_MESSAGES/django.mo
index 472b329b3..64397eca5 100644
--- a/apps/locale/ja/LC_MESSAGES/django.mo
+++ b/apps/locale/ja/LC_MESSAGES/django.mo
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:6fa80b59b9b5f95a9cfcad8ec47eacd519bb962d139ab90463795a7b306a0a72
-size 137935
+oid sha256:03f75000def71efcfb08e7c1ee8122f6997b1f82be6cb747b52c33aa8b75a7bf
+size 138164
diff --git a/apps/locale/ja/LC_MESSAGES/django.po b/apps/locale/ja/LC_MESSAGES/django.po
index d4b4ecc20..3abb73d5a 100644
--- a/apps/locale/ja/LC_MESSAGES/django.po
+++ b/apps/locale/ja/LC_MESSAGES/django.po
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-14 17:34+0800\n"
+"POT-Creation-Date: 2023-03-19 23:52+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME \n"
"Language-Team: LANGUAGE \n"
@@ -169,7 +169,7 @@ msgstr "作成のみ"
#: assets/models/cmd_filter.py:36 assets/serializers/domain.py:19
#: assets/serializers/label.py:27 audits/models.py:48
#: authentication/models/connection_token.py:33
-#: perms/models/asset_permission.py:64 perms/serializers/permission.py:35
+#: perms/models/asset_permission.py:64 perms/serializers/permission.py:34
#: terminal/backends/command/models.py:20 terminal/models/session/session.py:32
#: terminal/notifications.py:95 terminal/serializers/command.py:17
#: tickets/models/ticket/apply_asset.py:16 xpack/plugins/cloud/models.py:212
@@ -197,7 +197,7 @@ msgstr "ソース"
#: acls/models/base.py:102 acls/serializers/base.py:57
#: assets/serializers/asset/common.py:131 assets/serializers/gateway.py:28
#: audits/models.py:49 ops/models/base.py:18
-#: perms/models/asset_permission.py:70 perms/serializers/permission.py:40
+#: perms/models/asset_permission.py:70 perms/serializers/permission.py:39
#: terminal/backends/command/models.py:21 terminal/models/session/session.py:34
#: tickets/models/ticket/command_confirm.py:13 xpack/plugins/cloud/models.py:85
msgid "Account"
@@ -447,7 +447,7 @@ msgstr "アカウントの確認"
#: assets/models/group.py:20 assets/models/label.py:18
#: assets/models/platform.py:21 assets/models/platform.py:76
#: assets/serializers/asset/common.py:74 assets/serializers/asset/common.py:151
-#: assets/serializers/platform.py:133
+#: assets/serializers/platform.py:132
#: authentication/serializers/connect_token_secret.py:103 ops/mixin.py:21
#: ops/models/adhoc.py:21 ops/models/celery.py:15 ops/models/celery.py:57
#: ops/models/job.py:91 ops/models/playbook.py:23 ops/serializers/job.py:19
@@ -533,7 +533,7 @@ msgstr "エスクローされたパスワード"
#: accounts/serializers/account/account.py:75 applications/models.py:11
#: assets/models/label.py:21 assets/models/platform.py:77
#: assets/serializers/asset/common.py:127 assets/serializers/cagegory.py:8
-#: assets/serializers/platform.py:94 assets/serializers/platform.py:134
+#: assets/serializers/platform.py:93 assets/serializers/platform.py:133
#: perms/serializers/user_permission.py:26 settings/models.py:35
#: tickets/models/ticket/apply_application.py:13
msgid "Category"
@@ -544,7 +544,7 @@ msgstr "カテゴリ"
#: acls/serializers/command_acl.py:18 applications/models.py:14
#: assets/models/_user.py:50 assets/models/automations/base.py:20
#: assets/models/cmd_filter.py:74 assets/models/platform.py:78
-#: assets/serializers/asset/common.py:128 assets/serializers/platform.py:93
+#: assets/serializers/asset/common.py:128 assets/serializers/platform.py:92
#: audits/serializers.py:48
#: authentication/serializers/connect_token_secret.py:116 ops/models/job.py:102
#: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:31
@@ -562,6 +562,30 @@ msgstr "タイプ"
msgid "Asset not found"
msgstr "資産が存在しません"
+#: accounts/serializers/account/account.py:144 acls/models/base.py:98
+#: acls/models/login_acl.py:13 acls/serializers/base.py:55
+#: acls/serializers/login_acl.py:21 assets/models/cmd_filter.py:24
+#: assets/models/label.py:16 audits/models.py:44 audits/models.py:63
+#: audits/models.py:141 authentication/models/connection_token.py:29
+#: authentication/models/sso_token.py:16
+#: notifications/models/notification.py:12
+#: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58
+#: perms/serializers/permission.py:30 rbac/builtin.py:122
+#: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19
+#: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32
+#: terminal/notifications.py:96 terminal/notifications.py:144
+#: terminal/serializers/command.py:16 tickets/models/comment.py:21
+#: users/const.py:14 users/models/user.py:911 users/models/user.py:942
+#: users/serializers/group.py:18
+msgid "User"
+msgstr "ユーザー"
+
+#: accounts/serializers/account/account.py:145
+#: authentication/templates/authentication/_access_key_modal.html:33
+#: terminal/notifications.py:98 terminal/notifications.py:146
+msgid "Date"
+msgstr "日付"
+
#: accounts/serializers/account/backup.py:31
#: accounts/serializers/automations/base.py:36
#: assets/serializers/automations/base.py:34 ops/mixin.py:23 ops/mixin.py:103
@@ -592,7 +616,7 @@ msgid "Key password"
msgstr "キーパスワード"
#: accounts/serializers/account/base.py:81
-#: assets/serializers/asset/common.py:301
+#: assets/serializers/asset/common.py:303
msgid "Spec info"
msgstr "特別情報"
@@ -733,24 +757,6 @@ msgstr "レビュー担当者"
msgid "Active"
msgstr "アクティブ"
-#: acls/models/base.py:98 acls/models/login_acl.py:13
-#: acls/serializers/base.py:55 acls/serializers/login_acl.py:21
-#: assets/models/cmd_filter.py:24 assets/models/label.py:16 audits/models.py:44
-#: audits/models.py:63 audits/models.py:141
-#: authentication/models/connection_token.py:29
-#: authentication/models/sso_token.py:16
-#: notifications/models/notification.py:12
-#: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58
-#: perms/serializers/permission.py:31 rbac/builtin.py:122
-#: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19
-#: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32
-#: terminal/notifications.py:96 terminal/notifications.py:144
-#: terminal/serializers/command.py:16 tickets/models/comment.py:21
-#: users/const.py:14 users/models/user.py:911 users/models/user.py:942
-#: users/serializers/group.py:18
-msgid "User"
-msgstr "ユーザー"
-
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:65 terminal/const.py:67
#: terminal/models/session/session.py:43 terminal/serializers/command.py:18
@@ -764,7 +770,7 @@ msgid "Regex"
msgstr "正規情報"
#: acls/models/command_acl.py:26 assets/models/cmd_filter.py:79
-#: settings/serializers/basic.py:10 xpack/plugins/license/models.py:29
+#: settings/serializers/basic.py:10 xpack/plugins/license/models.py:30
msgid "Content"
msgstr "コンテンツ"
@@ -883,7 +889,7 @@ msgstr ""
#: authentication/templates/authentication/_msg_oauth_bind.html:12
#: authentication/templates/authentication/_msg_rest_password_success.html:8
#: authentication/templates/authentication/_msg_rest_public_key_success.html:8
-#: settings/serializers/terminal.py:10 terminal/serializers/endpoint.py:61
+#: settings/serializers/terminal.py:10 terminal/serializers/endpoint.py:62
msgid "IP"
msgstr "IP"
@@ -908,7 +914,7 @@ msgstr "アプリケーション"
msgid "Can match application"
msgstr "アプリケーションを一致させることができます"
-#: assets/api/asset/asset.py:143
+#: assets/api/asset/asset.py:147
msgid "Cannot create asset directly, you should create a host or other"
msgstr ""
"資産を直接作成することはできません。ホストまたはその他を作成する必要がありま"
@@ -1060,7 +1066,7 @@ msgid "Basic"
msgstr "基本"
#: assets/const/web.py:61 assets/models/asset/web.py:13
-#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:40
+#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:39
msgid "Script"
msgstr "脚本"
@@ -1196,7 +1202,7 @@ msgstr "アドレス"
#: assets/models/asset/common.py:104 assets/models/platform.py:112
#: authentication/serializers/connect_token_secret.py:108
#: perms/serializers/user_permission.py:24
-#: xpack/plugins/cloud/serializers/account_attrs.py:187
+#: xpack/plugins/cloud/serializers/account_attrs.py:197
msgid "Platform"
msgstr "プラットフォーム"
@@ -1210,6 +1216,10 @@ msgstr "ドメイン"
msgid "Labels"
msgstr "ラベル"
+#: assets/models/asset/common.py:111 assets/serializers/asset/host.py:27
+msgid "Info"
+msgstr "情報"
+
#: assets/models/asset/common.py:283
msgid "Can refresh asset hardware info"
msgstr "資産ハードウェア情報を更新できます"
@@ -1247,27 +1257,27 @@ msgstr "クライアントキー"
msgid "Allow invalid cert"
msgstr "証明書チェックを無視"
-#: assets/models/asset/web.py:9 assets/serializers/platform.py:30
+#: assets/models/asset/web.py:9 assets/serializers/platform.py:29
msgid "Autofill"
msgstr "自動充填"
#: assets/models/asset/web.py:10 assets/serializers/asset/common.py:120
-#: assets/serializers/platform.py:32
+#: assets/serializers/platform.py:31
msgid "Username selector"
msgstr "ユーザー名ピッカー"
#: assets/models/asset/web.py:11 assets/serializers/asset/common.py:121
-#: assets/serializers/platform.py:35
+#: assets/serializers/platform.py:34
msgid "Password selector"
msgstr "パスワードセレクター"
#: assets/models/asset/web.py:12 assets/serializers/asset/common.py:122
-#: assets/serializers/platform.py:38
+#: assets/serializers/platform.py:37
msgid "Submit selector"
msgstr "ボタンセレクターを確認する"
#: assets/models/automations/base.py:17 assets/models/cmd_filter.py:38
-#: assets/serializers/asset/common.py:300 rbac/tree.py:35
+#: assets/serializers/asset/common.py:302 rbac/tree.py:35
msgid "Accounts"
msgstr "アカウント"
@@ -1307,7 +1317,7 @@ msgid "Date verified"
msgstr "確認済みの日付"
#: assets/models/cmd_filter.py:28 perms/models/asset_permission.py:61
-#: perms/serializers/permission.py:33 users/models/group.py:25
+#: perms/serializers/permission.py:32 users/models/group.py:25
#: users/models/user.py:723
msgid "User group"
msgstr "ユーザーグループ"
@@ -1396,7 +1406,7 @@ msgstr "フルバリュー"
msgid "Parent key"
msgstr "親キー"
-#: assets/models/node.py:558 perms/serializers/permission.py:36
+#: assets/models/node.py:558 perms/serializers/permission.py:35
#: tickets/models/ticket/apply_asset.py:14 xpack/plugins/cloud/models.py:96
msgid "Node"
msgstr "ノード"
@@ -1423,45 +1433,45 @@ msgstr "有効化"
msgid "Ansible config"
msgstr "Ansible 構成"
-#: assets/models/platform.py:44 assets/serializers/platform.py:61
+#: assets/models/platform.py:44 assets/serializers/platform.py:60
msgid "Ping enabled"
msgstr "アセット ディスカバリを有効にする"
-#: assets/models/platform.py:45 assets/serializers/platform.py:62
+#: assets/models/platform.py:45 assets/serializers/platform.py:61
msgid "Ping method"
msgstr "資産検出方法"
#: assets/models/platform.py:46 assets/models/platform.py:59
-#: assets/serializers/platform.py:63
+#: assets/serializers/platform.py:62
msgid "Gather facts enabled"
msgstr "資産情報の収集を有効にする"
#: assets/models/platform.py:47 assets/models/platform.py:61
-#: assets/serializers/platform.py:64
+#: assets/serializers/platform.py:63
msgid "Gather facts method"
msgstr "情報収集の方法"
-#: assets/models/platform.py:48 assets/serializers/platform.py:67
+#: assets/models/platform.py:48 assets/serializers/platform.py:66
msgid "Change secret enabled"
msgstr "パスワードの変更が有効"
-#: assets/models/platform.py:50 assets/serializers/platform.py:68
+#: assets/models/platform.py:50 assets/serializers/platform.py:67
msgid "Change secret method"
msgstr "パスワード変更モード"
-#: assets/models/platform.py:52 assets/serializers/platform.py:69
+#: assets/models/platform.py:52 assets/serializers/platform.py:68
msgid "Push account enabled"
msgstr "アカウントのプッシュを有効にする"
-#: assets/models/platform.py:54 assets/serializers/platform.py:70
+#: assets/models/platform.py:54 assets/serializers/platform.py:69
msgid "Push account method"
msgstr "アカウントプッシュ方式"
-#: assets/models/platform.py:56 assets/serializers/platform.py:65
+#: assets/models/platform.py:56 assets/serializers/platform.py:64
msgid "Verify account enabled"
msgstr "アカウントの確認をオンにする"
-#: assets/models/platform.py:58 assets/serializers/platform.py:66
+#: assets/models/platform.py:58 assets/serializers/platform.py:65
msgid "Verify account method"
msgstr "アカウント認証方法"
@@ -1473,23 +1483,23 @@ msgstr "メタ"
msgid "Internal"
msgstr "ビルトイン"
-#: assets/models/platform.py:83 assets/serializers/platform.py:91
+#: assets/models/platform.py:83 assets/serializers/platform.py:90
msgid "Charset"
msgstr "シャーセット"
-#: assets/models/platform.py:85 assets/serializers/platform.py:119
+#: assets/models/platform.py:85 assets/serializers/platform.py:118
msgid "Domain enabled"
msgstr "ドメインを有効にする"
-#: assets/models/platform.py:87 assets/serializers/platform.py:118
+#: assets/models/platform.py:87 assets/serializers/platform.py:117
msgid "Su enabled"
msgstr "アカウントの切り替えを有効にする"
-#: assets/models/platform.py:88 assets/serializers/platform.py:101
+#: assets/models/platform.py:88 assets/serializers/platform.py:100
msgid "Su method"
msgstr "アカウントの切り替え方法"
-#: assets/models/platform.py:90 assets/serializers/platform.py:98
+#: assets/models/platform.py:90 assets/serializers/platform.py:97
msgid "Automation"
msgstr "オートメーション"
@@ -1498,11 +1508,19 @@ msgstr "オートメーション"
msgid "%(value)s is not an even number"
msgstr "%(value)s は偶数ではありません"
+#: assets/notifications.py:12
+msgid ""
+"Batch update platform in assets, skipping assets that do not meet platform "
+"type"
+msgstr ""
+"プラットフォームタイプがスキップされた資産に合致しない、資産内の一括更新プ"
+"ラットフォーム"
+
#: assets/serializers/asset/common.py:119
msgid "Auto fill"
msgstr "自動充填"
-#: assets/serializers/asset/common.py:130 assets/serializers/platform.py:96
+#: assets/serializers/asset/common.py:130 assets/serializers/platform.py:95
#: authentication/serializers/connect_token_secret.py:28
#: authentication/serializers/connect_token_secret.py:66
#: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:99
@@ -1515,19 +1533,19 @@ msgid "Node path"
msgstr "ノードパスです"
#: assets/serializers/asset/common.py:150
-#: assets/serializers/asset/common.py:302
+#: assets/serializers/asset/common.py:304
msgid "Auto info"
msgstr "自動情報"
-#: assets/serializers/asset/common.py:226
+#: assets/serializers/asset/common.py:228
msgid "Platform not exist"
msgstr "プラットフォームが存在しません"
-#: assets/serializers/asset/common.py:261
+#: assets/serializers/asset/common.py:263
msgid "port out of range (1-65535)"
msgstr "ポート番号が範囲外です (1-65535)"
-#: assets/serializers/asset/common.py:268
+#: assets/serializers/asset/common.py:270
msgid "Protocol is required: {}"
msgstr "プロトコルが必要です: {}"
@@ -1588,10 +1606,6 @@ msgstr "システムバージョン"
msgid "OS arch"
msgstr "システムアーキテクチャ"
-#: assets/serializers/asset/host.py:27
-msgid "Info"
-msgstr "情報"
-
#: assets/serializers/cagegory.py:9
msgid "Constraints"
msgstr "制約"
@@ -1620,31 +1634,31 @@ msgstr "含まれない:/"
msgid "The same level node name cannot be the same"
msgstr "同じレベルのノード名を同じにすることはできません。"
-#: assets/serializers/platform.py:26
+#: assets/serializers/platform.py:25
msgid "SFTP enabled"
msgstr "SFTP が有効"
-#: assets/serializers/platform.py:27
+#: assets/serializers/platform.py:26
msgid "SFTP home"
msgstr "SFTP ルート パス"
-#: assets/serializers/platform.py:43
+#: assets/serializers/platform.py:42
msgid "Auth with username"
msgstr "ユーザー名で認証する"
-#: assets/serializers/platform.py:71
+#: assets/serializers/platform.py:70
msgid "Gather accounts enabled"
msgstr "アカウント収集を有効にする"
-#: assets/serializers/platform.py:72
+#: assets/serializers/platform.py:71
msgid "Gather accounts method"
msgstr "アカウントの収集方法"
-#: assets/serializers/platform.py:78
+#: assets/serializers/platform.py:77
msgid "Primary"
msgstr "主要"
-#: assets/serializers/platform.py:120
+#: assets/serializers/platform.py:119
msgid "Default Domain"
msgstr "デフォルト ドメイン"
@@ -2494,15 +2508,15 @@ msgid "Ticket info"
msgstr "作業指示情報"
#: authentication/serializers/connection_token.py:20
-#: perms/models/asset_permission.py:71 perms/serializers/permission.py:37
-#: perms/serializers/permission.py:70
+#: perms/models/asset_permission.py:71 perms/serializers/permission.py:36
+#: perms/serializers/permission.py:69
#: tickets/models/ticket/apply_application.py:28
#: tickets/models/ticket/apply_asset.py:18
msgid "Actions"
msgstr "アクション"
#: authentication/serializers/connection_token.py:41
-#: perms/serializers/permission.py:39 perms/serializers/permission.py:71
+#: perms/serializers/permission.py:38 perms/serializers/permission.py:70
#: users/serializers/user.py:93 users/serializers/user.py:165
msgid "Is expired"
msgstr "期限切れです"
@@ -2522,8 +2536,8 @@ msgstr "メール"
msgid "The {} cannot be empty"
msgstr "{} 空にしてはならない"
-#: authentication/serializers/token.py:79 perms/serializers/permission.py:38
-#: perms/serializers/permission.py:72 users/serializers/user.py:94
+#: authentication/serializers/token.py:79 perms/serializers/permission.py:37
+#: perms/serializers/permission.py:71 users/serializers/user.py:94
#: users/serializers/user.py:163
msgid "Is valid"
msgstr "有効です"
@@ -2544,11 +2558,6 @@ msgstr "APIキー記号APIヘッダーを使用すると、すべてのリクエ
msgid "docs"
msgstr "ドキュメント"
-#: authentication/templates/authentication/_access_key_modal.html:33
-#: terminal/notifications.py:98 terminal/notifications.py:146
-msgid "Date"
-msgstr "日付"
-
#: authentication/templates/authentication/_access_key_modal.html:48
msgid "Show"
msgstr "表示"
@@ -2991,7 +3000,7 @@ msgstr "組織 ID"
msgid "The file content overflowed (The maximum length `{}` bytes)"
msgstr "ファイルの内容がオーバーフローしました (最大長 '{}' バイト)"
-#: common/drf/parsers/base.py:189
+#: common/drf/parsers/base.py:193
msgid "Parse file error: {}"
msgstr "解析ファイルエラー: {}"
@@ -3242,11 +3251,11 @@ msgstr "投稿サイトニュース"
msgid "No account available"
msgstr "利用可能なアカウントがありません"
-#: ops/ansible/inventory.py:189
+#: ops/ansible/inventory.py:196
msgid "Ansible disabled"
msgstr "Ansible 無効"
-#: ops/ansible/inventory.py:205
+#: ops/ansible/inventory.py:212
msgid "Skip hosts below:"
msgstr "次のホストをスキップします: "
@@ -4443,7 +4452,7 @@ msgid "SSO auth key TTL"
msgstr "Token有効期間"
#: settings/serializers/auth/sso.py:17
-#: xpack/plugins/cloud/serializers/account_attrs.py:184
+#: xpack/plugins/cloud/serializers/account_attrs.py:194
msgid "Unit: second"
msgstr "単位: 秒"
@@ -5547,7 +5556,7 @@ msgid "Redis port"
msgstr "Redis ポート"
#: terminal/models/component/endpoint.py:29
-#: terminal/models/component/endpoint.py:98 terminal/serializers/endpoint.py:64
+#: terminal/models/component/endpoint.py:98 terminal/serializers/endpoint.py:66
#: terminal/serializers/storage.py:38 terminal/serializers/storage.py:50
#: terminal/serializers/storage.py:80 terminal/serializers/storage.py:90
#: terminal/serializers/storage.py:98
@@ -5811,15 +5820,15 @@ msgstr "アカウント"
msgid "Timestamp"
msgstr "タイムスタンプ"
-#: terminal/serializers/endpoint.py:14
+#: terminal/serializers/endpoint.py:15
msgid "Oracle port"
msgstr "Oracle ポート"
-#: terminal/serializers/endpoint.py:17
+#: terminal/serializers/endpoint.py:18
msgid "Oracle port range"
msgstr "Oracle がリッスンするポート範囲"
-#: terminal/serializers/endpoint.py:19
+#: terminal/serializers/endpoint.py:20
msgid ""
"Oracle proxy server listen port is dynamic, Each additional Oracle database "
"instance adds a port listener"
@@ -5827,13 +5836,13 @@ msgstr ""
"Oracle プロキシサーバーがリッスンするポートは動的です。追加の Oracle データ"
"ベースインスタンスはポートリスナーを追加します"
-#: terminal/serializers/endpoint.py:35
+#: terminal/serializers/endpoint.py:36
msgid "Visit IP/Host, if empty, use the current request instead"
msgstr ""
"IP/ホストにアクセスします。空の場合は、代わりに現在のリクエストのアドレスを使"
"用します"
-#: terminal/serializers/endpoint.py:58
+#: terminal/serializers/endpoint.py:59
msgid ""
"If asset IP addresses under different endpoints conflict, use asset labels"
msgstr ""
@@ -7320,13 +7329,13 @@ msgstr "ファイルはJSON形式です。"
msgid "IP address invalid `{}`, {}"
msgstr "IPアドレスが無効: '{}', {}"
-#: xpack/plugins/cloud/serializers/account_attrs.py:162
+#: xpack/plugins/cloud/serializers/account_attrs.py:172
msgid ""
"Format for comma-delimited string,Such as: 192.168.1.0/24, "
"10.0.0.0-10.0.0.255"
msgstr "形式はコンマ区切りの文字列です,例:192.168.1.0/24,10.0.0.0-10.0.0.255"
-#: xpack/plugins/cloud/serializers/account_attrs.py:166
+#: xpack/plugins/cloud/serializers/account_attrs.py:176
msgid ""
"The port is used to detect the validity of the IP address. When the "
"synchronization task is executed, only the valid IP address will be "
@@ -7336,19 +7345,19 @@ msgstr ""
"実行されると、有効な IP アドレスのみが同期されます。
ポートが0の場合、す"
"べてのIPアドレスが有効です。"
-#: xpack/plugins/cloud/serializers/account_attrs.py:174
+#: xpack/plugins/cloud/serializers/account_attrs.py:184
msgid "Hostname prefix"
msgstr "ホスト名プレフィックス"
-#: xpack/plugins/cloud/serializers/account_attrs.py:177
+#: xpack/plugins/cloud/serializers/account_attrs.py:187
msgid "IP segment"
msgstr "IP セグメント"
-#: xpack/plugins/cloud/serializers/account_attrs.py:181
+#: xpack/plugins/cloud/serializers/account_attrs.py:191
msgid "Test port"
msgstr "テストポート"
-#: xpack/plugins/cloud/serializers/account_attrs.py:184
+#: xpack/plugins/cloud/serializers/account_attrs.py:194
msgid "Test timeout"
msgstr "テストタイムアウト"
@@ -7430,22 +7439,22 @@ msgstr "ライセンスのインポートに成功"
msgid "License is invalid"
msgstr "ライセンスが無効です"
-#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:135
+#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:138
msgid "License"
msgstr "ライセンス"
-#: xpack/plugins/license/models.py:79
+#: xpack/plugins/license/models.py:80
msgid "Standard edition"
msgstr "標準版"
-#: xpack/plugins/license/models.py:81
+#: xpack/plugins/license/models.py:82
msgid "Enterprise edition"
msgstr "エンタープライズ版"
-#: xpack/plugins/license/models.py:83
+#: xpack/plugins/license/models.py:84
msgid "Ultimate edition"
msgstr "究極のエディション"
-#: xpack/plugins/license/models.py:85
+#: xpack/plugins/license/models.py:86
msgid "Community edition"
msgstr "コミュニティ版"
diff --git a/apps/locale/zh/LC_MESSAGES/django.mo b/apps/locale/zh/LC_MESSAGES/django.mo
index 360ae7c4b..176ff7f89 100644
--- a/apps/locale/zh/LC_MESSAGES/django.mo
+++ b/apps/locale/zh/LC_MESSAGES/django.mo
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:9819889a6d8b2934b06c5b242e3f63f404997f30851919247a405f542e8a03bc
-size 113244
+oid sha256:fffd0032a105eb0c991f4eed7aca4fb344d9e8ab834f7fd2451b164532f198d7
+size 113407
diff --git a/apps/locale/zh/LC_MESSAGES/django.po b/apps/locale/zh/LC_MESSAGES/django.po
index ba0a34c84..500e514c9 100644
--- a/apps/locale/zh/LC_MESSAGES/django.po
+++ b/apps/locale/zh/LC_MESSAGES/django.po
@@ -7,7 +7,7 @@ msgid ""
msgstr ""
"Project-Id-Version: JumpServer 0.3.3\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2023-03-14 17:34+0800\n"
+"POT-Creation-Date: 2023-03-19 23:52+0800\n"
"PO-Revision-Date: 2021-05-20 10:54+0800\n"
"Last-Translator: ibuler \n"
"Language-Team: JumpServer team\n"
@@ -168,7 +168,7 @@ msgstr "仅创建"
#: assets/models/cmd_filter.py:36 assets/serializers/domain.py:19
#: assets/serializers/label.py:27 audits/models.py:48
#: authentication/models/connection_token.py:33
-#: perms/models/asset_permission.py:64 perms/serializers/permission.py:35
+#: perms/models/asset_permission.py:64 perms/serializers/permission.py:34
#: terminal/backends/command/models.py:20 terminal/models/session/session.py:32
#: terminal/notifications.py:95 terminal/serializers/command.py:17
#: tickets/models/ticket/apply_asset.py:16 xpack/plugins/cloud/models.py:212
@@ -196,7 +196,7 @@ msgstr "来源"
#: acls/models/base.py:102 acls/serializers/base.py:57
#: assets/serializers/asset/common.py:131 assets/serializers/gateway.py:28
#: audits/models.py:49 ops/models/base.py:18
-#: perms/models/asset_permission.py:70 perms/serializers/permission.py:40
+#: perms/models/asset_permission.py:70 perms/serializers/permission.py:39
#: terminal/backends/command/models.py:21 terminal/models/session/session.py:34
#: tickets/models/ticket/command_confirm.py:13 xpack/plugins/cloud/models.py:85
msgid "Account"
@@ -446,7 +446,7 @@ msgstr "账号验证"
#: assets/models/group.py:20 assets/models/label.py:18
#: assets/models/platform.py:21 assets/models/platform.py:76
#: assets/serializers/asset/common.py:74 assets/serializers/asset/common.py:151
-#: assets/serializers/platform.py:133
+#: assets/serializers/platform.py:132
#: authentication/serializers/connect_token_secret.py:103 ops/mixin.py:21
#: ops/models/adhoc.py:21 ops/models/celery.py:15 ops/models/celery.py:57
#: ops/models/job.py:91 ops/models/playbook.py:23 ops/serializers/job.py:19
@@ -529,7 +529,7 @@ msgstr "已托管密码"
#: accounts/serializers/account/account.py:75 applications/models.py:11
#: assets/models/label.py:21 assets/models/platform.py:77
#: assets/serializers/asset/common.py:127 assets/serializers/cagegory.py:8
-#: assets/serializers/platform.py:94 assets/serializers/platform.py:134
+#: assets/serializers/platform.py:93 assets/serializers/platform.py:133
#: perms/serializers/user_permission.py:26 settings/models.py:35
#: tickets/models/ticket/apply_application.py:13
msgid "Category"
@@ -540,7 +540,7 @@ msgstr "类别"
#: acls/serializers/command_acl.py:18 applications/models.py:14
#: assets/models/_user.py:50 assets/models/automations/base.py:20
#: assets/models/cmd_filter.py:74 assets/models/platform.py:78
-#: assets/serializers/asset/common.py:128 assets/serializers/platform.py:93
+#: assets/serializers/asset/common.py:128 assets/serializers/platform.py:92
#: audits/serializers.py:48
#: authentication/serializers/connect_token_secret.py:116 ops/models/job.py:102
#: perms/serializers/user_permission.py:27 terminal/models/applet/applet.py:31
@@ -558,6 +558,30 @@ msgstr "类型"
msgid "Asset not found"
msgstr "资产不存在"
+#: accounts/serializers/account/account.py:144 acls/models/base.py:98
+#: acls/models/login_acl.py:13 acls/serializers/base.py:55
+#: acls/serializers/login_acl.py:21 assets/models/cmd_filter.py:24
+#: assets/models/label.py:16 audits/models.py:44 audits/models.py:63
+#: audits/models.py:141 authentication/models/connection_token.py:29
+#: authentication/models/sso_token.py:16
+#: notifications/models/notification.py:12
+#: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58
+#: perms/serializers/permission.py:30 rbac/builtin.py:122
+#: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19
+#: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32
+#: terminal/notifications.py:96 terminal/notifications.py:144
+#: terminal/serializers/command.py:16 tickets/models/comment.py:21
+#: users/const.py:14 users/models/user.py:911 users/models/user.py:942
+#: users/serializers/group.py:18
+msgid "User"
+msgstr "用户"
+
+#: accounts/serializers/account/account.py:145
+#: authentication/templates/authentication/_access_key_modal.html:33
+#: terminal/notifications.py:98 terminal/notifications.py:146
+msgid "Date"
+msgstr "日期"
+
#: accounts/serializers/account/backup.py:31
#: accounts/serializers/automations/base.py:36
#: assets/serializers/automations/base.py:34 ops/mixin.py:23 ops/mixin.py:103
@@ -588,7 +612,7 @@ msgid "Key password"
msgstr "密钥密码"
#: accounts/serializers/account/base.py:81
-#: assets/serializers/asset/common.py:301
+#: assets/serializers/asset/common.py:303
msgid "Spec info"
msgstr "特殊信息"
@@ -729,24 +753,6 @@ msgstr "审批人"
msgid "Active"
msgstr "激活中"
-#: acls/models/base.py:98 acls/models/login_acl.py:13
-#: acls/serializers/base.py:55 acls/serializers/login_acl.py:21
-#: assets/models/cmd_filter.py:24 assets/models/label.py:16 audits/models.py:44
-#: audits/models.py:63 audits/models.py:141
-#: authentication/models/connection_token.py:29
-#: authentication/models/sso_token.py:16
-#: notifications/models/notification.py:12
-#: perms/api/user_permission/mixin.py:55 perms/models/asset_permission.py:58
-#: perms/serializers/permission.py:31 rbac/builtin.py:122
-#: rbac/models/rolebinding.py:49 terminal/backends/command/models.py:19
-#: terminal/models/session/session.py:30 terminal/models/session/sharing.py:32
-#: terminal/notifications.py:96 terminal/notifications.py:144
-#: terminal/serializers/command.py:16 tickets/models/comment.py:21
-#: users/const.py:14 users/models/user.py:911 users/models/user.py:942
-#: users/serializers/group.py:18
-msgid "User"
-msgstr "用户"
-
#: acls/models/command_acl.py:16 assets/models/cmd_filter.py:60
#: ops/serializers/job.py:65 terminal/const.py:67
#: terminal/models/session/session.py:43 terminal/serializers/command.py:18
@@ -760,7 +766,7 @@ msgid "Regex"
msgstr "正则表达式"
#: acls/models/command_acl.py:26 assets/models/cmd_filter.py:79
-#: settings/serializers/basic.py:10 xpack/plugins/license/models.py:29
+#: settings/serializers/basic.py:10 xpack/plugins/license/models.py:30
msgid "Content"
msgstr "内容"
@@ -877,7 +883,7 @@ msgstr ""
#: authentication/templates/authentication/_msg_oauth_bind.html:12
#: authentication/templates/authentication/_msg_rest_password_success.html:8
#: authentication/templates/authentication/_msg_rest_public_key_success.html:8
-#: settings/serializers/terminal.py:10 terminal/serializers/endpoint.py:61
+#: settings/serializers/terminal.py:10 terminal/serializers/endpoint.py:62
msgid "IP"
msgstr "IP"
@@ -902,7 +908,7 @@ msgstr "应用程序"
msgid "Can match application"
msgstr "匹配应用"
-#: assets/api/asset/asset.py:143
+#: assets/api/asset/asset.py:147
msgid "Cannot create asset directly, you should create a host or other"
msgstr "不能直接创建资产, 你应该创建主机或其他资产"
@@ -1052,7 +1058,7 @@ msgid "Basic"
msgstr "基本"
#: assets/const/web.py:61 assets/models/asset/web.py:13
-#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:40
+#: assets/serializers/asset/common.py:123 assets/serializers/platform.py:39
msgid "Script"
msgstr "脚本"
@@ -1188,7 +1194,7 @@ msgstr "地址"
#: assets/models/asset/common.py:104 assets/models/platform.py:112
#: authentication/serializers/connect_token_secret.py:108
#: perms/serializers/user_permission.py:24
-#: xpack/plugins/cloud/serializers/account_attrs.py:187
+#: xpack/plugins/cloud/serializers/account_attrs.py:197
msgid "Platform"
msgstr "系统平台"
@@ -1202,6 +1208,10 @@ msgstr "网域"
msgid "Labels"
msgstr "标签管理"
+#: assets/models/asset/common.py:111 assets/serializers/asset/host.py:27
+msgid "Info"
+msgstr "信息"
+
#: assets/models/asset/common.py:283
msgid "Can refresh asset hardware info"
msgstr "可以更新资产硬件信息"
@@ -1239,27 +1249,27 @@ msgstr "客户端密钥"
msgid "Allow invalid cert"
msgstr "忽略证书校验"
-#: assets/models/asset/web.py:9 assets/serializers/platform.py:30
+#: assets/models/asset/web.py:9 assets/serializers/platform.py:29
msgid "Autofill"
msgstr "自动代填"
#: assets/models/asset/web.py:10 assets/serializers/asset/common.py:120
-#: assets/serializers/platform.py:32
+#: assets/serializers/platform.py:31
msgid "Username selector"
msgstr "用户名选择器"
#: assets/models/asset/web.py:11 assets/serializers/asset/common.py:121
-#: assets/serializers/platform.py:35
+#: assets/serializers/platform.py:34
msgid "Password selector"
msgstr "密码选择器"
#: assets/models/asset/web.py:12 assets/serializers/asset/common.py:122
-#: assets/serializers/platform.py:38
+#: assets/serializers/platform.py:37
msgid "Submit selector"
msgstr "确认按钮选择器"
#: assets/models/automations/base.py:17 assets/models/cmd_filter.py:38
-#: assets/serializers/asset/common.py:300 rbac/tree.py:35
+#: assets/serializers/asset/common.py:302 rbac/tree.py:35
msgid "Accounts"
msgstr "账号管理"
@@ -1299,7 +1309,7 @@ msgid "Date verified"
msgstr "校验日期"
#: assets/models/cmd_filter.py:28 perms/models/asset_permission.py:61
-#: perms/serializers/permission.py:33 users/models/group.py:25
+#: perms/serializers/permission.py:32 users/models/group.py:25
#: users/models/user.py:723
msgid "User group"
msgstr "用户组"
@@ -1388,7 +1398,7 @@ msgstr "全称"
msgid "Parent key"
msgstr "ssh私钥"
-#: assets/models/node.py:558 perms/serializers/permission.py:36
+#: assets/models/node.py:558 perms/serializers/permission.py:35
#: tickets/models/ticket/apply_asset.py:14 xpack/plugins/cloud/models.py:96
msgid "Node"
msgstr "节点"
@@ -1415,45 +1425,45 @@ msgstr "启用"
msgid "Ansible config"
msgstr "Ansible 配置"
-#: assets/models/platform.py:44 assets/serializers/platform.py:61
+#: assets/models/platform.py:44 assets/serializers/platform.py:60
msgid "Ping enabled"
msgstr "启用资产探活"
-#: assets/models/platform.py:45 assets/serializers/platform.py:62
+#: assets/models/platform.py:45 assets/serializers/platform.py:61
msgid "Ping method"
msgstr "资产探活方式"
#: assets/models/platform.py:46 assets/models/platform.py:59
-#: assets/serializers/platform.py:63
+#: assets/serializers/platform.py:62
msgid "Gather facts enabled"
msgstr "启用收集资产信息"
#: assets/models/platform.py:47 assets/models/platform.py:61
-#: assets/serializers/platform.py:64
+#: assets/serializers/platform.py:63
msgid "Gather facts method"
msgstr "收集信息方式"
-#: assets/models/platform.py:48 assets/serializers/platform.py:67
+#: assets/models/platform.py:48 assets/serializers/platform.py:66
msgid "Change secret enabled"
msgstr "启用改密"
-#: assets/models/platform.py:50 assets/serializers/platform.py:68
+#: assets/models/platform.py:50 assets/serializers/platform.py:67
msgid "Change secret method"
msgstr "改密方式"
-#: assets/models/platform.py:52 assets/serializers/platform.py:69
+#: assets/models/platform.py:52 assets/serializers/platform.py:68
msgid "Push account enabled"
msgstr "启用账号推送"
-#: assets/models/platform.py:54 assets/serializers/platform.py:70
+#: assets/models/platform.py:54 assets/serializers/platform.py:69
msgid "Push account method"
msgstr "账号推送方式"
-#: assets/models/platform.py:56 assets/serializers/platform.py:65
+#: assets/models/platform.py:56 assets/serializers/platform.py:64
msgid "Verify account enabled"
msgstr "开启账号验证"
-#: assets/models/platform.py:58 assets/serializers/platform.py:66
+#: assets/models/platform.py:58 assets/serializers/platform.py:65
msgid "Verify account method"
msgstr "账号验证方式"
@@ -1465,23 +1475,23 @@ msgstr "元数据"
msgid "Internal"
msgstr "内置"
-#: assets/models/platform.py:83 assets/serializers/platform.py:91
+#: assets/models/platform.py:83 assets/serializers/platform.py:90
msgid "Charset"
msgstr "编码"
-#: assets/models/platform.py:85 assets/serializers/platform.py:119
+#: assets/models/platform.py:85 assets/serializers/platform.py:118
msgid "Domain enabled"
msgstr "启用网域"
-#: assets/models/platform.py:87 assets/serializers/platform.py:118
+#: assets/models/platform.py:87 assets/serializers/platform.py:117
msgid "Su enabled"
msgstr "启用账号切换"
-#: assets/models/platform.py:88 assets/serializers/platform.py:101
+#: assets/models/platform.py:88 assets/serializers/platform.py:100
msgid "Su method"
msgstr "账号切换方式"
-#: assets/models/platform.py:90 assets/serializers/platform.py:98
+#: assets/models/platform.py:90 assets/serializers/platform.py:97
msgid "Automation"
msgstr "自动化"
@@ -1490,11 +1500,17 @@ msgstr "自动化"
msgid "%(value)s is not an even number"
msgstr "%(value)s is not an even number"
+#: assets/notifications.py:12
+msgid ""
+"Batch update platform in assets, skipping assets that do not meet platform "
+"type"
+msgstr "资产中批量更新平台,不符合平台类型跳过的资产"
+
#: assets/serializers/asset/common.py:119
msgid "Auto fill"
msgstr "自动代填"
-#: assets/serializers/asset/common.py:130 assets/serializers/platform.py:96
+#: assets/serializers/asset/common.py:130 assets/serializers/platform.py:95
#: authentication/serializers/connect_token_secret.py:28
#: authentication/serializers/connect_token_secret.py:66
#: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:99
@@ -1507,19 +1523,19 @@ msgid "Node path"
msgstr "节点路径"
#: assets/serializers/asset/common.py:150
-#: assets/serializers/asset/common.py:302
+#: assets/serializers/asset/common.py:304
msgid "Auto info"
msgstr "自动化信息"
-#: assets/serializers/asset/common.py:226
+#: assets/serializers/asset/common.py:228
msgid "Platform not exist"
msgstr "平台不存在"
-#: assets/serializers/asset/common.py:261
+#: assets/serializers/asset/common.py:263
msgid "port out of range (1-65535)"
msgstr "端口超出范围 (1-65535)"
-#: assets/serializers/asset/common.py:268
+#: assets/serializers/asset/common.py:270
msgid "Protocol is required: {}"
msgstr "协议是必填的: {}"
@@ -1580,10 +1596,6 @@ msgstr "系统版本"
msgid "OS arch"
msgstr "系统架构"
-#: assets/serializers/asset/host.py:27
-msgid "Info"
-msgstr "信息"
-
#: assets/serializers/cagegory.py:9
msgid "Constraints"
msgstr "约束"
@@ -1612,31 +1624,31 @@ msgstr "不能包含: /"
msgid "The same level node name cannot be the same"
msgstr "同级别节点名字不能重复"
-#: assets/serializers/platform.py:26
+#: assets/serializers/platform.py:25
msgid "SFTP enabled"
msgstr "SFTP 已启用"
-#: assets/serializers/platform.py:27
+#: assets/serializers/platform.py:26
msgid "SFTP home"
msgstr "SFTP 根路径"
-#: assets/serializers/platform.py:43
+#: assets/serializers/platform.py:42
msgid "Auth with username"
msgstr "使用用户名认证"
-#: assets/serializers/platform.py:71
+#: assets/serializers/platform.py:70
msgid "Gather accounts enabled"
msgstr "启用账号收集"
-#: assets/serializers/platform.py:72
+#: assets/serializers/platform.py:71
msgid "Gather accounts method"
msgstr "收集账号方式"
-#: assets/serializers/platform.py:78
+#: assets/serializers/platform.py:77
msgid "Primary"
msgstr "主要的"
-#: assets/serializers/platform.py:120
+#: assets/serializers/platform.py:119
msgid "Default Domain"
msgstr "默认网域"
@@ -2472,15 +2484,15 @@ msgid "Ticket info"
msgstr "工单信息"
#: authentication/serializers/connection_token.py:20
-#: perms/models/asset_permission.py:71 perms/serializers/permission.py:37
-#: perms/serializers/permission.py:70
+#: perms/models/asset_permission.py:71 perms/serializers/permission.py:36
+#: perms/serializers/permission.py:69
#: tickets/models/ticket/apply_application.py:28
#: tickets/models/ticket/apply_asset.py:18
msgid "Actions"
msgstr "动作"
#: authentication/serializers/connection_token.py:41
-#: perms/serializers/permission.py:39 perms/serializers/permission.py:71
+#: perms/serializers/permission.py:38 perms/serializers/permission.py:70
#: users/serializers/user.py:93 users/serializers/user.py:165
msgid "Is expired"
msgstr "已过期"
@@ -2500,8 +2512,8 @@ msgstr "邮箱"
msgid "The {} cannot be empty"
msgstr "{} 不能为空"
-#: authentication/serializers/token.py:79 perms/serializers/permission.py:38
-#: perms/serializers/permission.py:72 users/serializers/user.py:94
+#: authentication/serializers/token.py:79 perms/serializers/permission.py:37
+#: perms/serializers/permission.py:71 users/serializers/user.py:94
#: users/serializers/user.py:163
msgid "Is valid"
msgstr "是否有效"
@@ -2522,11 +2534,6 @@ msgstr "使用api key签名请求头,每个请求的头部是不一样的"
msgid "docs"
msgstr "文档"
-#: authentication/templates/authentication/_access_key_modal.html:33
-#: terminal/notifications.py:98 terminal/notifications.py:146
-msgid "Date"
-msgstr "日期"
-
#: authentication/templates/authentication/_access_key_modal.html:48
msgid "Show"
msgstr "显示"
@@ -2961,7 +2968,7 @@ msgstr "组织 ID"
msgid "The file content overflowed (The maximum length `{}` bytes)"
msgstr "文件内容太大 (最大长度 `{}` 字节)"
-#: common/drf/parsers/base.py:189
+#: common/drf/parsers/base.py:193
msgid "Parse file error: {}"
msgstr "解析文件错误: {}"
@@ -3207,11 +3214,11 @@ msgstr "发布站内消息"
msgid "No account available"
msgstr "无可用账号"
-#: ops/ansible/inventory.py:189
+#: ops/ansible/inventory.py:196
msgid "Ansible disabled"
msgstr "Ansible 已禁用"
-#: ops/ansible/inventory.py:205
+#: ops/ansible/inventory.py:212
msgid "Skip hosts below:"
msgstr "跳过以下主机: "
@@ -4404,7 +4411,7 @@ msgid "SSO auth key TTL"
msgstr "令牌有效期"
#: settings/serializers/auth/sso.py:17
-#: xpack/plugins/cloud/serializers/account_attrs.py:184
+#: xpack/plugins/cloud/serializers/account_attrs.py:194
msgid "Unit: second"
msgstr "单位: 秒"
@@ -5475,7 +5482,7 @@ msgid "Redis port"
msgstr "Redis 端口"
#: terminal/models/component/endpoint.py:29
-#: terminal/models/component/endpoint.py:98 terminal/serializers/endpoint.py:64
+#: terminal/models/component/endpoint.py:98 terminal/serializers/endpoint.py:66
#: terminal/serializers/storage.py:38 terminal/serializers/storage.py:50
#: terminal/serializers/storage.py:80 terminal/serializers/storage.py:90
#: terminal/serializers/storage.py:98
@@ -5737,15 +5744,15 @@ msgstr "账号"
msgid "Timestamp"
msgstr "时间戳"
-#: terminal/serializers/endpoint.py:14
+#: terminal/serializers/endpoint.py:15
msgid "Oracle port"
msgstr "Oracle 端口"
-#: terminal/serializers/endpoint.py:17
+#: terminal/serializers/endpoint.py:18
msgid "Oracle port range"
msgstr "Oracle 端口范围"
-#: terminal/serializers/endpoint.py:19
+#: terminal/serializers/endpoint.py:20
msgid ""
"Oracle proxy server listen port is dynamic, Each additional Oracle database "
"instance adds a port listener"
@@ -5753,11 +5760,11 @@ msgstr ""
"Oracle 代理服务器监听端口是动态的,每增加一个 Oracle 数据库实例,就会增加一个"
"端口监听"
-#: terminal/serializers/endpoint.py:35
+#: terminal/serializers/endpoint.py:36
msgid "Visit IP/Host, if empty, use the current request instead"
msgstr "访问IP/Host,如果为空,则使用当前请求的地址代替"
-#: terminal/serializers/endpoint.py:58
+#: terminal/serializers/endpoint.py:59
msgid ""
"If asset IP addresses under different endpoints conflict, use asset labels"
msgstr "如果不同端点下的资产 IP 有冲突,使用资产标签实现"
@@ -7224,13 +7231,13 @@ msgstr "JSON 格式的文件"
msgid "IP address invalid `{}`, {}"
msgstr "IP 地址无效: `{}`, {}"
-#: xpack/plugins/cloud/serializers/account_attrs.py:162
+#: xpack/plugins/cloud/serializers/account_attrs.py:172
msgid ""
"Format for comma-delimited string,Such as: 192.168.1.0/24, "
"10.0.0.0-10.0.0.255"
msgstr "格式为逗号分隔的字符串,如:192.168.1.0/24,10.0.0.0-10.0.0.255"
-#: xpack/plugins/cloud/serializers/account_attrs.py:166
+#: xpack/plugins/cloud/serializers/account_attrs.py:176
msgid ""
"The port is used to detect the validity of the IP address. When the "
"synchronization task is executed, only the valid IP address will be "
@@ -7239,19 +7246,19 @@ msgstr ""
"端口用来检测 IP 地址的有效性,在同步任务执行时,只会同步有效的 IP 地址。
"
"如果端口为 0,则表示所有 IP 地址均有效。"
-#: xpack/plugins/cloud/serializers/account_attrs.py:174
+#: xpack/plugins/cloud/serializers/account_attrs.py:184
msgid "Hostname prefix"
msgstr "主机名前缀"
-#: xpack/plugins/cloud/serializers/account_attrs.py:177
+#: xpack/plugins/cloud/serializers/account_attrs.py:187
msgid "IP segment"
msgstr "IP 网段"
-#: xpack/plugins/cloud/serializers/account_attrs.py:181
+#: xpack/plugins/cloud/serializers/account_attrs.py:191
msgid "Test port"
msgstr "测试端口"
-#: xpack/plugins/cloud/serializers/account_attrs.py:184
+#: xpack/plugins/cloud/serializers/account_attrs.py:194
msgid "Test timeout"
msgstr "测试超时时间"
@@ -7331,23 +7338,23 @@ msgstr "许可证导入成功"
msgid "License is invalid"
msgstr "无效的许可证"
-#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:135
+#: xpack/plugins/license/meta.py:11 xpack/plugins/license/models.py:138
msgid "License"
msgstr "许可证"
-#: xpack/plugins/license/models.py:79
+#: xpack/plugins/license/models.py:80
msgid "Standard edition"
msgstr "标准版"
-#: xpack/plugins/license/models.py:81
+#: xpack/plugins/license/models.py:82
msgid "Enterprise edition"
msgstr "企业版"
-#: xpack/plugins/license/models.py:83
+#: xpack/plugins/license/models.py:84
msgid "Ultimate edition"
msgstr "旗舰版"
-#: xpack/plugins/license/models.py:85
+#: xpack/plugins/license/models.py:86
msgid "Community edition"
msgstr "社区版"