From d2d9d3d841e4b783565bea5cc659878e2129f64d Mon Sep 17 00:00:00 2001 From: jiangweidong <1053570670@qq.com> Date: Thu, 6 Mar 2025 16:48:19 +0800 Subject: [PATCH 01/11] fix: Slove the problem that the third-party auth cannot update user name --- apps/users/signal_handlers.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/users/signal_handlers.py b/apps/users/signal_handlers.py index 2f5f34e86..21c6398fd 100644 --- a/apps/users/signal_handlers.py +++ b/apps/users/signal_handlers.py @@ -64,7 +64,7 @@ def user_authenticated_handle(user, created, source, attrs=None, **kwargs): always_update = getattr(settings, 'AUTH_%s_ALWAYS_UPDATE_USER' % source.upper(), False) if not created and always_update: - attr_whitelist = ('user', 'username', 'email', 'phone', 'comment') + attr_whitelist = ('name', 'username', 'email', 'phone', 'comment') logger.debug( "Receive {} user updated signal: {}, " "Update user info: {}," From bc70c480f76944329f8e98b33728ef10d8e725b5 Mon Sep 17 00:00:00 2001 From: wangruidong <940853815@qq.com> Date: Thu, 6 Mar 2025 17:44:19 +0800 Subject: [PATCH 02/11] fix: Integration Application: No Java example in the help docs --- apps/accounts/api/account/application.py | 7 ++++--- apps/accounts/demos/java/{Demo.java => demo.java} | 0 2 files changed, 4 insertions(+), 3 deletions(-) rename apps/accounts/demos/java/{Demo.java => demo.java} (100%) diff --git a/apps/accounts/api/account/application.py b/apps/accounts/api/account/application.py index 54a18572d..a395414b4 100644 --- a/apps/accounts/api/account/application.py +++ b/apps/accounts/api/account/application.py @@ -1,6 +1,7 @@ import os -from django.utils.translation import gettext_lazy as _, get_language + from django.conf import settings +from django.utils.translation import gettext_lazy as _, get_language from rest_framework.decorators import action from rest_framework.response import Response @@ -45,9 +46,9 @@ class IntegrationApplicationViewSet(OrgBulkModelViewSet): 'node': 'js', 'curl': 'sh', } - sdk_language = request.query_params.get('language','python') + sdk_language = request.query_params.get('language', 'python') sdk_path = os.path.join(settings.APPS_DIR, 'accounts', 'demos', sdk_language) - readme_path = os.path.join(sdk_path, f'readme.{get_language()}.md') + readme_path = os.path.join(sdk_path, f'README.{get_language()}.md') demo_path = os.path.join(sdk_path, f'demo.{code_suffix_mapper[sdk_language]}') readme_content = self.read_file(readme_path) diff --git a/apps/accounts/demos/java/Demo.java b/apps/accounts/demos/java/demo.java similarity index 100% rename from apps/accounts/demos/java/Demo.java rename to apps/accounts/demos/java/demo.java From 47029be3da40716aeff127320531cf52e27ef903 Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Thu, 6 Mar 2025 19:11:55 +0800 Subject: [PATCH 03/11] perf: Change secret --- apps/accounts/automations/base/manager.py | 54 ++++++++++++++++--- .../automations/gather_account/manager.py | 5 ++ apps/accounts/risk_handlers.py | 4 ++ .../serializers/automations/change_secret.py | 4 +- apps/i18n/core/en/LC_MESSAGES/django.po | 2 +- apps/i18n/core/ja/LC_MESSAGES/django.po | 4 +- apps/i18n/core/pt_BR/LC_MESSAGES/django.po | 4 +- apps/i18n/core/zh/LC_MESSAGES/django.po | 4 +- apps/i18n/core/zh_Hant/LC_MESSAGES/django.po | 4 +- apps/i18n/lina/en.json | 5 +- apps/i18n/lina/zh.json | 6 ++- 11 files changed, 74 insertions(+), 22 deletions(-) diff --git a/apps/accounts/automations/base/manager.py b/apps/accounts/automations/base/manager.py index bc33f588e..2dd81eea6 100644 --- a/apps/accounts/automations/base/manager.py +++ b/apps/accounts/automations/base/manager.py @@ -1,5 +1,8 @@ +import threading +import time from copy import deepcopy +from celery import current_task from django.conf import settings from django.utils import timezone from django.utils.translation import gettext_lazy as _ @@ -124,7 +127,42 @@ class BaseChangeSecretPushManager(AccountBasePlaybookManager): return inventory_hosts + @staticmethod + def is_running_in_celery(): + return getattr(current_task, 'request', None) is not None + + def wait_and_save_recorder(self, recorder, max_retries=10, retry_interval=2): + recorder_model = type(recorder) + + for attempt in range(max_retries): + exist = recorder_model.objects.filter( + account_id=recorder.account_id, execution=self.execution + ).exists() + + if exist: + print(f"Data inserted, updating recorder status after {attempt + 1}th query") + recorder.save(update_fields=['status', 'date_finished']) + return True + + print(f"Data not ready, waiting {retry_interval} second(s) and retrying ({attempt + 1}/{max_retries})") + time.sleep(retry_interval) + + print("\033[31m The data is still not inserted, giving up saving the recorder status.\033[0m") + return False + + def save_record(self, recorder): + if self.is_running_in_celery(): + self.wait_and_save_recorder(recorder) + else: + thread = threading.Thread( + target=self.wait_and_save_recorder, + args=(recorder,), + daemon=True + ) + thread.start() + def on_host_success(self, host, result): + recorder = self.name_recorder_mapper.get(host) if not recorder: return @@ -141,10 +179,6 @@ class BaseChangeSecretPushManager(AccountBasePlaybookManager): account.date_change_secret = timezone.now() account.change_secret_status = ChangeSecretRecordStatusChoice.success - with safe_db_connection(): - recorder.save(update_fields=['status', 'date_finished']) - account.save(update_fields=['secret', 'date_updated', 'date_change_secret', 'change_secret_status']) - self.summary['ok_accounts'] += 1 self.result['ok_accounts'].append( { @@ -154,6 +188,10 @@ class BaseChangeSecretPushManager(AccountBasePlaybookManager): ) super().on_host_success(host, result) + with safe_db_connection(): + account.save(update_fields=['secret', 'date_updated', 'date_change_secret', 'change_secret_status']) + self.save_record(recorder) + def on_host_error(self, host, error, result): recorder = self.name_recorder_mapper.get(host) if not recorder: @@ -161,10 +199,7 @@ class BaseChangeSecretPushManager(AccountBasePlaybookManager): recorder.status = ChangeSecretRecordStatusChoice.failed.value recorder.date_finished = timezone.now() recorder.error = error - try: - recorder.save() - except Exception as e: - print(f"\033[31m Save {host} recorder error: {e} \033[0m\n") + self.summary['fail_accounts'] += 1 self.result['fail_accounts'].append( { @@ -173,3 +208,6 @@ class BaseChangeSecretPushManager(AccountBasePlaybookManager): } ) super().on_host_error(host, error, result) + + with safe_db_connection(): + self.save_record(recorder) diff --git a/apps/accounts/automations/gather_account/manager.py b/apps/accounts/automations/gather_account/manager.py index ad44de481..f23fabbb2 100644 --- a/apps/accounts/automations/gather_account/manager.py +++ b/apps/accounts/automations/gather_account/manager.py @@ -378,6 +378,11 @@ class GatherAccountsManager(AccountBasePlaybookManager): continue gathered_accounts = GatheredAccount.objects.filter(asset=asset) GatheredAccount.sync_accounts(gathered_accounts, self.is_sync_account) + GatheredAccount.objects.filter( + asset=asset, username__in=ori_users, present=False + ).update( + present=True + ) # 因为有 bulk create, bulk update, 所以这里需要 sleep 一下,等待数据同步 time.sleep(0.5) diff --git a/apps/accounts/risk_handlers.py b/apps/accounts/risk_handlers.py index a12e94815..9429fbf18 100644 --- a/apps/accounts/risk_handlers.py +++ b/apps/accounts/risk_handlers.py @@ -171,4 +171,8 @@ class RiskHandler: } execution.save() execution.start() + + GatheredAccount.objects.filter(asset=self.asset, username=self.username).update( + present=True + ) return execution.summary diff --git a/apps/accounts/serializers/automations/change_secret.py b/apps/accounts/serializers/automations/change_secret.py index 0c27d9f9c..e80246c38 100644 --- a/apps/accounts/serializers/automations/change_secret.py +++ b/apps/accounts/serializers/automations/change_secret.py @@ -86,8 +86,8 @@ class ChangeSecretAutomationSerializer(AuthValidateMixin, BaseAutomationSerializ msg = _("* Please enter the correct password length") raise serializers.ValidationError(msg) - if length < 6 or length > 30: - msg = _('* Password length range 6-30 bits') + if length < 8 or length > 36: + msg = _('* Password length range 8-36 bits') raise serializers.ValidationError(msg) return password_rules diff --git a/apps/i18n/core/en/LC_MESSAGES/django.po b/apps/i18n/core/en/LC_MESSAGES/django.po index 4db94b51b..354bec483 100644 --- a/apps/i18n/core/en/LC_MESSAGES/django.po +++ b/apps/i18n/core/en/LC_MESSAGES/django.po @@ -1395,7 +1395,7 @@ msgid "* Please enter the correct password length" msgstr "" #: accounts/serializers/automations/change_secret.py:90 -msgid "* Password length range 6-30 bits" +msgid "* Password length range 8-36 bits" msgstr "" #: accounts/serializers/automations/change_secret.py:112 diff --git a/apps/i18n/core/ja/LC_MESSAGES/django.po b/apps/i18n/core/ja/LC_MESSAGES/django.po index d3d4f122e..f9a8d8fb1 100644 --- a/apps/i18n/core/ja/LC_MESSAGES/django.po +++ b/apps/i18n/core/ja/LC_MESSAGES/django.po @@ -1441,8 +1441,8 @@ msgid "* Please enter the correct password length" msgstr "* 正しいパスワードの長さを入力してください" #: accounts/serializers/automations/change_secret.py:90 -msgid "* Password length range 6-30 bits" -msgstr "* パスワードの長さ範囲は6-30文字です" +msgid "* Password length range 8-36 bits" +msgstr "* パスワードの長さ範囲は8-36文字です" #: accounts/serializers/automations/change_secret.py:112 #: accounts/serializers/automations/change_secret.py:147 diff --git a/apps/i18n/core/pt_BR/LC_MESSAGES/django.po b/apps/i18n/core/pt_BR/LC_MESSAGES/django.po index 2861a160e..0a2aa4ca4 100644 --- a/apps/i18n/core/pt_BR/LC_MESSAGES/django.po +++ b/apps/i18n/core/pt_BR/LC_MESSAGES/django.po @@ -1454,8 +1454,8 @@ msgid "* Please enter the correct password length" msgstr "* Por favor, insira um comprimento de senha correto" #: accounts/serializers/automations/change_secret.py:90 -msgid "* Password length range 6-30 bits" -msgstr "* O comprimento da senha deve estar entre 6 e 30 caracteres" +msgid "* Password length range 8-36 bits" +msgstr "* O comprimento da senha deve estar entre 8 e 36 caracteres" #: accounts/serializers/automations/change_secret.py:112 #: accounts/serializers/automations/change_secret.py:147 diff --git a/apps/i18n/core/zh/LC_MESSAGES/django.po b/apps/i18n/core/zh/LC_MESSAGES/django.po index e1384efa9..6e0415185 100644 --- a/apps/i18n/core/zh/LC_MESSAGES/django.po +++ b/apps/i18n/core/zh/LC_MESSAGES/django.po @@ -1414,8 +1414,8 @@ msgid "* Please enter the correct password length" msgstr "* 请输入正确的密码长度" #: accounts/serializers/automations/change_secret.py:90 -msgid "* Password length range 6-30 bits" -msgstr "* 密码长度范围 6-30 位" +msgid "* Password length range 8-36 bits" +msgstr "* 密码长度范围 8-36 位" #: accounts/serializers/automations/change_secret.py:112 #: accounts/serializers/automations/change_secret.py:147 diff --git a/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po b/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po index 110aea830..f455b8750 100644 --- a/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po +++ b/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po @@ -1416,8 +1416,8 @@ msgid "* Please enter the correct password length" msgstr "* 請輸入正確的密碼長度" #: accounts/serializers/automations/change_secret.py:90 -msgid "* Password length range 6-30 bits" -msgstr "* 密碼長度範圍 6-30 位" +msgid "* Password length range 8-36 bits" +msgstr "* 密碼長度範圍 8-36 位" #: accounts/serializers/automations/change_secret.py:112 #: accounts/serializers/automations/change_secret.py:147 diff --git a/apps/i18n/lina/en.json b/apps/i18n/lina/en.json index b7c08a811..1ab7c94a5 100644 --- a/apps/i18n/lina/en.json +++ b/apps/i18n/lina/en.json @@ -476,6 +476,7 @@ "DisableSuccessMsg": "Successfully disabled", "DiscoverAccountTask": "Account discovery task | Account discovery tasks", "DiscoverAccounts": "Discover accounts", + "DiscoverAccountDetail": "Discover account details", "DiscoverAccountsHelpText": "Collect account information on assets. the collected account information can be imported into the system for centralized management.", "DiscoveredAccountList": "Discovered accounts", "DisplayName": "Name", @@ -1506,5 +1507,7 @@ "removeWarningMsg": "Are you sure you want to remove", "setVariable": "Set variable", "IgnoreAlert": "Ignore alert", - "DeleteGatherAccountTitle": "Delete gather account" + "DeleteGatherAccountTitle": "Delete gather account", + "DeleteRemoteAccount": "Delete remote account", + "AddAccountAfterChangingPassword": "Add account after changing password" } \ No newline at end of file diff --git a/apps/i18n/lina/zh.json b/apps/i18n/lina/zh.json index 67439fc3c..ceb10623c 100644 --- a/apps/i18n/lina/zh.json +++ b/apps/i18n/lina/zh.json @@ -473,6 +473,7 @@ "DisableSuccessMsg": "禁用成功", "DiscoverAccountTask": "账号发现任务", "DiscoverAccounts": "帐号发现", + "DiscoverAccountDetail": "帐号发现详情", "DiscoverAccountsHelpText": "采集资产的账务信息,可将采集到的账务信息导入系统进行集中管理。", "DiscoveredAccountList": "发现账号", "DisplayName": "名称", @@ -1505,6 +1506,7 @@ "removeWarningMsg": "你确定要移除", "setVariable": "设置参数", "IgnoreAlert": "忽略警报", - "DeleteGatherAccountTitle": "删除发现的账号" - + "DeleteGatherAccountTitle": "删除发现的账号", + "DeleteRemoteAccount": "删除远端账号", + "AddAccountAfterChangingPassword": "修改密码后添加账号" } \ No newline at end of file From e8c581b08adf9e6ced3cf1810dff3966b68c7f1b Mon Sep 17 00:00:00 2001 From: wangruidong <940853815@qq.com> Date: Fri, 7 Mar 2025 14:44:16 +0800 Subject: [PATCH 04/11] fix: Integrations Application: Failed to filter accounts by selecting multiple attributes when creating or editing --- apps/accounts/models/account.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/apps/accounts/models/account.py b/apps/accounts/models/account.py index 5e90aee98..ab007d8cd 100644 --- a/apps/accounts/models/account.py +++ b/apps/accounts/models/account.py @@ -3,6 +3,7 @@ from django.utils import timezone from django.utils.translation import gettext_lazy as _ from simple_history.models import HistoricalRecords +from assets.models import Asset from assets.models.base import AbsConnectivity from common.utils import lazyproperty, get_logger from labels.mixins import LabeledMixin @@ -59,7 +60,24 @@ class AccountHistoricalRecords(HistoricalRecords): return super().create_history_model(model, inherited) -class Account(AbsConnectivity, LabeledMixin, BaseAccount): +class JSONFilterMixin: + @staticmethod + def get_json_filter_attr_q(name, value, match): + if name == "asset": + if match == "m2m_all": + asset_id = ( + Asset.objects.filter(id__in=value) + .annotate(count=models.Count("id")) + .filter(count=len(value)) + .values_list("id", flat=True) + ) + else: + asset_id = Asset.objects.filter(id__in=value).values_list("id", flat=True) + return models.Q(asset_id__in=asset_id) + return None + + +class Account(AbsConnectivity, LabeledMixin, BaseAccount, JSONFilterMixin): asset = models.ForeignKey( 'assets.Asset', related_name='accounts', on_delete=models.CASCADE, verbose_name=_('Asset') From 763e67bd1d5008549c80f10c7fa7fa6a1767f2b1 Mon Sep 17 00:00:00 2001 From: fit2bot <68588906+fit2bot@users.noreply.github.com> Date: Fri, 7 Mar 2025 16:25:28 +0800 Subject: [PATCH 05/11] perf: Integrate authentication to update user attribute logic (#14979) --- apps/authentication/backends/oidc/backends.py | 3 +- apps/users/signal_handlers.py | 34 ++++--------------- 2 files changed, 8 insertions(+), 29 deletions(-) diff --git a/apps/authentication/backends/oidc/backends.py b/apps/authentication/backends/oidc/backends.py index 82a1391ce..ddee19731 100644 --- a/apps/authentication/backends/oidc/backends.py +++ b/apps/authentication/backends/oidc/backends.py @@ -61,8 +61,7 @@ class UserMixin: logger.debug(log_prompt.format("user: {}|created: {}".format(user, created))) logger.debug(log_prompt.format("Send signal => openid create or update user")) openid_create_or_update_user.send( - sender=self.__class__, request=request, user=user, - created=created, attrs=user_attrs, + sender=self.__class__, user=user, created=created, attrs=user_attrs, ) return user, created diff --git a/apps/users/signal_handlers.py b/apps/users/signal_handlers.py index 21c6398fd..24ac42263 100644 --- a/apps/users/signal_handlers.py +++ b/apps/users/signal_handlers.py @@ -50,6 +50,7 @@ def user_authenticated_handle(user, created, source, attrs=None, **kwargs): return if created: + logger.debug(f'Receive user created signal: {user}, Set user source is: {source}') user.source = source user.save() @@ -129,19 +130,19 @@ def on_user_create(sender, user=None, **kwargs): @receiver(cas_user_authenticated) def on_cas_user_authenticated(sender, user, created, **kwargs): - source = user.Source.cas.value + source = User.Source.cas.value user_authenticated_handle(user, created, source) @receiver(saml2_create_or_update_user) def on_saml2_create_or_update_user(sender, user, created, attrs, **kwargs): - source = user.Source.saml2.value + source = User.Source.saml2.value user_authenticated_handle(user, created, source, attrs, **kwargs) @receiver(oauth2_create_or_update_user) def on_oauth2_create_or_update_user(sender, user, created, attrs, **kwargs): - source = user.Source.oauth2.value + source = User.Source.oauth2.value user_authenticated_handle(user, created, source, attrs, **kwargs) @@ -153,35 +154,14 @@ def radius_create_user(sender, user, **kwargs): @receiver(openid_create_or_update_user) -def on_openid_create_or_update_user(sender, request, user, created, attrs, **kwargs): - if not check_only_allow_exist_user_auth(created): - return - +def on_openid_create_or_update_user(sender, user, created, attrs, **kwargs): if created: - logger.debug( - "Receive OpenID user created signal: {}, " - "Set user source is: {}".format(user, User.Source.openid.value) - ) - user.source = User.Source.openid.value - user.save() org_ids = bind_user_to_org_role(user) group_names = attrs.get('groups') bind_user_to_group(org_ids, group_names, user) - name = attrs.get('name') - username = attrs.get('username') - email = attrs.get('email') - - if not created and settings.AUTH_OPENID_ALWAYS_UPDATE_USER: - logger.debug( - "Receive OpenID user updated signal: {}, " - "Update user info: {}" - "".format(user, "name: {}|username: {}|email: {}".format(name, username, email)) - ) - user.name = name - user.username = username - user.email = email - user.save() + source = User.Source.openid.value + user_authenticated_handle(user, created, source, attrs, **kwargs) @receiver(populate_user) From 405344de7401452d67bfebfec18043a6442f242a Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Fri, 7 Mar 2025 16:51:31 +0800 Subject: [PATCH 06/11] perf: Automation --- .../accounts/api/automations/change_secret.py | 5 +- .../automations/change_secret_dashboard.py | 2 +- .../api/automations/gather_account.py | 1 + apps/accounts/api/automations/push_account.py | 5 +- .../automations/backup_account/handlers.py | 3 +- apps/accounts/automations/base/manager.py | 5 +- .../automations/push_account/manager.py | 4 +- .../models/automations/change_secret.py | 9 +- apps/assets/serializers/automations/base.py | 1 + apps/audits/api.py | 3 +- apps/i18n/core/en/LC_MESSAGES/django.po | 224 +++++++++-------- apps/i18n/core/ja/LC_MESSAGES/django.po | 230 ++++++++++-------- apps/i18n/core/pt_BR/LC_MESSAGES/django.po | 230 ++++++++++-------- apps/i18n/core/zh/LC_MESSAGES/django.po | 230 ++++++++++-------- apps/i18n/core/zh_Hant/LC_MESSAGES/django.po | 230 ++++++++++-------- apps/i18n/lina/en.json | 6 +- apps/i18n/lina/zh.json | 6 +- 17 files changed, 647 insertions(+), 547 deletions(-) diff --git a/apps/accounts/api/automations/change_secret.py b/apps/accounts/api/automations/change_secret.py index 8aa2d3f94..ab1707f8d 100644 --- a/apps/accounts/api/automations/change_secret.py +++ b/apps/accounts/api/automations/change_secret.py @@ -84,10 +84,7 @@ class ChangeSecretRecordViewSet(mixins.ListModelMixin, OrgGenericViewSet): return failed_records def get_queryset(self): - qs = ChangeSecretRecord.get_valid_records() - return qs.filter( - execution__automation__type=self.tp - ) + return ChangeSecretRecord.get_valid_records() @action(methods=['post'], detail=False, url_path='execute') def execute(self, request, *args, **kwargs): diff --git a/apps/accounts/api/automations/change_secret_dashboard.py b/apps/accounts/api/automations/change_secret_dashboard.py index 0903fefc2..953dfce25 100644 --- a/apps/accounts/api/automations/change_secret_dashboard.py +++ b/apps/accounts/api/automations/change_secret_dashboard.py @@ -155,7 +155,7 @@ class ChangeSecretDashboardApi(APIView): for task in tasks: _id = task.get('id') name = task.get('name') - tp = task.kwargs.get('tp') + tp = task.get('kwargs', {}).get('tp') if name == self.task_name and tp == self.tp: execution_ids.append(_id) diff --git a/apps/accounts/api/automations/gather_account.py b/apps/accounts/api/automations/gather_account.py index 1201d1c5e..9440a1559 100644 --- a/apps/accounts/api/automations/gather_account.py +++ b/apps/accounts/api/automations/gather_account.py @@ -95,6 +95,7 @@ class GatheredAccountViewSet(OrgBulkModelViewSet): updated_instances.update(status=new_status) if new_status == "confirmed": GatheredAccount.sync_accounts(updated_instances) + updated_instances.update(present=True) return Response(status=status.HTTP_200_OK) diff --git a/apps/accounts/api/automations/push_account.py b/apps/accounts/api/automations/push_account.py index e09873af5..13e89719d 100644 --- a/apps/accounts/api/automations/push_account.py +++ b/apps/accounts/api/automations/push_account.py @@ -52,10 +52,7 @@ class PushAccountRecordViewSet(mixins.ListModelMixin, OrgGenericViewSet): } def get_queryset(self): - qs = PushSecretRecord.get_valid_records() - return qs.filter( - execution__automation__type=self.tp - ) + return PushSecretRecord.get_valid_records() class PushAccountAssetsListApi(AutomationAssetsListApi): diff --git a/apps/accounts/automations/backup_account/handlers.py b/apps/accounts/automations/backup_account/handlers.py index b10cc0fc4..1f1f01cc4 100644 --- a/apps/accounts/automations/backup_account/handlers.py +++ b/apps/accounts/automations/backup_account/handlers.py @@ -174,8 +174,9 @@ class AccountBackupHandler: if not files: return recipients = User.objects.filter(id__in=list(recipients)) + msg = _("Start sending backup emails") print( - f'\033[32m>>> {_("Start sending backup emails")}\033[0m' + f'\033[32m>>> {msg}\033[0m' '' ) name = self.name diff --git a/apps/accounts/automations/base/manager.py b/apps/accounts/automations/base/manager.py index 2dd81eea6..9c0130d52 100644 --- a/apps/accounts/automations/base/manager.py +++ b/apps/accounts/automations/base/manager.py @@ -122,7 +122,10 @@ class BaseChangeSecretPushManager(AccountBasePlaybookManager): for account in accounts: h = deepcopy(host) h['name'] += '(' + account.username + ')' # To distinguish different accounts - h = self.gen_account_inventory(account, asset, h, path_dir) + try: + h = self.gen_account_inventory(account, asset, h, path_dir) + except Exception as e: + h['error'] = str(e) inventory_hosts.append(h) return inventory_hosts diff --git a/apps/accounts/automations/push_account/manager.py b/apps/accounts/automations/push_account/manager.py index 448f6afb7..391f55ee3 100644 --- a/apps/accounts/automations/push_account/manager.py +++ b/apps/accounts/automations/push_account/manager.py @@ -25,9 +25,11 @@ class PushAccountManager(BaseChangeSecretPushManager): return account.secret def gen_account_inventory(self, account, asset, h, path_dir): - self.get_or_create_record(asset, account, h['name']) secret = self.get_secret(account) secret_type = account.secret_type + if not secret: + raise ValueError(_('Secret cannot be empty')) + self.get_or_create_record(asset, account, h['name']) new_secret, private_key_path = self.handle_ssh_secret(secret_type, secret, path_dir) h = self.gen_inventory(h, account, new_secret, private_key_path, asset) return h diff --git a/apps/accounts/models/automations/change_secret.py b/apps/accounts/models/automations/change_secret.py index 0c22d2088..e8a5da9c7 100644 --- a/apps/accounts/models/automations/change_secret.py +++ b/apps/accounts/models/automations/change_secret.py @@ -7,6 +7,7 @@ from accounts.const import ( ) from common.db import fields from common.db.models import JMSBaseModel +from orgs.utils import get_current_org from .base import AccountBaseAutomation, ChangeSecretMixin __all__ = ['ChangeSecretAutomation', 'ChangeSecretRecord', 'BaseSecretRecord'] @@ -57,9 +58,15 @@ class BaseSecretRecord(JMSBaseModel): @classmethod def get_valid_records(cls): + org = get_current_org() + if org is None or org.is_root(): + kwargs = {} + else: + kwargs = {'execution__org_id': org.id} + return cls.objects.exclude( Q(execution__isnull=True) | Q(asset__isnull=True) | Q(account__isnull=True) - ) + ).filter(**kwargs) class ChangeSecretRecord(BaseSecretRecord): diff --git a/apps/assets/serializers/automations/base.py b/apps/assets/serializers/automations/base.py index ce42f39dd..ba534aa2c 100644 --- a/apps/assets/serializers/automations/base.py +++ b/apps/assets/serializers/automations/base.py @@ -43,6 +43,7 @@ class AutomationExecutionSerializer(serializers.ModelSerializer): snapshot = serializers.SerializerMethodField(label=_('Automation snapshot')) trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode")) status = LabeledChoiceField(choices=Status.choices, read_only=True, label=_('Status')) + automation = ObjectRelatedField(read_only=True, attrs=('id', 'name')) class Meta: model = AutomationExecution diff --git a/apps/audits/api.py b/apps/audits/api.py index 64ae15429..67836b635 100644 --- a/apps/audits/api.py +++ b/apps/audits/api.py @@ -25,7 +25,6 @@ from common.storage.ftp_file import FTPFileStorageHandler from common.utils import is_uuid, get_logger, lazyproperty from ops.const import Types from ops.models import Job -from ops.serializers.job import JobSerializer from orgs.mixins.api import OrgReadonlyModelViewSet, OrgModelViewSet from orgs.models import Organization from orgs.utils import current_org, tmp_to_root_org @@ -168,7 +167,7 @@ class UserLoginLogViewSet(UserLoginCommonMixin, OrgReadonlyModelViewSet): def get_queryset(self): queryset = super().get_queryset() - if current_org.is_root(): + if current_org.is_root() or not settings.XPACK_ENABLED: return queryset users = self.get_org_member_usernames() queryset = queryset.filter(username__in=users) diff --git a/apps/i18n/core/en/LC_MESSAGES/django.po b/apps/i18n/core/en/LC_MESSAGES/django.po index 354bec483..d96c7bec0 100644 --- a/apps/i18n/core/en/LC_MESSAGES/django.po +++ b/apps/i18n/core/en/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-28 18:37+0800\n" +"POT-Creation-Date: 2025-03-07 15:03+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -24,7 +24,7 @@ msgstr "" msgid "Account already exists" msgstr "" -#: accounts/api/account/application.py:77 +#: accounts/api/account/application.py:78 #: authentication/api/connection_token.py:449 msgid "Account not found" msgstr "" @@ -48,8 +48,8 @@ msgstr "" #: accounts/automations/backup_account/handlers.py:168 #: accounts/automations/backup_account/manager.py:26 #: accounts/automations/change_secret/manager.py:95 -#: accounts/automations/push_account/manager.py:59 -#: assets/models/automations/base.py:142 ops/serializers/job.py:71 +#: accounts/automations/push_account/manager.py:61 +#: assets/models/automations/base.py:145 ops/serializers/job.py:71 #: ops/serializers/job.py:95 #: settings/templates/ldap/_msg_import_ldap_user.html:7 #: terminal/serializers/session.py:49 @@ -60,23 +60,27 @@ msgstr "" msgid "Backup file creation completed" msgstr "" -#: accounts/automations/backup_account/handlers.py:203 +#: accounts/automations/backup_account/handlers.py:177 +msgid "Start sending backup emails" +msgstr "" + +#: accounts/automations/backup_account/handlers.py:204 msgid "Encrypting files using encryption password" msgstr "" -#: accounts/automations/backup_account/handlers.py:213 +#: accounts/automations/backup_account/handlers.py:214 msgid "The backup file will be sent to" msgstr "" -#: accounts/automations/backup_account/handlers.py:236 +#: accounts/automations/backup_account/handlers.py:237 msgid "The backup task has no assigned sftp server" msgstr "" -#: accounts/automations/backup_account/handlers.py:257 +#: accounts/automations/backup_account/handlers.py:258 msgid "The backup task has no assigned recipient" msgstr "" -#: accounts/automations/backup_account/handlers.py:280 +#: accounts/automations/backup_account/handlers.py:281 msgid "Plan start" msgstr "" @@ -86,11 +90,11 @@ msgstr "" #: accounts/automations/backup_account/manager.py:24 #: accounts/automations/change_secret/manager.py:93 -#: accounts/automations/push_account/manager.py:57 +#: accounts/automations/push_account/manager.py:59 msgid "Plan execution end" msgstr "" -#: accounts/automations/base/manager.py:106 +#: accounts/automations/base/manager.py:109 msgid "No pending accounts found" msgstr "" @@ -99,6 +103,10 @@ msgstr "" msgid "Success: %s, Failed: %s, Total: %s" msgstr "" +#: accounts/automations/push_account/manager.py:31 +msgid "Secret cannot be empty" +msgstr "" + #: accounts/automations/verify_gateway_account/manager.py:18 msgid ">>> Start executing the task to test gateway account connectivity" msgstr "" @@ -423,13 +431,13 @@ msgstr "" #: accounts/serializers/automations/gather_account.py:47 #: accounts/templates/accounts/asset_account_change_info.html:7 #: accounts/templates/accounts/change_secret_failed_info.html:11 -#: accounts/templates/accounts/change_secret_report.html:70 -#: accounts/templates/accounts/change_secret_report.html:102 -#: accounts/templates/accounts/check_account_report.html:78 +#: accounts/templates/accounts/change_secret_report.html:72 +#: accounts/templates/accounts/change_secret_report.html:104 +#: accounts/templates/accounts/check_account_report.html:79 #: accounts/templates/accounts/gather_account_report.html:71 #: accounts/templates/accounts/gather_account_report.html:103 -#: accounts/templates/accounts/push_account_report.html:70 -#: accounts/templates/accounts/push_account_report.html:102 +#: accounts/templates/accounts/push_account_report.html:72 +#: accounts/templates/accounts/push_account_report.html:104 #: acls/serializers/base.py:130 assets/models/asset/common.py:102 #: assets/models/asset/common.py:366 assets/models/cmd_filter.py:36 #: audits/models.py:59 audits/models.py:312 audits/serializers.py:228 @@ -492,7 +500,7 @@ msgstr "" #: accounts/models/account.py:85 #: accounts/models/automations/check_account.py:67 -#: accounts/serializers/account/service.py:10 +#: accounts/serializers/account/service.py:11 #: accounts/serializers/automations/change_secret.py:115 #: accounts/serializers/automations/change_secret.py:146 #: accounts/templates/accounts/change_secret_failed_info.html:12 @@ -536,7 +544,7 @@ msgstr "" #: accounts/models/application.py:16 #: accounts/models/automations/check_account.py:119 accounts/models/base.py:63 -#: accounts/serializers/account/service.py:26 +#: accounts/serializers/account/service.py:27 #: accounts/serializers/account/virtual.py:20 acls/models/base.py:35 #: acls/models/base.py:96 acls/models/command_acl.py:21 #: acls/serializers/base.py:35 assets/models/asset/common.py:100 @@ -704,7 +712,7 @@ msgstr "" msgid "Check connection after change" msgstr "" -#: accounts/models/automations/change_secret.py:16 +#: accounts/models/automations/change_secret.py:17 #: accounts/models/automations/check_account.py:19 #: accounts/models/automations/gather_account.py:92 #: accounts/serializers/automations/change_secret.py:59 @@ -713,22 +721,22 @@ msgstr "" msgid "Recipient" msgstr "Recipients" -#: accounts/models/automations/change_secret.py:23 +#: accounts/models/automations/change_secret.py:24 msgid "Change secret automation" msgstr "" -#: accounts/models/automations/change_secret.py:46 -#: assets/models/automations/base.py:141 ops/models/base.py:56 +#: accounts/models/automations/change_secret.py:47 +#: assets/models/automations/base.py:144 ops/models/base.py:56 #: ops/models/celery.py:90 ops/models/job.py:240 #: terminal/models/applet/host.py:142 msgid "Date finished" msgstr "" -#: accounts/models/automations/change_secret.py:48 +#: accounts/models/automations/change_secret.py:49 #: accounts/models/automations/check_account.py:75 #: accounts/models/automations/gather_account.py:25 #: accounts/serializers/automations/check_account.py:39 -#: assets/models/automations/base.py:133 +#: assets/models/automations/base.py:136 #: assets/serializers/automations/base.py:45 audits/models.py:209 #: audits/serializers.py:78 ops/models/base.py:49 ops/models/job.py:231 #: terminal/models/applet/applet.py:331 terminal/models/applet/host.py:140 @@ -742,7 +750,7 @@ msgstr "" msgid "Status" msgstr "" -#: accounts/models/automations/change_secret.py:50 +#: accounts/models/automations/change_secret.py:51 #: accounts/serializers/account/account.py:276 #: accounts/templates/accounts/change_secret_failed_info.html:13 #: assets/const/automation.py:9 @@ -753,19 +761,19 @@ msgstr "" msgid "Error" msgstr "" -#: accounts/models/automations/change_secret.py:66 +#: accounts/models/automations/change_secret.py:73 msgid "Old secret" msgstr "" -#: accounts/models/automations/change_secret.py:67 +#: accounts/models/automations/change_secret.py:74 msgid "New secret" msgstr "" -#: accounts/models/automations/change_secret.py:68 +#: accounts/models/automations/change_secret.py:75 msgid "Ignore fail" msgstr "" -#: accounts/models/automations/change_secret.py:71 +#: accounts/models/automations/change_secret.py:78 msgid "Change secret record" msgstr "" @@ -819,8 +827,8 @@ msgid "Long time no change" msgstr "" #: accounts/models/automations/check_account.py:52 -#: accounts/templates/accounts/check_account_report.html:69 -#: accounts/templates/accounts/check_account_report.html:89 +#: accounts/templates/accounts/check_account_report.html:70 +#: accounts/templates/accounts/check_account_report.html:90 msgid "Weak password" msgstr "" @@ -847,13 +855,13 @@ msgstr "" #: accounts/models/automations/check_account.py:64 #: accounts/models/automations/gather_account.py:17 accounts/models/base.py:64 #: accounts/serializers/account/virtual.py:21 -#: accounts/templates/accounts/change_secret_report.html:71 -#: accounts/templates/accounts/change_secret_report.html:103 -#: accounts/templates/accounts/check_account_report.html:79 +#: accounts/templates/accounts/change_secret_report.html:73 +#: accounts/templates/accounts/change_secret_report.html:105 +#: accounts/templates/accounts/check_account_report.html:80 #: accounts/templates/accounts/gather_account_report.html:72 #: accounts/templates/accounts/gather_account_report.html:104 -#: accounts/templates/accounts/push_account_report.html:71 -#: accounts/templates/accounts/push_account_report.html:103 +#: accounts/templates/accounts/push_account_report.html:73 +#: accounts/templates/accounts/push_account_report.html:105 #: acls/serializers/base.py:19 acls/serializers/base.py:50 audits/models.py:189 #: authentication/forms.py:21 authentication/forms.py:23 #: authentication/models/temp_token.py:9 @@ -1260,12 +1268,12 @@ msgid "" "accounts, use the format username@domain." msgstr "" -#: accounts/serializers/account/service.py:12 +#: accounts/serializers/account/service.py:13 #: authentication/serializers/token.py:22 msgid "Access IP" msgstr "" -#: accounts/serializers/account/service.py:25 +#: accounts/serializers/account/service.py:26 #: accounts/serializers/account/virtual.py:19 assets/models/cmd_filter.py:40 #: assets/models/cmd_filter.py:88 common/db/models.py:36 ops/models/adhoc.py:25 #: ops/models/job.py:163 ops/models/playbook.py:31 rbac/models/role.py:37 @@ -1280,9 +1288,9 @@ msgstr "" msgid "Comment" msgstr "Description" -#: accounts/serializers/account/service.py:27 -#: accounts/templates/accounts/backup_account_report.html:38 -#: accounts/templates/accounts/check_account_report.html:38 +#: accounts/serializers/account/service.py:28 +#: accounts/templates/accounts/backup_account_report.html:39 +#: accounts/templates/accounts/check_account_report.html:39 #: assets/serializers/asset/common.py:151 msgid "Accounts amount" msgstr "" @@ -1367,7 +1375,7 @@ msgid "Name already exists" msgstr "" #: accounts/serializers/automations/base.py:31 -#: assets/models/automations/base.py:144 +#: assets/models/automations/base.py:147 #: assets/serializers/automations/base.py:43 msgid "Automation snapshot" msgstr "" @@ -1405,7 +1413,7 @@ msgid "Is success" msgstr "Is success" #: accounts/serializers/automations/change_secret.py:119 -#: assets/models/automations/base.py:160 +#: assets/models/automations/base.py:163 msgid "Automation task execution" msgstr "" @@ -1554,28 +1562,28 @@ msgstr "" msgid "Deleted account" msgstr "" -#: accounts/templates/accounts/backup_account_report.html:13 +#: accounts/templates/accounts/backup_account_report.html:14 msgid "" "The following is a summary of account backup tasks, please review and handle " "them" msgstr "" -#: accounts/templates/accounts/backup_account_report.html:22 +#: accounts/templates/accounts/backup_account_report.html:23 #: accounts/templates/accounts/change_secret_failed_info.html:3 -#: accounts/templates/accounts/change_secret_report.html:22 -#: accounts/templates/accounts/check_account_report.html:22 +#: accounts/templates/accounts/change_secret_report.html:24 +#: accounts/templates/accounts/check_account_report.html:23 #: accounts/templates/accounts/gather_account_report.html:23 -#: accounts/templates/accounts/push_account_report.html:22 +#: accounts/templates/accounts/push_account_report.html:24 #: terminal/serializers/task.py:10 msgid "Task name" msgstr "" -#: accounts/templates/accounts/backup_account_report.html:26 -#: accounts/templates/accounts/change_secret_report.html:26 -#: accounts/templates/accounts/check_account_report.html:26 +#: accounts/templates/accounts/backup_account_report.html:27 +#: accounts/templates/accounts/change_secret_report.html:28 +#: accounts/templates/accounts/check_account_report.html:27 #: accounts/templates/accounts/gather_account_report.html:27 -#: accounts/templates/accounts/push_account_report.html:26 -#: assets/models/automations/base.py:139 audits/models.py:66 +#: accounts/templates/accounts/push_account_report.html:28 +#: assets/models/automations/base.py:142 audits/models.py:66 #: ops/models/base.py:55 ops/models/celery.py:89 ops/models/job.py:239 #: ops/templates/ops/celery_task_log.html:101 #: perms/models/asset_permission.py:78 settings/serializers/feature.py:27 @@ -1586,26 +1594,26 @@ msgstr "" msgid "Date start" msgstr "" -#: accounts/templates/accounts/backup_account_report.html:30 -#: accounts/templates/accounts/change_secret_report.html:30 -#: accounts/templates/accounts/check_account_report.html:30 +#: accounts/templates/accounts/backup_account_report.html:31 +#: accounts/templates/accounts/change_secret_report.html:32 +#: accounts/templates/accounts/check_account_report.html:31 #: accounts/templates/accounts/gather_account_report.html:31 -#: accounts/templates/accounts/push_account_report.html:30 +#: accounts/templates/accounts/push_account_report.html:32 #: settings/serializers/feature.py:28 #: settings/templates/ldap/_msg_import_ldap_user.html:6 #: terminal/models/session/session.py:48 msgid "Date end" msgstr "" -#: accounts/templates/accounts/backup_account_report.html:34 -#: accounts/templates/accounts/change_secret_report.html:34 -#: accounts/templates/accounts/check_account_report.html:34 +#: accounts/templates/accounts/backup_account_report.html:35 +#: accounts/templates/accounts/change_secret_report.html:36 +#: accounts/templates/accounts/check_account_report.html:35 #: accounts/templates/accounts/gather_account_report.html:35 -#: accounts/templates/accounts/push_account_report.html:34 +#: accounts/templates/accounts/push_account_report.html:36 msgid "Time using" msgstr "" -#: accounts/templates/accounts/backup_account_report.html:42 +#: accounts/templates/accounts/backup_account_report.html:43 msgid "Type count" msgstr "" @@ -1623,93 +1631,93 @@ msgid "" "or pushing the account. Please check and handle it in time." msgstr "" -#: accounts/templates/accounts/change_secret_report.html:13 +#: accounts/templates/accounts/change_secret_report.html:15 msgid "" "The following is a summary of account change secret tasks, please read and " "process" msgstr "" -#: accounts/templates/accounts/change_secret_report.html:38 +#: accounts/templates/accounts/change_secret_report.html:40 #: accounts/templates/accounts/gather_account_report.html:39 -#: accounts/templates/accounts/push_account_report.html:38 +#: accounts/templates/accounts/push_account_report.html:40 #: assets/serializers/domain.py:24 assets/serializers/platform.py:182 #: orgs/serializers.py:13 perms/serializers/permission.py:50 msgid "Assets amount" msgstr "" -#: accounts/templates/accounts/change_secret_report.html:42 -#: accounts/templates/accounts/check_account_report.html:50 +#: accounts/templates/accounts/change_secret_report.html:44 +#: accounts/templates/accounts/check_account_report.html:51 #: accounts/templates/accounts/gather_account_report.html:43 -#: accounts/templates/accounts/push_account_report.html:42 +#: accounts/templates/accounts/push_account_report.html:44 msgid "Asset success count" msgstr "" -#: accounts/templates/accounts/change_secret_report.html:46 -#: accounts/templates/accounts/check_account_report.html:54 +#: accounts/templates/accounts/change_secret_report.html:48 +#: accounts/templates/accounts/check_account_report.html:55 #: accounts/templates/accounts/gather_account_report.html:47 -#: accounts/templates/accounts/push_account_report.html:46 +#: accounts/templates/accounts/push_account_report.html:48 msgid "Asset failed count" msgstr "" -#: accounts/templates/accounts/change_secret_report.html:50 -#: accounts/templates/accounts/check_account_report.html:58 +#: accounts/templates/accounts/change_secret_report.html:52 +#: accounts/templates/accounts/check_account_report.html:59 #: accounts/templates/accounts/gather_account_report.html:51 -#: accounts/templates/accounts/push_account_report.html:50 +#: accounts/templates/accounts/push_account_report.html:52 msgid "Asset not support count" msgstr "" -#: accounts/templates/accounts/change_secret_report.html:61 -#: accounts/templates/accounts/push_account_report.html:61 +#: accounts/templates/accounts/change_secret_report.html:63 +#: accounts/templates/accounts/push_account_report.html:63 msgid "Success accounts" msgstr "" -#: accounts/templates/accounts/change_secret_report.html:69 -#: accounts/templates/accounts/change_secret_report.html:101 -#: accounts/templates/accounts/check_account_report.html:77 +#: accounts/templates/accounts/change_secret_report.html:71 +#: accounts/templates/accounts/change_secret_report.html:103 +#: accounts/templates/accounts/check_account_report.html:78 #: accounts/templates/accounts/gather_account_report.html:70 #: accounts/templates/accounts/gather_account_report.html:102 -#: accounts/templates/accounts/push_account_report.html:69 -#: accounts/templates/accounts/push_account_report.html:101 +#: accounts/templates/accounts/push_account_report.html:71 +#: accounts/templates/accounts/push_account_report.html:103 #: audits/handler.py:128 msgid "No" msgstr "" -#: accounts/templates/accounts/change_secret_report.html:85 -#: accounts/templates/accounts/change_secret_report.html:117 +#: accounts/templates/accounts/change_secret_report.html:87 +#: accounts/templates/accounts/change_secret_report.html:119 #: accounts/templates/accounts/gather_account_report.html:86 #: accounts/templates/accounts/gather_account_report.html:118 -#: accounts/templates/accounts/push_account_report.html:85 -#: accounts/templates/accounts/push_account_report.html:117 +#: accounts/templates/accounts/push_account_report.html:87 +#: accounts/templates/accounts/push_account_report.html:119 msgid "No new accounts found" msgstr "" -#: accounts/templates/accounts/change_secret_report.html:92 -#: accounts/templates/accounts/push_account_report.html:92 +#: accounts/templates/accounts/change_secret_report.html:94 +#: accounts/templates/accounts/push_account_report.html:94 msgid "Failed accounts" msgstr "" -#: accounts/templates/accounts/check_account_report.html:13 +#: accounts/templates/accounts/check_account_report.html:14 #: accounts/templates/accounts/gather_account_report.html:14 msgid "" "The following is a summary of the account check tasks. Please review and " "handle them" msgstr "" -#: accounts/templates/accounts/check_account_report.html:42 +#: accounts/templates/accounts/check_account_report.html:43 msgid "Ok count" msgstr "" -#: accounts/templates/accounts/check_account_report.html:46 +#: accounts/templates/accounts/check_account_report.html:47 msgid "No password count" msgstr "" -#: accounts/templates/accounts/check_account_report.html:80 -#: assets/models/automations/base.py:153 ops/models/base.py:51 +#: accounts/templates/accounts/check_account_report.html:81 +#: assets/models/automations/base.py:156 ops/models/base.py:51 #: ops/models/job.py:235 xpack/plugins/cloud/models.py:225 msgid "Result" msgstr "" -#: accounts/templates/accounts/check_account_report.html:95 +#: accounts/templates/accounts/check_account_report.html:96 msgid "No weak password" msgstr "" @@ -1721,7 +1729,7 @@ msgstr "" msgid "Lost accounts" msgstr "" -#: accounts/templates/accounts/push_account_report.html:13 +#: accounts/templates/accounts/push_account_report.html:15 msgid "" "The following is a summary of account push tasks, please read and process" msgstr "" @@ -2022,28 +2030,28 @@ msgstr "" msgid "App Assets" msgstr "Assets" -#: assets/automations/base/manager.py:332 +#: assets/automations/base/manager.py:347 msgid " - Platform {} ansible disabled" msgstr "" -#: assets/automations/base/manager.py:514 +#: assets/automations/base/manager.py:530 msgid ">>> Task preparation phase" msgstr "" -#: assets/automations/base/manager.py:518 +#: assets/automations/base/manager.py:534 #, python-brace-format msgid ">>> Executing tasks in batches, total {runner_count}" msgstr "" -#: assets/automations/base/manager.py:523 +#: assets/automations/base/manager.py:539 msgid ">>> Start executing tasks" msgstr "" -#: assets/automations/base/manager.py:525 +#: assets/automations/base/manager.py:541 msgid ">>> No tasks need to be executed" msgstr "" -#: assets/automations/base/manager.py:529 +#: assets/automations/base/manager.py:545 #, python-brace-format msgid ">>> Begin executing batch {index} of tasks" msgstr "" @@ -2468,27 +2476,31 @@ msgstr "" msgid "Parameters" msgstr "" -#: assets/models/automations/base.py:41 assets/models/automations/base.py:128 +#: assets/models/automations/base.py:31 +msgid "Last execution date" +msgstr "" + +#: assets/models/automations/base.py:44 assets/models/automations/base.py:131 msgid "Automation task" msgstr "" -#: assets/models/automations/base.py:119 +#: assets/models/automations/base.py:122 msgid "Asset automation task" msgstr "" -#: assets/models/automations/base.py:136 assets/models/cmd_filter.py:41 +#: assets/models/automations/base.py:139 assets/models/cmd_filter.py:41 #: common/db/models.py:34 ops/models/base.py:54 ops/models/job.py:238 #: users/models/user/__init__.py:322 msgid "Date created" msgstr "" -#: assets/models/automations/base.py:150 +#: assets/models/automations/base.py:153 #: assets/serializers/automations/base.py:44 xpack/plugins/cloud/models.py:242 #: xpack/plugins/cloud/serializers/task.py:249 msgid "Trigger mode" msgstr "" -#: assets/models/automations/base.py:152 audits/serializers.py:39 +#: assets/models/automations/base.py:155 audits/serializers.py:39 #: ops/models/base.py:52 ops/models/job.py:236 #: xpack/plugins/cloud/manager.py:103 msgid "Summary" @@ -6874,7 +6886,7 @@ msgid "User first login update profile done redirect to it" msgstr "" #: settings/serializers/basic.py:22 -msgid "Global organization" +msgid "Global org display" msgstr "" #: settings/serializers/basic.py:23 diff --git a/apps/i18n/core/ja/LC_MESSAGES/django.po b/apps/i18n/core/ja/LC_MESSAGES/django.po index f9a8d8fb1..6a81a5ddd 100644 --- a/apps/i18n/core/ja/LC_MESSAGES/django.po +++ b/apps/i18n/core/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: 2025-02-28 18:37+0800\n" +"POT-Creation-Date: 2025-03-07 15:03+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -24,7 +24,7 @@ msgstr "" msgid "Account already exists" msgstr "アカウントはすでに存在しています" -#: accounts/api/account/application.py:77 +#: accounts/api/account/application.py:78 #: authentication/api/connection_token.py:449 msgid "Account not found" msgstr "アカウントが見つかりません" @@ -48,8 +48,8 @@ msgstr "資産関連のバックアップ情報ファイルを生成" #: accounts/automations/backup_account/handlers.py:168 #: accounts/automations/backup_account/manager.py:26 #: accounts/automations/change_secret/manager.py:95 -#: accounts/automations/push_account/manager.py:59 -#: assets/models/automations/base.py:142 ops/serializers/job.py:71 +#: accounts/automations/push_account/manager.py:61 +#: assets/models/automations/base.py:145 ops/serializers/job.py:71 #: ops/serializers/job.py:95 #: settings/templates/ldap/_msg_import_ldap_user.html:7 #: terminal/serializers/session.py:49 @@ -60,23 +60,27 @@ msgstr "時を過ごす" msgid "Backup file creation completed" msgstr "バックアップファイルの作成が完了しました" -#: accounts/automations/backup_account/handlers.py:203 +#: accounts/automations/backup_account/handlers.py:177 +msgid "Start sending backup emails" +msgstr "バックアップメールの送信を開始する" + +#: accounts/automations/backup_account/handlers.py:204 msgid "Encrypting files using encryption password" msgstr "暗号化パスワードを使用してファイルを暗号化中" -#: accounts/automations/backup_account/handlers.py:213 +#: accounts/automations/backup_account/handlers.py:214 msgid "The backup file will be sent to" msgstr "バックアップファイルは送信されます" -#: accounts/automations/backup_account/handlers.py:236 +#: accounts/automations/backup_account/handlers.py:237 msgid "The backup task has no assigned sftp server" msgstr "このバックアップタスクはsftpサーバーに割り当てられていません" -#: accounts/automations/backup_account/handlers.py:257 +#: accounts/automations/backup_account/handlers.py:258 msgid "The backup task has no assigned recipient" msgstr "バックアップタスクは受取人を指定していません" -#: accounts/automations/backup_account/handlers.py:280 +#: accounts/automations/backup_account/handlers.py:281 msgid "Plan start" msgstr "計画開始" @@ -86,11 +90,11 @@ msgstr "アカウントのバックアップ計画を実行中です" #: accounts/automations/backup_account/manager.py:24 #: accounts/automations/change_secret/manager.py:93 -#: accounts/automations/push_account/manager.py:57 +#: accounts/automations/push_account/manager.py:59 msgid "Plan execution end" msgstr "計画実行終了" -#: accounts/automations/base/manager.py:106 +#: accounts/automations/base/manager.py:109 msgid "No pending accounts found" msgstr "処理待ちのアカウントが見つかりません" @@ -99,6 +103,12 @@ msgstr "処理待ちのアカウントが見つかりません" msgid "Success: %s, Failed: %s, Total: %s" msgstr "成功: %s、失敗: %s、合計: %s" +#: accounts/automations/push_account/manager.py:31 +#, fuzzy +#| msgid "The {} cannot be empty" +msgid "Secret cannot be empty" +msgstr "{} 空にしてはならない" + #: accounts/automations/verify_gateway_account/manager.py:18 msgid ">>> Start executing the task to test gateway account connectivity" msgstr ">>> ゲートウェイ接続のテストタスクを開始する" @@ -425,13 +435,13 @@ msgstr "ユーザー %s がパスワードを閲覧/導き出しました" #: accounts/serializers/automations/gather_account.py:47 #: accounts/templates/accounts/asset_account_change_info.html:7 #: accounts/templates/accounts/change_secret_failed_info.html:11 -#: accounts/templates/accounts/change_secret_report.html:70 -#: accounts/templates/accounts/change_secret_report.html:102 -#: accounts/templates/accounts/check_account_report.html:78 +#: accounts/templates/accounts/change_secret_report.html:72 +#: accounts/templates/accounts/change_secret_report.html:104 +#: accounts/templates/accounts/check_account_report.html:79 #: accounts/templates/accounts/gather_account_report.html:71 #: accounts/templates/accounts/gather_account_report.html:103 -#: accounts/templates/accounts/push_account_report.html:70 -#: accounts/templates/accounts/push_account_report.html:102 +#: accounts/templates/accounts/push_account_report.html:72 +#: accounts/templates/accounts/push_account_report.html:104 #: acls/serializers/base.py:130 assets/models/asset/common.py:102 #: assets/models/asset/common.py:366 assets/models/cmd_filter.py:36 #: audits/models.py:59 audits/models.py:312 audits/serializers.py:228 @@ -509,7 +519,7 @@ msgstr "変更状態" #: accounts/models/account.py:85 #: accounts/models/automations/check_account.py:67 -#: accounts/serializers/account/service.py:10 +#: accounts/serializers/account/service.py:11 #: accounts/serializers/automations/change_secret.py:115 #: accounts/serializers/automations/change_secret.py:146 #: accounts/templates/accounts/change_secret_failed_info.html:12 @@ -553,7 +563,7 @@ msgstr "アカウントを削除できます" #: accounts/models/application.py:16 #: accounts/models/automations/check_account.py:119 accounts/models/base.py:63 -#: accounts/serializers/account/service.py:26 +#: accounts/serializers/account/service.py:27 #: accounts/serializers/account/virtual.py:20 acls/models/base.py:35 #: acls/models/base.py:96 acls/models/command_acl.py:21 #: acls/serializers/base.py:35 assets/models/asset/common.py:100 @@ -721,7 +731,7 @@ msgstr "SSHキープッシュ方式" msgid "Check connection after change" msgstr "変更後に接続を確認" -#: accounts/models/automations/change_secret.py:16 +#: accounts/models/automations/change_secret.py:17 #: accounts/models/automations/check_account.py:19 #: accounts/models/automations/gather_account.py:92 #: accounts/serializers/automations/change_secret.py:59 @@ -730,22 +740,22 @@ msgstr "変更後に接続を確認" msgid "Recipient" msgstr "受信者" -#: accounts/models/automations/change_secret.py:23 +#: accounts/models/automations/change_secret.py:24 msgid "Change secret automation" msgstr "自動暗号化" -#: accounts/models/automations/change_secret.py:46 -#: assets/models/automations/base.py:141 ops/models/base.py:56 +#: accounts/models/automations/change_secret.py:47 +#: assets/models/automations/base.py:144 ops/models/base.py:56 #: ops/models/celery.py:90 ops/models/job.py:240 #: terminal/models/applet/host.py:142 msgid "Date finished" msgstr "終了日" -#: accounts/models/automations/change_secret.py:48 +#: accounts/models/automations/change_secret.py:49 #: accounts/models/automations/check_account.py:75 #: accounts/models/automations/gather_account.py:25 #: accounts/serializers/automations/check_account.py:39 -#: assets/models/automations/base.py:133 +#: assets/models/automations/base.py:136 #: assets/serializers/automations/base.py:45 audits/models.py:209 #: audits/serializers.py:78 ops/models/base.py:49 ops/models/job.py:231 #: terminal/models/applet/applet.py:331 terminal/models/applet/host.py:140 @@ -759,7 +769,7 @@ msgstr "終了日" msgid "Status" msgstr "ステータス" -#: accounts/models/automations/change_secret.py:50 +#: accounts/models/automations/change_secret.py:51 #: accounts/serializers/account/account.py:276 #: accounts/templates/accounts/change_secret_failed_info.html:13 #: assets/const/automation.py:9 @@ -770,19 +780,19 @@ msgstr "ステータス" msgid "Error" msgstr "間違い" -#: accounts/models/automations/change_secret.py:66 +#: accounts/models/automations/change_secret.py:73 msgid "Old secret" msgstr "オリジナルキー" -#: accounts/models/automations/change_secret.py:67 +#: accounts/models/automations/change_secret.py:74 msgid "New secret" msgstr "新しい鍵" -#: accounts/models/automations/change_secret.py:68 +#: accounts/models/automations/change_secret.py:75 msgid "Ignore fail" msgstr "失敗を無視" -#: accounts/models/automations/change_secret.py:71 +#: accounts/models/automations/change_secret.py:78 msgid "Change secret record" msgstr "パスワード レコードの変更" @@ -836,8 +846,8 @@ msgid "Long time no change" msgstr "長期間パスワードが変更されていません" #: accounts/models/automations/check_account.py:52 -#: accounts/templates/accounts/check_account_report.html:69 -#: accounts/templates/accounts/check_account_report.html:89 +#: accounts/templates/accounts/check_account_report.html:70 +#: accounts/templates/accounts/check_account_report.html:90 msgid "Weak password" msgstr "弱いパスワード" @@ -864,13 +874,13 @@ msgstr "その他" #: accounts/models/automations/check_account.py:64 #: accounts/models/automations/gather_account.py:17 accounts/models/base.py:64 #: accounts/serializers/account/virtual.py:21 -#: accounts/templates/accounts/change_secret_report.html:71 -#: accounts/templates/accounts/change_secret_report.html:103 -#: accounts/templates/accounts/check_account_report.html:79 +#: accounts/templates/accounts/change_secret_report.html:73 +#: accounts/templates/accounts/change_secret_report.html:105 +#: accounts/templates/accounts/check_account_report.html:80 #: accounts/templates/accounts/gather_account_report.html:72 #: accounts/templates/accounts/gather_account_report.html:104 -#: accounts/templates/accounts/push_account_report.html:71 -#: accounts/templates/accounts/push_account_report.html:103 +#: accounts/templates/accounts/push_account_report.html:73 +#: accounts/templates/accounts/push_account_report.html:105 #: acls/serializers/base.py:19 acls/serializers/base.py:50 audits/models.py:189 #: authentication/forms.py:21 authentication/forms.py:23 #: authentication/models/temp_token.py:9 @@ -1294,12 +1304,12 @@ msgstr "" "ヒント: 認証にユーザー名が必要ない場合は、`null`を入力します。ADアカウントの" "場合は、`username@domain`のようになります。" -#: accounts/serializers/account/service.py:12 +#: accounts/serializers/account/service.py:13 #: authentication/serializers/token.py:22 msgid "Access IP" msgstr "Access IP" -#: accounts/serializers/account/service.py:25 +#: accounts/serializers/account/service.py:26 #: accounts/serializers/account/virtual.py:19 assets/models/cmd_filter.py:40 #: assets/models/cmd_filter.py:88 common/db/models.py:36 ops/models/adhoc.py:25 #: ops/models/job.py:163 ops/models/playbook.py:31 rbac/models/role.py:37 @@ -1314,9 +1324,9 @@ msgstr "Access IP" msgid "Comment" msgstr "コメント" -#: accounts/serializers/account/service.py:27 -#: accounts/templates/accounts/backup_account_report.html:38 -#: accounts/templates/accounts/check_account_report.html:38 +#: accounts/serializers/account/service.py:28 +#: accounts/templates/accounts/backup_account_report.html:39 +#: accounts/templates/accounts/check_account_report.html:39 #: assets/serializers/asset/common.py:151 msgid "Accounts amount" msgstr "アカウント数" @@ -1412,7 +1422,7 @@ msgid "Name already exists" msgstr "名前は既に存在します。" #: accounts/serializers/automations/base.py:31 -#: assets/models/automations/base.py:144 +#: assets/models/automations/base.py:147 #: assets/serializers/automations/base.py:43 msgid "Automation snapshot" msgstr "自動スナップショット" @@ -1451,7 +1461,7 @@ msgid "Is success" msgstr "成功は" #: accounts/serializers/automations/change_secret.py:119 -#: assets/models/automations/base.py:160 +#: assets/models/automations/base.py:163 msgid "Automation task execution" msgstr "自動タスク実行履歴" @@ -1625,29 +1635,29 @@ msgstr "アカウント接続のテスト" msgid "Deleted account" msgstr "アカウントの削除" -#: accounts/templates/accounts/backup_account_report.html:13 +#: accounts/templates/accounts/backup_account_report.html:14 msgid "" "The following is a summary of account backup tasks, please review and handle " "them" msgstr "" "以下はアカウントバックアップタスクの概要です。ご確認と処理をお願いします。" -#: accounts/templates/accounts/backup_account_report.html:22 +#: accounts/templates/accounts/backup_account_report.html:23 #: accounts/templates/accounts/change_secret_failed_info.html:3 -#: accounts/templates/accounts/change_secret_report.html:22 -#: accounts/templates/accounts/check_account_report.html:22 +#: accounts/templates/accounts/change_secret_report.html:24 +#: accounts/templates/accounts/check_account_report.html:23 #: accounts/templates/accounts/gather_account_report.html:23 -#: accounts/templates/accounts/push_account_report.html:22 +#: accounts/templates/accounts/push_account_report.html:24 #: terminal/serializers/task.py:10 msgid "Task name" msgstr "タスク名" -#: accounts/templates/accounts/backup_account_report.html:26 -#: accounts/templates/accounts/change_secret_report.html:26 -#: accounts/templates/accounts/check_account_report.html:26 +#: accounts/templates/accounts/backup_account_report.html:27 +#: accounts/templates/accounts/change_secret_report.html:28 +#: accounts/templates/accounts/check_account_report.html:27 #: accounts/templates/accounts/gather_account_report.html:27 -#: accounts/templates/accounts/push_account_report.html:26 -#: assets/models/automations/base.py:139 audits/models.py:66 +#: accounts/templates/accounts/push_account_report.html:28 +#: assets/models/automations/base.py:142 audits/models.py:66 #: ops/models/base.py:55 ops/models/celery.py:89 ops/models/job.py:239 #: ops/templates/ops/celery_task_log.html:101 #: perms/models/asset_permission.py:78 settings/serializers/feature.py:27 @@ -1658,26 +1668,26 @@ msgstr "タスク名" msgid "Date start" msgstr "開始日" -#: accounts/templates/accounts/backup_account_report.html:30 -#: accounts/templates/accounts/change_secret_report.html:30 -#: accounts/templates/accounts/check_account_report.html:30 +#: accounts/templates/accounts/backup_account_report.html:31 +#: accounts/templates/accounts/change_secret_report.html:32 +#: accounts/templates/accounts/check_account_report.html:31 #: accounts/templates/accounts/gather_account_report.html:31 -#: accounts/templates/accounts/push_account_report.html:30 +#: accounts/templates/accounts/push_account_report.html:32 #: settings/serializers/feature.py:28 #: settings/templates/ldap/_msg_import_ldap_user.html:6 #: terminal/models/session/session.py:48 msgid "Date end" msgstr "終了日" -#: accounts/templates/accounts/backup_account_report.html:34 -#: accounts/templates/accounts/change_secret_report.html:34 -#: accounts/templates/accounts/check_account_report.html:34 +#: accounts/templates/accounts/backup_account_report.html:35 +#: accounts/templates/accounts/change_secret_report.html:36 +#: accounts/templates/accounts/check_account_report.html:35 #: accounts/templates/accounts/gather_account_report.html:35 -#: accounts/templates/accounts/push_account_report.html:34 +#: accounts/templates/accounts/push_account_report.html:36 msgid "Time using" msgstr "時間を要する" -#: accounts/templates/accounts/backup_account_report.html:42 +#: accounts/templates/accounts/backup_account_report.html:43 msgid "Type count" msgstr "タイプ数" @@ -1697,7 +1707,7 @@ msgstr "" "こんにちは! アセットの変更またはアカウントのプッシュが失敗する状況は次のとお" "りです。 時間内に確認して対処してください。" -#: accounts/templates/accounts/change_secret_report.html:13 +#: accounts/templates/accounts/change_secret_report.html:15 msgid "" "The following is a summary of account change secret tasks, please read and " "process" @@ -1705,66 +1715,66 @@ msgstr "" "以下はアカウント変更の秘密の任務の概要です。お読みいただき、処理してくださ" "い。" -#: accounts/templates/accounts/change_secret_report.html:38 +#: accounts/templates/accounts/change_secret_report.html:40 #: accounts/templates/accounts/gather_account_report.html:39 -#: accounts/templates/accounts/push_account_report.html:38 +#: accounts/templates/accounts/push_account_report.html:40 #: assets/serializers/domain.py:24 assets/serializers/platform.py:182 #: orgs/serializers.py:13 perms/serializers/permission.py:50 msgid "Assets amount" msgstr "資産数量" -#: accounts/templates/accounts/change_secret_report.html:42 -#: accounts/templates/accounts/check_account_report.html:50 +#: accounts/templates/accounts/change_secret_report.html:44 +#: accounts/templates/accounts/check_account_report.html:51 #: accounts/templates/accounts/gather_account_report.html:43 -#: accounts/templates/accounts/push_account_report.html:42 +#: accounts/templates/accounts/push_account_report.html:44 msgid "Asset success count" msgstr "成功した資産数" -#: accounts/templates/accounts/change_secret_report.html:46 -#: accounts/templates/accounts/check_account_report.html:54 +#: accounts/templates/accounts/change_secret_report.html:48 +#: accounts/templates/accounts/check_account_report.html:55 #: accounts/templates/accounts/gather_account_report.html:47 -#: accounts/templates/accounts/push_account_report.html:46 +#: accounts/templates/accounts/push_account_report.html:48 msgid "Asset failed count" msgstr "失敗した資産数" -#: accounts/templates/accounts/change_secret_report.html:50 -#: accounts/templates/accounts/check_account_report.html:58 +#: accounts/templates/accounts/change_secret_report.html:52 +#: accounts/templates/accounts/check_account_report.html:59 #: accounts/templates/accounts/gather_account_report.html:51 -#: accounts/templates/accounts/push_account_report.html:50 +#: accounts/templates/accounts/push_account_report.html:52 msgid "Asset not support count" msgstr "サポートされていない資産数" -#: accounts/templates/accounts/change_secret_report.html:61 -#: accounts/templates/accounts/push_account_report.html:61 +#: accounts/templates/accounts/change_secret_report.html:63 +#: accounts/templates/accounts/push_account_report.html:63 msgid "Success accounts" msgstr "成功したアカウント" -#: accounts/templates/accounts/change_secret_report.html:69 -#: accounts/templates/accounts/change_secret_report.html:101 -#: accounts/templates/accounts/check_account_report.html:77 +#: accounts/templates/accounts/change_secret_report.html:71 +#: accounts/templates/accounts/change_secret_report.html:103 +#: accounts/templates/accounts/check_account_report.html:78 #: accounts/templates/accounts/gather_account_report.html:70 #: accounts/templates/accounts/gather_account_report.html:102 -#: accounts/templates/accounts/push_account_report.html:69 -#: accounts/templates/accounts/push_account_report.html:101 +#: accounts/templates/accounts/push_account_report.html:71 +#: accounts/templates/accounts/push_account_report.html:103 #: audits/handler.py:128 msgid "No" msgstr "否" -#: accounts/templates/accounts/change_secret_report.html:85 -#: accounts/templates/accounts/change_secret_report.html:117 +#: accounts/templates/accounts/change_secret_report.html:87 +#: accounts/templates/accounts/change_secret_report.html:119 #: accounts/templates/accounts/gather_account_report.html:86 #: accounts/templates/accounts/gather_account_report.html:118 -#: accounts/templates/accounts/push_account_report.html:85 -#: accounts/templates/accounts/push_account_report.html:117 +#: accounts/templates/accounts/push_account_report.html:87 +#: accounts/templates/accounts/push_account_report.html:119 msgid "No new accounts found" msgstr "新しいアカウントが見つかりません" -#: accounts/templates/accounts/change_secret_report.html:92 -#: accounts/templates/accounts/push_account_report.html:92 +#: accounts/templates/accounts/change_secret_report.html:94 +#: accounts/templates/accounts/push_account_report.html:94 msgid "Failed accounts" msgstr "失敗したアカウント" -#: accounts/templates/accounts/check_account_report.html:13 +#: accounts/templates/accounts/check_account_report.html:14 #: accounts/templates/accounts/gather_account_report.html:14 msgid "" "The following is a summary of the account check tasks. Please review and " @@ -1772,21 +1782,21 @@ msgid "" msgstr "" "以下はアカウントチェックタスクのまとめですので、ご確認の上、処理してください" -#: accounts/templates/accounts/check_account_report.html:42 +#: accounts/templates/accounts/check_account_report.html:43 msgid "Ok count" msgstr "成功した数" -#: accounts/templates/accounts/check_account_report.html:46 +#: accounts/templates/accounts/check_account_report.html:47 msgid "No password count" msgstr "パスワードなしの数" -#: accounts/templates/accounts/check_account_report.html:80 -#: assets/models/automations/base.py:153 ops/models/base.py:51 +#: accounts/templates/accounts/check_account_report.html:81 +#: assets/models/automations/base.py:156 ops/models/base.py:51 #: ops/models/job.py:235 xpack/plugins/cloud/models.py:225 msgid "Result" msgstr "結果" -#: accounts/templates/accounts/check_account_report.html:95 +#: accounts/templates/accounts/check_account_report.html:96 msgid "No weak password" msgstr "弱いパスワードなし" @@ -1798,7 +1808,7 @@ msgstr "新たに発見されたアカウント" msgid "Lost accounts" msgstr "失われたアカウント" -#: accounts/templates/accounts/push_account_report.html:13 +#: accounts/templates/accounts/push_account_report.html:15 msgid "" "The following is a summary of account push tasks, please read and process" msgstr "" @@ -2112,28 +2122,28 @@ msgstr "同じレベルのノード名を同じにすることはできません msgid "App Assets" msgstr "アプリ資産" -#: assets/automations/base/manager.py:332 +#: assets/automations/base/manager.py:347 msgid " - Platform {} ansible disabled" msgstr " - プラットフォーム {} ansible 無効" -#: assets/automations/base/manager.py:514 +#: assets/automations/base/manager.py:530 msgid ">>> Task preparation phase" msgstr "タスク準備段階" -#: assets/automations/base/manager.py:518 +#: assets/automations/base/manager.py:534 #, python-brace-format msgid ">>> Executing tasks in batches, total {runner_count}" msgstr ">>> バッチでタスクを実行、合計 {runner_count}" -#: assets/automations/base/manager.py:523 +#: assets/automations/base/manager.py:539 msgid ">>> Start executing tasks" msgstr ">>> タスクの実行を開始" -#: assets/automations/base/manager.py:525 +#: assets/automations/base/manager.py:541 msgid ">>> No tasks need to be executed" msgstr ">>> 実行する必要があるタスクはありません" -#: assets/automations/base/manager.py:529 +#: assets/automations/base/manager.py:545 #, python-brace-format msgid ">>> Begin executing batch {index} of tasks" msgstr ">>> 第 {index} バッチのタスクの実行を開始" @@ -2568,27 +2578,33 @@ msgstr "ノード" msgid "Parameters" msgstr "パラメータ" -#: assets/models/automations/base.py:41 assets/models/automations/base.py:128 +#: assets/models/automations/base.py:31 +#, fuzzy +#| msgid "Last execution" +msgid "Last execution date" +msgstr "最後の実行" + +#: assets/models/automations/base.py:44 assets/models/automations/base.py:131 msgid "Automation task" msgstr "自動化されたタスク" -#: assets/models/automations/base.py:119 +#: assets/models/automations/base.py:122 msgid "Asset automation task" msgstr "アセットの自動化タスク" -#: assets/models/automations/base.py:136 assets/models/cmd_filter.py:41 +#: assets/models/automations/base.py:139 assets/models/cmd_filter.py:41 #: common/db/models.py:34 ops/models/base.py:54 ops/models/job.py:238 #: users/models/user/__init__.py:322 msgid "Date created" msgstr "作成された日付" -#: assets/models/automations/base.py:150 +#: assets/models/automations/base.py:153 #: assets/serializers/automations/base.py:44 xpack/plugins/cloud/models.py:242 #: xpack/plugins/cloud/serializers/task.py:249 msgid "Trigger mode" msgstr "トリガーモード" -#: assets/models/automations/base.py:152 audits/serializers.py:39 +#: assets/models/automations/base.py:155 audits/serializers.py:39 #: ops/models/base.py:52 ops/models/job.py:236 #: xpack/plugins/cloud/manager.py:103 msgid "Summary" @@ -7180,7 +7196,9 @@ msgid "User first login update profile done redirect to it" msgstr "ユーザーの最初のログイン更新プロファイルがリダイレクトされました" #: settings/serializers/basic.py:22 -msgid "Global organization" +#, fuzzy +#| msgid "Global organization" +msgid "Global org display" msgstr "グローバル組織名" #: settings/serializers/basic.py:23 diff --git a/apps/i18n/core/pt_BR/LC_MESSAGES/django.po b/apps/i18n/core/pt_BR/LC_MESSAGES/django.po index 0a2aa4ca4..117c7ef13 100644 --- a/apps/i18n/core/pt_BR/LC_MESSAGES/django.po +++ b/apps/i18n/core/pt_BR/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-28 18:37+0800\n" +"POT-Creation-Date: 2025-03-07 15:03+0800\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -24,7 +24,7 @@ msgstr "" msgid "Account already exists" msgstr "Conta já existente" -#: accounts/api/account/application.py:77 +#: accounts/api/account/application.py:78 #: authentication/api/connection_token.py:449 msgid "Account not found" msgstr "Conta não encontrada" @@ -48,8 +48,8 @@ msgstr "Gerar arquivo de informações de backup relacionado ao ativo" #: accounts/automations/backup_account/handlers.py:168 #: accounts/automations/backup_account/manager.py:26 #: accounts/automations/change_secret/manager.py:95 -#: accounts/automations/push_account/manager.py:59 -#: assets/models/automations/base.py:142 ops/serializers/job.py:71 +#: accounts/automations/push_account/manager.py:61 +#: assets/models/automations/base.py:145 ops/serializers/job.py:71 #: ops/serializers/job.py:95 #: settings/templates/ldap/_msg_import_ldap_user.html:7 #: terminal/serializers/session.py:49 @@ -60,23 +60,27 @@ msgstr "Duração" msgid "Backup file creation completed" msgstr "Criação de arquivo de backup concluída" -#: accounts/automations/backup_account/handlers.py:203 +#: accounts/automations/backup_account/handlers.py:177 +msgid "Start sending backup emails" +msgstr "Comece a enviar e-mails de backup" + +#: accounts/automations/backup_account/handlers.py:204 msgid "Encrypting files using encryption password" msgstr "Usando senha criptografada para criptografar o arquivo" -#: accounts/automations/backup_account/handlers.py:213 +#: accounts/automations/backup_account/handlers.py:214 msgid "The backup file will be sent to" msgstr "O arquivo de backup será enviado para" -#: accounts/automations/backup_account/handlers.py:236 +#: accounts/automations/backup_account/handlers.py:237 msgid "The backup task has no assigned sftp server" msgstr "A tarefa de backup não foi atribuída a um servidor sftp" -#: accounts/automations/backup_account/handlers.py:257 +#: accounts/automations/backup_account/handlers.py:258 msgid "The backup task has no assigned recipient" msgstr "A tarefa de backup não possui destinatário especificado" -#: accounts/automations/backup_account/handlers.py:280 +#: accounts/automations/backup_account/handlers.py:281 msgid "Plan start" msgstr "Tarefa iniciada" @@ -86,11 +90,11 @@ msgstr "Plano de backup de contas está em execução" #: accounts/automations/backup_account/manager.py:24 #: accounts/automations/change_secret/manager.py:93 -#: accounts/automations/push_account/manager.py:57 +#: accounts/automations/push_account/manager.py:59 msgid "Plan execution end" msgstr "Execução do plano concluída" -#: accounts/automations/base/manager.py:106 +#: accounts/automations/base/manager.py:109 msgid "No pending accounts found" msgstr "Conta pendente não encontrada" @@ -99,6 +103,12 @@ msgstr "Conta pendente não encontrada" msgid "Success: %s, Failed: %s, Total: %s" msgstr "Sucesso: %s, Falha: %s, Total: %s" +#: accounts/automations/push_account/manager.py:31 +#, fuzzy +#| msgid "The {} cannot be empty" +msgid "Secret cannot be empty" +msgstr "{} não pode estar vazio" + #: accounts/automations/verify_gateway_account/manager.py:18 msgid ">>> Start executing the task to test gateway account connectivity" msgstr ">>> Iniciando teste de conectividade da conta do gateway" @@ -426,13 +436,13 @@ msgstr "Usuário %s visualizou/exportou a senha" #: accounts/serializers/automations/gather_account.py:47 #: accounts/templates/accounts/asset_account_change_info.html:7 #: accounts/templates/accounts/change_secret_failed_info.html:11 -#: accounts/templates/accounts/change_secret_report.html:70 -#: accounts/templates/accounts/change_secret_report.html:102 -#: accounts/templates/accounts/check_account_report.html:78 +#: accounts/templates/accounts/change_secret_report.html:72 +#: accounts/templates/accounts/change_secret_report.html:104 +#: accounts/templates/accounts/check_account_report.html:79 #: accounts/templates/accounts/gather_account_report.html:71 #: accounts/templates/accounts/gather_account_report.html:103 -#: accounts/templates/accounts/push_account_report.html:70 -#: accounts/templates/accounts/push_account_report.html:102 +#: accounts/templates/accounts/push_account_report.html:72 +#: accounts/templates/accounts/push_account_report.html:104 #: acls/serializers/base.py:130 assets/models/asset/common.py:102 #: assets/models/asset/common.py:366 assets/models/cmd_filter.py:36 #: audits/models.py:59 audits/models.py:312 audits/serializers.py:228 @@ -495,7 +505,7 @@ msgstr "Status da Alteração de Senha" #: accounts/models/account.py:85 #: accounts/models/automations/check_account.py:67 -#: accounts/serializers/account/service.py:10 +#: accounts/serializers/account/service.py:11 #: accounts/serializers/automations/change_secret.py:115 #: accounts/serializers/automations/change_secret.py:146 #: accounts/templates/accounts/change_secret_failed_info.html:12 @@ -539,7 +549,7 @@ msgstr "É possível remover a conta" #: accounts/models/application.py:16 #: accounts/models/automations/check_account.py:119 accounts/models/base.py:63 -#: accounts/serializers/account/service.py:26 +#: accounts/serializers/account/service.py:27 #: accounts/serializers/account/virtual.py:20 acls/models/base.py:35 #: acls/models/base.py:96 acls/models/command_acl.py:21 #: acls/serializers/base.py:35 assets/models/asset/common.py:100 @@ -707,7 +717,7 @@ msgstr "Método de lançamento da chave SSH" msgid "Check connection after change" msgstr "Verifique a conexão após a alteração" -#: accounts/models/automations/change_secret.py:16 +#: accounts/models/automations/change_secret.py:17 #: accounts/models/automations/check_account.py:19 #: accounts/models/automations/gather_account.py:92 #: accounts/serializers/automations/change_secret.py:59 @@ -716,22 +726,22 @@ msgstr "Verifique a conexão após a alteração" msgid "Recipient" msgstr "Destinatário" -#: accounts/models/automations/change_secret.py:23 +#: accounts/models/automations/change_secret.py:24 msgid "Change secret automation" msgstr "Automação da alteração de senha" -#: accounts/models/automations/change_secret.py:46 -#: assets/models/automations/base.py:141 ops/models/base.py:56 +#: accounts/models/automations/change_secret.py:47 +#: assets/models/automations/base.py:144 ops/models/base.py:56 #: ops/models/celery.py:90 ops/models/job.py:240 #: terminal/models/applet/host.py:142 msgid "Date finished" msgstr "Data de fim" -#: accounts/models/automations/change_secret.py:48 +#: accounts/models/automations/change_secret.py:49 #: accounts/models/automations/check_account.py:75 #: accounts/models/automations/gather_account.py:25 #: accounts/serializers/automations/check_account.py:39 -#: assets/models/automations/base.py:133 +#: assets/models/automations/base.py:136 #: assets/serializers/automations/base.py:45 audits/models.py:209 #: audits/serializers.py:78 ops/models/base.py:49 ops/models/job.py:231 #: terminal/models/applet/applet.py:331 terminal/models/applet/host.py:140 @@ -745,7 +755,7 @@ msgstr "Data de fim" msgid "Status" msgstr "Status" -#: accounts/models/automations/change_secret.py:50 +#: accounts/models/automations/change_secret.py:51 #: accounts/serializers/account/account.py:276 #: accounts/templates/accounts/change_secret_failed_info.html:13 #: assets/const/automation.py:9 @@ -756,19 +766,19 @@ msgstr "Status" msgid "Error" msgstr "Erro" -#: accounts/models/automations/change_secret.py:66 +#: accounts/models/automations/change_secret.py:73 msgid "Old secret" msgstr "Senha antiga" -#: accounts/models/automations/change_secret.py:67 +#: accounts/models/automations/change_secret.py:74 msgid "New secret" msgstr "Nova senha" -#: accounts/models/automations/change_secret.py:68 +#: accounts/models/automations/change_secret.py:75 msgid "Ignore fail" msgstr "Ignorar falhas" -#: accounts/models/automations/change_secret.py:71 +#: accounts/models/automations/change_secret.py:78 msgid "Change secret record" msgstr "Registro de alteração de senha" @@ -837,8 +847,8 @@ msgstr "" "- Remover remoto" #: accounts/models/automations/check_account.py:52 -#: accounts/templates/accounts/check_account_report.html:69 -#: accounts/templates/accounts/check_account_report.html:89 +#: accounts/templates/accounts/check_account_report.html:70 +#: accounts/templates/accounts/check_account_report.html:90 msgid "Weak password" msgstr "Senha fraca" @@ -865,13 +875,13 @@ msgstr "Outro" #: accounts/models/automations/check_account.py:64 #: accounts/models/automations/gather_account.py:17 accounts/models/base.py:64 #: accounts/serializers/account/virtual.py:21 -#: accounts/templates/accounts/change_secret_report.html:71 -#: accounts/templates/accounts/change_secret_report.html:103 -#: accounts/templates/accounts/check_account_report.html:79 +#: accounts/templates/accounts/change_secret_report.html:73 +#: accounts/templates/accounts/change_secret_report.html:105 +#: accounts/templates/accounts/check_account_report.html:80 #: accounts/templates/accounts/gather_account_report.html:72 #: accounts/templates/accounts/gather_account_report.html:104 -#: accounts/templates/accounts/push_account_report.html:71 -#: accounts/templates/accounts/push_account_report.html:103 +#: accounts/templates/accounts/push_account_report.html:73 +#: accounts/templates/accounts/push_account_report.html:105 #: acls/serializers/base.py:19 acls/serializers/base.py:50 audits/models.py:189 #: authentication/forms.py:21 authentication/forms.py:23 #: authentication/models/temp_token.py:9 @@ -1299,12 +1309,12 @@ msgstr "" "Aviso: Se a identificação não necessitar de um nome de usuário, insira " "'null'. Se for uma conta AD, o formato é username@domain." -#: accounts/serializers/account/service.py:12 +#: accounts/serializers/account/service.py:13 #: authentication/serializers/token.py:22 msgid "Access IP" msgstr "Lista branca de IP" -#: accounts/serializers/account/service.py:25 +#: accounts/serializers/account/service.py:26 #: accounts/serializers/account/virtual.py:19 assets/models/cmd_filter.py:40 #: assets/models/cmd_filter.py:88 common/db/models.py:36 ops/models/adhoc.py:25 #: ops/models/job.py:163 ops/models/playbook.py:31 rbac/models/role.py:37 @@ -1319,9 +1329,9 @@ msgstr "Lista branca de IP" msgid "Comment" msgstr "Observação" -#: accounts/serializers/account/service.py:27 -#: accounts/templates/accounts/backup_account_report.html:38 -#: accounts/templates/accounts/check_account_report.html:38 +#: accounts/serializers/account/service.py:28 +#: accounts/templates/accounts/backup_account_report.html:39 +#: accounts/templates/accounts/check_account_report.html:39 #: assets/serializers/asset/common.py:151 msgid "Accounts amount" msgstr "Quantidade de contas" @@ -1424,7 +1434,7 @@ msgid "Name already exists" msgstr "O nome já existe" #: accounts/serializers/automations/base.py:31 -#: assets/models/automations/base.py:144 +#: assets/models/automations/base.py:147 #: assets/serializers/automations/base.py:43 msgid "Automation snapshot" msgstr "Snapshot automático" @@ -1464,7 +1474,7 @@ msgid "Is success" msgstr "Foi Bem-sucedido?" #: accounts/serializers/automations/change_secret.py:119 -#: assets/models/automations/base.py:160 +#: assets/models/automations/base.py:163 msgid "Automation task execution" msgstr "Histórico de execução de tarefas automáticas" @@ -1644,7 +1654,7 @@ msgstr "Testar a conectividade da conta" msgid "Deleted account" msgstr "Excluir conta" -#: accounts/templates/accounts/backup_account_report.html:13 +#: accounts/templates/accounts/backup_account_report.html:14 msgid "" "The following is a summary of account backup tasks, please review and handle " "them" @@ -1652,22 +1662,22 @@ msgstr "" "Abaixo estão os resumos das tarefas de backup de contas, por favor, revise e " "trate." -#: accounts/templates/accounts/backup_account_report.html:22 +#: accounts/templates/accounts/backup_account_report.html:23 #: accounts/templates/accounts/change_secret_failed_info.html:3 -#: accounts/templates/accounts/change_secret_report.html:22 -#: accounts/templates/accounts/check_account_report.html:22 +#: accounts/templates/accounts/change_secret_report.html:24 +#: accounts/templates/accounts/check_account_report.html:23 #: accounts/templates/accounts/gather_account_report.html:23 -#: accounts/templates/accounts/push_account_report.html:22 +#: accounts/templates/accounts/push_account_report.html:24 #: terminal/serializers/task.py:10 msgid "Task name" msgstr "Nome da tarefa" -#: accounts/templates/accounts/backup_account_report.html:26 -#: accounts/templates/accounts/change_secret_report.html:26 -#: accounts/templates/accounts/check_account_report.html:26 +#: accounts/templates/accounts/backup_account_report.html:27 +#: accounts/templates/accounts/change_secret_report.html:28 +#: accounts/templates/accounts/check_account_report.html:27 #: accounts/templates/accounts/gather_account_report.html:27 -#: accounts/templates/accounts/push_account_report.html:26 -#: assets/models/automations/base.py:139 audits/models.py:66 +#: accounts/templates/accounts/push_account_report.html:28 +#: assets/models/automations/base.py:142 audits/models.py:66 #: ops/models/base.py:55 ops/models/celery.py:89 ops/models/job.py:239 #: ops/templates/ops/celery_task_log.html:101 #: perms/models/asset_permission.py:78 settings/serializers/feature.py:27 @@ -1678,26 +1688,26 @@ msgstr "Nome da tarefa" msgid "Date start" msgstr "Data de Início" -#: accounts/templates/accounts/backup_account_report.html:30 -#: accounts/templates/accounts/change_secret_report.html:30 -#: accounts/templates/accounts/check_account_report.html:30 +#: accounts/templates/accounts/backup_account_report.html:31 +#: accounts/templates/accounts/change_secret_report.html:32 +#: accounts/templates/accounts/check_account_report.html:31 #: accounts/templates/accounts/gather_account_report.html:31 -#: accounts/templates/accounts/push_account_report.html:30 +#: accounts/templates/accounts/push_account_report.html:32 #: settings/serializers/feature.py:28 #: settings/templates/ldap/_msg_import_ldap_user.html:6 #: terminal/models/session/session.py:48 msgid "Date end" msgstr "Data de Encerramento" -#: accounts/templates/accounts/backup_account_report.html:34 -#: accounts/templates/accounts/change_secret_report.html:34 -#: accounts/templates/accounts/check_account_report.html:34 +#: accounts/templates/accounts/backup_account_report.html:35 +#: accounts/templates/accounts/change_secret_report.html:36 +#: accounts/templates/accounts/check_account_report.html:35 #: accounts/templates/accounts/gather_account_report.html:35 -#: accounts/templates/accounts/push_account_report.html:34 +#: accounts/templates/accounts/push_account_report.html:36 msgid "Time using" msgstr "Duração." -#: accounts/templates/accounts/backup_account_report.html:42 +#: accounts/templates/accounts/backup_account_report.html:43 msgid "Type count" msgstr "Número de tipos" @@ -1717,7 +1727,7 @@ msgstr "" "Olá! Aqui estão os casos de falha ao alterar ou enviar a senha do ativo. Por " "favor, verifique e corrija o mais rápido possível." -#: accounts/templates/accounts/change_secret_report.html:13 +#: accounts/templates/accounts/change_secret_report.html:15 msgid "" "The following is a summary of account change secret tasks, please read and " "process" @@ -1725,66 +1735,66 @@ msgstr "" "Aqui está um resumo da missão secreta de alteração de conta, por favor, leia " "e processe." -#: accounts/templates/accounts/change_secret_report.html:38 +#: accounts/templates/accounts/change_secret_report.html:40 #: accounts/templates/accounts/gather_account_report.html:39 -#: accounts/templates/accounts/push_account_report.html:38 +#: accounts/templates/accounts/push_account_report.html:40 #: assets/serializers/domain.py:24 assets/serializers/platform.py:182 #: orgs/serializers.py:13 perms/serializers/permission.py:50 msgid "Assets amount" msgstr "Número de ativos" -#: accounts/templates/accounts/change_secret_report.html:42 -#: accounts/templates/accounts/check_account_report.html:50 +#: accounts/templates/accounts/change_secret_report.html:44 +#: accounts/templates/accounts/check_account_report.html:51 #: accounts/templates/accounts/gather_account_report.html:43 -#: accounts/templates/accounts/push_account_report.html:42 +#: accounts/templates/accounts/push_account_report.html:44 msgid "Asset success count" msgstr "Número de ativos bem-sucedidos" -#: accounts/templates/accounts/change_secret_report.html:46 -#: accounts/templates/accounts/check_account_report.html:54 +#: accounts/templates/accounts/change_secret_report.html:48 +#: accounts/templates/accounts/check_account_report.html:55 #: accounts/templates/accounts/gather_account_report.html:47 -#: accounts/templates/accounts/push_account_report.html:46 +#: accounts/templates/accounts/push_account_report.html:48 msgid "Asset failed count" msgstr "Número de ativos com falha" -#: accounts/templates/accounts/change_secret_report.html:50 -#: accounts/templates/accounts/check_account_report.html:58 +#: accounts/templates/accounts/change_secret_report.html:52 +#: accounts/templates/accounts/check_account_report.html:59 #: accounts/templates/accounts/gather_account_report.html:51 -#: accounts/templates/accounts/push_account_report.html:50 +#: accounts/templates/accounts/push_account_report.html:52 msgid "Asset not support count" msgstr "Número de ativos não suportados" -#: accounts/templates/accounts/change_secret_report.html:61 -#: accounts/templates/accounts/push_account_report.html:61 +#: accounts/templates/accounts/change_secret_report.html:63 +#: accounts/templates/accounts/push_account_report.html:63 msgid "Success accounts" msgstr "Contas bem-sucedidas" -#: accounts/templates/accounts/change_secret_report.html:69 -#: accounts/templates/accounts/change_secret_report.html:101 -#: accounts/templates/accounts/check_account_report.html:77 +#: accounts/templates/accounts/change_secret_report.html:71 +#: accounts/templates/accounts/change_secret_report.html:103 +#: accounts/templates/accounts/check_account_report.html:78 #: accounts/templates/accounts/gather_account_report.html:70 #: accounts/templates/accounts/gather_account_report.html:102 -#: accounts/templates/accounts/push_account_report.html:69 -#: accounts/templates/accounts/push_account_report.html:101 +#: accounts/templates/accounts/push_account_report.html:71 +#: accounts/templates/accounts/push_account_report.html:103 #: audits/handler.py:128 msgid "No" msgstr "Não" -#: accounts/templates/accounts/change_secret_report.html:85 -#: accounts/templates/accounts/change_secret_report.html:117 +#: accounts/templates/accounts/change_secret_report.html:87 +#: accounts/templates/accounts/change_secret_report.html:119 #: accounts/templates/accounts/gather_account_report.html:86 #: accounts/templates/accounts/gather_account_report.html:118 -#: accounts/templates/accounts/push_account_report.html:85 -#: accounts/templates/accounts/push_account_report.html:117 +#: accounts/templates/accounts/push_account_report.html:87 +#: accounts/templates/accounts/push_account_report.html:119 msgid "No new accounts found" msgstr "Conta nova não encontrada" -#: accounts/templates/accounts/change_secret_report.html:92 -#: accounts/templates/accounts/push_account_report.html:92 +#: accounts/templates/accounts/change_secret_report.html:94 +#: accounts/templates/accounts/push_account_report.html:94 msgid "Failed accounts" msgstr "Contas com falha" -#: accounts/templates/accounts/check_account_report.html:13 +#: accounts/templates/accounts/check_account_report.html:14 #: accounts/templates/accounts/gather_account_report.html:14 msgid "" "The following is a summary of the account check tasks. Please review and " @@ -1793,21 +1803,21 @@ msgstr "" "A seguir, está o resumo das tarefas de verificação de conta, por favor, " "consulte e trate" -#: accounts/templates/accounts/check_account_report.html:42 +#: accounts/templates/accounts/check_account_report.html:43 msgid "Ok count" msgstr "Número de sucessos" -#: accounts/templates/accounts/check_account_report.html:46 +#: accounts/templates/accounts/check_account_report.html:47 msgid "No password count" msgstr "SemSenhaNum" -#: accounts/templates/accounts/check_account_report.html:80 -#: assets/models/automations/base.py:153 ops/models/base.py:51 +#: accounts/templates/accounts/check_account_report.html:81 +#: assets/models/automations/base.py:156 ops/models/base.py:51 #: ops/models/job.py:235 xpack/plugins/cloud/models.py:225 msgid "Result" msgstr "Resultado" -#: accounts/templates/accounts/check_account_report.html:95 +#: accounts/templates/accounts/check_account_report.html:96 msgid "No weak password" msgstr "SemSenhaFraca" @@ -1819,7 +1829,7 @@ msgstr "ContaNovaDescoberta" msgid "Lost accounts" msgstr "ContaPerdida" -#: accounts/templates/accounts/push_account_report.html:13 +#: accounts/templates/accounts/push_account_report.html:15 msgid "" "The following is a summary of account push tasks, please read and process" msgstr "" @@ -2137,28 +2147,28 @@ msgstr "O nome do nó no mesmo nível não pode ser repetido" msgid "App Assets" msgstr "Gestão de ativos" -#: assets/automations/base/manager.py:332 +#: assets/automations/base/manager.py:347 msgid " - Platform {} ansible disabled" msgstr " - Plataforma {} Ansible foi desabilitada, impossível executar tarefas" -#: assets/automations/base/manager.py:514 +#: assets/automations/base/manager.py:530 msgid ">>> Task preparation phase" msgstr ">>> Preparando para executar tarefas" -#: assets/automations/base/manager.py:518 +#: assets/automations/base/manager.py:534 #, python-brace-format msgid ">>> Executing tasks in batches, total {runner_count}" msgstr ">>> Executando tarefas em partes, total de {runner_count}" -#: assets/automations/base/manager.py:523 +#: assets/automations/base/manager.py:539 msgid ">>> Start executing tasks" msgstr ">>> Começando a executar tarefas" -#: assets/automations/base/manager.py:525 +#: assets/automations/base/manager.py:541 msgid ">>> No tasks need to be executed" msgstr ">>> Não há tarefas para executar" -#: assets/automations/base/manager.py:529 +#: assets/automations/base/manager.py:545 #, python-brace-format msgid ">>> Begin executing batch {index} of tasks" msgstr ">>> Começando a executar o lote {index} de tarefas" @@ -2596,27 +2606,33 @@ msgstr "Nó" msgid "Parameters" msgstr "Parâmetros" -#: assets/models/automations/base.py:41 assets/models/automations/base.py:128 +#: assets/models/automations/base.py:31 +#, fuzzy +#| msgid "Last execution" +msgid "Last execution date" +msgstr "Última Ação" + +#: assets/models/automations/base.py:44 assets/models/automations/base.py:131 msgid "Automation task" msgstr "Tarefas de automação" -#: assets/models/automations/base.py:119 +#: assets/models/automations/base.py:122 msgid "Asset automation task" msgstr "Tarefas de Automação de Ativos" -#: assets/models/automations/base.py:136 assets/models/cmd_filter.py:41 +#: assets/models/automations/base.py:139 assets/models/cmd_filter.py:41 #: common/db/models.py:34 ops/models/base.py:54 ops/models/job.py:238 #: users/models/user/__init__.py:322 msgid "Date created" msgstr "Data de criação" -#: assets/models/automations/base.py:150 +#: assets/models/automations/base.py:153 #: assets/serializers/automations/base.py:44 xpack/plugins/cloud/models.py:242 #: xpack/plugins/cloud/serializers/task.py:249 msgid "Trigger mode" msgstr "Modo de Trigger" -#: assets/models/automations/base.py:152 audits/serializers.py:39 +#: assets/models/automations/base.py:155 audits/serializers.py:39 #: ops/models/base.py:52 ops/models/job.py:236 #: xpack/plugins/cloud/manager.py:103 msgid "Summary" @@ -7262,7 +7278,9 @@ msgstr "" "após modificar o perfil, pode ser um wiki ou outros documentos de instrução" #: settings/serializers/basic.py:22 -msgid "Global organization" +#, fuzzy +#| msgid "Global organization" +msgid "Global org display" msgstr "Nome da organização global" #: settings/serializers/basic.py:23 diff --git a/apps/i18n/core/zh/LC_MESSAGES/django.po b/apps/i18n/core/zh/LC_MESSAGES/django.po index 6e0415185..90bd02fdd 100644 --- a/apps/i18n/core/zh/LC_MESSAGES/django.po +++ b/apps/i18n/core/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: 2025-02-28 18:37+0800\n" +"POT-Creation-Date: 2025-03-07 15:03+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -23,7 +23,7 @@ msgstr "" msgid "Account already exists" msgstr "账号已存在" -#: accounts/api/account/application.py:77 +#: accounts/api/account/application.py:78 #: authentication/api/connection_token.py:449 msgid "Account not found" msgstr "账号未找到" @@ -47,8 +47,8 @@ msgstr "生成资产相关备份信息文件" #: accounts/automations/backup_account/handlers.py:168 #: accounts/automations/backup_account/manager.py:26 #: accounts/automations/change_secret/manager.py:95 -#: accounts/automations/push_account/manager.py:59 -#: assets/models/automations/base.py:142 ops/serializers/job.py:71 +#: accounts/automations/push_account/manager.py:61 +#: assets/models/automations/base.py:145 ops/serializers/job.py:71 #: ops/serializers/job.py:95 #: settings/templates/ldap/_msg_import_ldap_user.html:7 #: terminal/serializers/session.py:49 @@ -59,23 +59,27 @@ msgstr "花费时间" msgid "Backup file creation completed" msgstr "创建备份文件完成" -#: accounts/automations/backup_account/handlers.py:203 +#: accounts/automations/backup_account/handlers.py:177 +msgid "Start sending backup emails" +msgstr "开始发送备份电子邮件" + +#: accounts/automations/backup_account/handlers.py:204 msgid "Encrypting files using encryption password" msgstr "使用加密密码对文件进行加密中" -#: accounts/automations/backup_account/handlers.py:213 +#: accounts/automations/backup_account/handlers.py:214 msgid "The backup file will be sent to" msgstr "备份文件将被发送至" -#: accounts/automations/backup_account/handlers.py:236 +#: accounts/automations/backup_account/handlers.py:237 msgid "The backup task has no assigned sftp server" msgstr "该备份任务未分配sftp服务器" -#: accounts/automations/backup_account/handlers.py:257 +#: accounts/automations/backup_account/handlers.py:258 msgid "The backup task has no assigned recipient" msgstr "备份任务没有指定收件人" -#: accounts/automations/backup_account/handlers.py:280 +#: accounts/automations/backup_account/handlers.py:281 msgid "Plan start" msgstr "任务开始" @@ -85,11 +89,11 @@ msgstr "账号备份计划正在执行" #: accounts/automations/backup_account/manager.py:24 #: accounts/automations/change_secret/manager.py:93 -#: accounts/automations/push_account/manager.py:57 +#: accounts/automations/push_account/manager.py:59 msgid "Plan execution end" msgstr "计划执行结束" -#: accounts/automations/base/manager.py:106 +#: accounts/automations/base/manager.py:109 msgid "No pending accounts found" msgstr "未找到待处理帐户" @@ -98,6 +102,12 @@ msgstr "未找到待处理帐户" msgid "Success: %s, Failed: %s, Total: %s" msgstr "成功: %s, 失败: %s, 总数: %s" +#: accounts/automations/push_account/manager.py:31 +#, fuzzy +#| msgid "The {} cannot be empty" +msgid "Secret cannot be empty" +msgstr "{} 不能为空" + #: accounts/automations/verify_gateway_account/manager.py:18 msgid ">>> Start executing the task to test gateway account connectivity" msgstr ">>> 开始执行测试网关账号可连接性任务" @@ -422,13 +432,13 @@ msgstr "用户 %s 查看/导出 了密码" #: accounts/serializers/automations/gather_account.py:47 #: accounts/templates/accounts/asset_account_change_info.html:7 #: accounts/templates/accounts/change_secret_failed_info.html:11 -#: accounts/templates/accounts/change_secret_report.html:70 -#: accounts/templates/accounts/change_secret_report.html:102 -#: accounts/templates/accounts/check_account_report.html:78 +#: accounts/templates/accounts/change_secret_report.html:72 +#: accounts/templates/accounts/change_secret_report.html:104 +#: accounts/templates/accounts/check_account_report.html:79 #: accounts/templates/accounts/gather_account_report.html:71 #: accounts/templates/accounts/gather_account_report.html:103 -#: accounts/templates/accounts/push_account_report.html:70 -#: accounts/templates/accounts/push_account_report.html:102 +#: accounts/templates/accounts/push_account_report.html:72 +#: accounts/templates/accounts/push_account_report.html:104 #: acls/serializers/base.py:130 assets/models/asset/common.py:102 #: assets/models/asset/common.py:366 assets/models/cmd_filter.py:36 #: audits/models.py:59 audits/models.py:312 audits/serializers.py:228 @@ -491,7 +501,7 @@ msgstr "改密状态" #: accounts/models/account.py:85 #: accounts/models/automations/check_account.py:67 -#: accounts/serializers/account/service.py:10 +#: accounts/serializers/account/service.py:11 #: accounts/serializers/automations/change_secret.py:115 #: accounts/serializers/automations/change_secret.py:146 #: accounts/templates/accounts/change_secret_failed_info.html:12 @@ -535,7 +545,7 @@ msgstr "可以移除账号" #: accounts/models/application.py:16 #: accounts/models/automations/check_account.py:119 accounts/models/base.py:63 -#: accounts/serializers/account/service.py:26 +#: accounts/serializers/account/service.py:27 #: accounts/serializers/account/virtual.py:20 acls/models/base.py:35 #: acls/models/base.py:96 acls/models/command_acl.py:21 #: acls/serializers/base.py:35 assets/models/asset/common.py:100 @@ -703,7 +713,7 @@ msgstr "SSH 密钥推送方式" msgid "Check connection after change" msgstr "更改后检查连接" -#: accounts/models/automations/change_secret.py:16 +#: accounts/models/automations/change_secret.py:17 #: accounts/models/automations/check_account.py:19 #: accounts/models/automations/gather_account.py:92 #: accounts/serializers/automations/change_secret.py:59 @@ -712,22 +722,22 @@ msgstr "更改后检查连接" msgid "Recipient" msgstr "收件人" -#: accounts/models/automations/change_secret.py:23 +#: accounts/models/automations/change_secret.py:24 msgid "Change secret automation" msgstr "自动化改密" -#: accounts/models/automations/change_secret.py:46 -#: assets/models/automations/base.py:141 ops/models/base.py:56 +#: accounts/models/automations/change_secret.py:47 +#: assets/models/automations/base.py:144 ops/models/base.py:56 #: ops/models/celery.py:90 ops/models/job.py:240 #: terminal/models/applet/host.py:142 msgid "Date finished" msgstr "结束日期" -#: accounts/models/automations/change_secret.py:48 +#: accounts/models/automations/change_secret.py:49 #: accounts/models/automations/check_account.py:75 #: accounts/models/automations/gather_account.py:25 #: accounts/serializers/automations/check_account.py:39 -#: assets/models/automations/base.py:133 +#: assets/models/automations/base.py:136 #: assets/serializers/automations/base.py:45 audits/models.py:209 #: audits/serializers.py:78 ops/models/base.py:49 ops/models/job.py:231 #: terminal/models/applet/applet.py:331 terminal/models/applet/host.py:140 @@ -741,7 +751,7 @@ msgstr "结束日期" msgid "Status" msgstr "状态" -#: accounts/models/automations/change_secret.py:50 +#: accounts/models/automations/change_secret.py:51 #: accounts/serializers/account/account.py:276 #: accounts/templates/accounts/change_secret_failed_info.html:13 #: assets/const/automation.py:9 @@ -752,19 +762,19 @@ msgstr "状态" msgid "Error" msgstr "错误" -#: accounts/models/automations/change_secret.py:66 +#: accounts/models/automations/change_secret.py:73 msgid "Old secret" msgstr "原密钥" -#: accounts/models/automations/change_secret.py:67 +#: accounts/models/automations/change_secret.py:74 msgid "New secret" msgstr "新密钥" -#: accounts/models/automations/change_secret.py:68 +#: accounts/models/automations/change_secret.py:75 msgid "Ignore fail" msgstr "忽略失败" -#: accounts/models/automations/change_secret.py:71 +#: accounts/models/automations/change_secret.py:78 msgid "Change secret record" msgstr "改密记录" @@ -818,8 +828,8 @@ msgid "Long time no change" msgstr "长时间未改密" #: accounts/models/automations/check_account.py:52 -#: accounts/templates/accounts/check_account_report.html:69 -#: accounts/templates/accounts/check_account_report.html:89 +#: accounts/templates/accounts/check_account_report.html:70 +#: accounts/templates/accounts/check_account_report.html:90 msgid "Weak password" msgstr "弱密码" @@ -846,13 +856,13 @@ msgstr "其它" #: accounts/models/automations/check_account.py:64 #: accounts/models/automations/gather_account.py:17 accounts/models/base.py:64 #: accounts/serializers/account/virtual.py:21 -#: accounts/templates/accounts/change_secret_report.html:71 -#: accounts/templates/accounts/change_secret_report.html:103 -#: accounts/templates/accounts/check_account_report.html:79 +#: accounts/templates/accounts/change_secret_report.html:73 +#: accounts/templates/accounts/change_secret_report.html:105 +#: accounts/templates/accounts/check_account_report.html:80 #: accounts/templates/accounts/gather_account_report.html:72 #: accounts/templates/accounts/gather_account_report.html:104 -#: accounts/templates/accounts/push_account_report.html:71 -#: accounts/templates/accounts/push_account_report.html:103 +#: accounts/templates/accounts/push_account_report.html:73 +#: accounts/templates/accounts/push_account_report.html:105 #: acls/serializers/base.py:19 acls/serializers/base.py:50 audits/models.py:189 #: authentication/forms.py:21 authentication/forms.py:23 #: authentication/models/temp_token.py:9 @@ -1270,12 +1280,12 @@ msgstr "" "提示: 如果认证时不需要用户名,可填写为 null, 如果是 AD 账号,格式为 " "username@domain" -#: accounts/serializers/account/service.py:12 +#: accounts/serializers/account/service.py:13 #: authentication/serializers/token.py:22 msgid "Access IP" msgstr "IP 白名单" -#: accounts/serializers/account/service.py:25 +#: accounts/serializers/account/service.py:26 #: accounts/serializers/account/virtual.py:19 assets/models/cmd_filter.py:40 #: assets/models/cmd_filter.py:88 common/db/models.py:36 ops/models/adhoc.py:25 #: ops/models/job.py:163 ops/models/playbook.py:31 rbac/models/role.py:37 @@ -1290,9 +1300,9 @@ msgstr "IP 白名单" msgid "Comment" msgstr "备注" -#: accounts/serializers/account/service.py:27 -#: accounts/templates/accounts/backup_account_report.html:38 -#: accounts/templates/accounts/check_account_report.html:38 +#: accounts/serializers/account/service.py:28 +#: accounts/templates/accounts/backup_account_report.html:39 +#: accounts/templates/accounts/check_account_report.html:39 #: assets/serializers/asset/common.py:151 msgid "Accounts amount" msgstr "账号数量" @@ -1386,7 +1396,7 @@ msgid "Name already exists" msgstr "名称已存在" #: accounts/serializers/automations/base.py:31 -#: assets/models/automations/base.py:144 +#: assets/models/automations/base.py:147 #: assets/serializers/automations/base.py:43 msgid "Automation snapshot" msgstr "自动化快照" @@ -1424,7 +1434,7 @@ msgid "Is success" msgstr "是否成功" #: accounts/serializers/automations/change_secret.py:119 -#: assets/models/automations/base.py:160 +#: assets/models/automations/base.py:163 msgid "Automation task execution" msgstr "自动化任务执行历史" @@ -1580,28 +1590,28 @@ msgstr "测试账号可连接性" msgid "Deleted account" msgstr "删除账号" -#: accounts/templates/accounts/backup_account_report.html:13 +#: accounts/templates/accounts/backup_account_report.html:14 msgid "" "The following is a summary of account backup tasks, please review and handle " "them" msgstr "以下是账户备份任务的概要,请查阅并处理" -#: accounts/templates/accounts/backup_account_report.html:22 +#: accounts/templates/accounts/backup_account_report.html:23 #: accounts/templates/accounts/change_secret_failed_info.html:3 -#: accounts/templates/accounts/change_secret_report.html:22 -#: accounts/templates/accounts/check_account_report.html:22 +#: accounts/templates/accounts/change_secret_report.html:24 +#: accounts/templates/accounts/check_account_report.html:23 #: accounts/templates/accounts/gather_account_report.html:23 -#: accounts/templates/accounts/push_account_report.html:22 +#: accounts/templates/accounts/push_account_report.html:24 #: terminal/serializers/task.py:10 msgid "Task name" msgstr "任务名称" -#: accounts/templates/accounts/backup_account_report.html:26 -#: accounts/templates/accounts/change_secret_report.html:26 -#: accounts/templates/accounts/check_account_report.html:26 +#: accounts/templates/accounts/backup_account_report.html:27 +#: accounts/templates/accounts/change_secret_report.html:28 +#: accounts/templates/accounts/check_account_report.html:27 #: accounts/templates/accounts/gather_account_report.html:27 -#: accounts/templates/accounts/push_account_report.html:26 -#: assets/models/automations/base.py:139 audits/models.py:66 +#: accounts/templates/accounts/push_account_report.html:28 +#: assets/models/automations/base.py:142 audits/models.py:66 #: ops/models/base.py:55 ops/models/celery.py:89 ops/models/job.py:239 #: ops/templates/ops/celery_task_log.html:101 #: perms/models/asset_permission.py:78 settings/serializers/feature.py:27 @@ -1612,26 +1622,26 @@ msgstr "任务名称" msgid "Date start" msgstr "开始日期" -#: accounts/templates/accounts/backup_account_report.html:30 -#: accounts/templates/accounts/change_secret_report.html:30 -#: accounts/templates/accounts/check_account_report.html:30 +#: accounts/templates/accounts/backup_account_report.html:31 +#: accounts/templates/accounts/change_secret_report.html:32 +#: accounts/templates/accounts/check_account_report.html:31 #: accounts/templates/accounts/gather_account_report.html:31 -#: accounts/templates/accounts/push_account_report.html:30 +#: accounts/templates/accounts/push_account_report.html:32 #: settings/serializers/feature.py:28 #: settings/templates/ldap/_msg_import_ldap_user.html:6 #: terminal/models/session/session.py:48 msgid "Date end" msgstr "结束日期" -#: accounts/templates/accounts/backup_account_report.html:34 -#: accounts/templates/accounts/change_secret_report.html:34 -#: accounts/templates/accounts/check_account_report.html:34 +#: accounts/templates/accounts/backup_account_report.html:35 +#: accounts/templates/accounts/change_secret_report.html:36 +#: accounts/templates/accounts/check_account_report.html:35 #: accounts/templates/accounts/gather_account_report.html:35 -#: accounts/templates/accounts/push_account_report.html:34 +#: accounts/templates/accounts/push_account_report.html:36 msgid "Time using" msgstr "耗时" -#: accounts/templates/accounts/backup_account_report.html:42 +#: accounts/templates/accounts/backup_account_report.html:43 msgid "Type count" msgstr "类型数" @@ -1649,93 +1659,93 @@ msgid "" "or pushing the account. Please check and handle it in time." msgstr "你好! 以下是资产改密或推送账号失败的情况。 请及时检查并处理。" -#: accounts/templates/accounts/change_secret_report.html:13 +#: accounts/templates/accounts/change_secret_report.html:15 msgid "" "The following is a summary of account change secret tasks, please read and " "process" msgstr "以下是账号更改秘密任务的摘要,请阅读并处理" -#: accounts/templates/accounts/change_secret_report.html:38 +#: accounts/templates/accounts/change_secret_report.html:40 #: accounts/templates/accounts/gather_account_report.html:39 -#: accounts/templates/accounts/push_account_report.html:38 +#: accounts/templates/accounts/push_account_report.html:40 #: assets/serializers/domain.py:24 assets/serializers/platform.py:182 #: orgs/serializers.py:13 perms/serializers/permission.py:50 msgid "Assets amount" msgstr "资产数量" -#: accounts/templates/accounts/change_secret_report.html:42 -#: accounts/templates/accounts/check_account_report.html:50 +#: accounts/templates/accounts/change_secret_report.html:44 +#: accounts/templates/accounts/check_account_report.html:51 #: accounts/templates/accounts/gather_account_report.html:43 -#: accounts/templates/accounts/push_account_report.html:42 +#: accounts/templates/accounts/push_account_report.html:44 msgid "Asset success count" msgstr "资产成功数" -#: accounts/templates/accounts/change_secret_report.html:46 -#: accounts/templates/accounts/check_account_report.html:54 +#: accounts/templates/accounts/change_secret_report.html:48 +#: accounts/templates/accounts/check_account_report.html:55 #: accounts/templates/accounts/gather_account_report.html:47 -#: accounts/templates/accounts/push_account_report.html:46 +#: accounts/templates/accounts/push_account_report.html:48 msgid "Asset failed count" msgstr "资产失败数" -#: accounts/templates/accounts/change_secret_report.html:50 -#: accounts/templates/accounts/check_account_report.html:58 +#: accounts/templates/accounts/change_secret_report.html:52 +#: accounts/templates/accounts/check_account_report.html:59 #: accounts/templates/accounts/gather_account_report.html:51 -#: accounts/templates/accounts/push_account_report.html:50 +#: accounts/templates/accounts/push_account_report.html:52 msgid "Asset not support count" msgstr "资产不支持数" -#: accounts/templates/accounts/change_secret_report.html:61 -#: accounts/templates/accounts/push_account_report.html:61 +#: accounts/templates/accounts/change_secret_report.html:63 +#: accounts/templates/accounts/push_account_report.html:63 msgid "Success accounts" msgstr "成功帐号" -#: accounts/templates/accounts/change_secret_report.html:69 -#: accounts/templates/accounts/change_secret_report.html:101 -#: accounts/templates/accounts/check_account_report.html:77 +#: accounts/templates/accounts/change_secret_report.html:71 +#: accounts/templates/accounts/change_secret_report.html:103 +#: accounts/templates/accounts/check_account_report.html:78 #: accounts/templates/accounts/gather_account_report.html:70 #: accounts/templates/accounts/gather_account_report.html:102 -#: accounts/templates/accounts/push_account_report.html:69 -#: accounts/templates/accounts/push_account_report.html:101 +#: accounts/templates/accounts/push_account_report.html:71 +#: accounts/templates/accounts/push_account_report.html:103 #: audits/handler.py:128 msgid "No" msgstr "否" -#: accounts/templates/accounts/change_secret_report.html:85 -#: accounts/templates/accounts/change_secret_report.html:117 +#: accounts/templates/accounts/change_secret_report.html:87 +#: accounts/templates/accounts/change_secret_report.html:119 #: accounts/templates/accounts/gather_account_report.html:86 #: accounts/templates/accounts/gather_account_report.html:118 -#: accounts/templates/accounts/push_account_report.html:85 -#: accounts/templates/accounts/push_account_report.html:117 +#: accounts/templates/accounts/push_account_report.html:87 +#: accounts/templates/accounts/push_account_report.html:119 msgid "No new accounts found" msgstr "未找到新帐户" -#: accounts/templates/accounts/change_secret_report.html:92 -#: accounts/templates/accounts/push_account_report.html:92 +#: accounts/templates/accounts/change_secret_report.html:94 +#: accounts/templates/accounts/push_account_report.html:94 msgid "Failed accounts" msgstr "失败账号" -#: accounts/templates/accounts/check_account_report.html:13 +#: accounts/templates/accounts/check_account_report.html:14 #: accounts/templates/accounts/gather_account_report.html:14 msgid "" "The following is a summary of the account check tasks. Please review and " "handle them" msgstr "以下是账号检查任务的汇总,请查阅并处理" -#: accounts/templates/accounts/check_account_report.html:42 +#: accounts/templates/accounts/check_account_report.html:43 msgid "Ok count" msgstr "成功数" -#: accounts/templates/accounts/check_account_report.html:46 +#: accounts/templates/accounts/check_account_report.html:47 msgid "No password count" msgstr "无密码数" -#: accounts/templates/accounts/check_account_report.html:80 -#: assets/models/automations/base.py:153 ops/models/base.py:51 +#: accounts/templates/accounts/check_account_report.html:81 +#: assets/models/automations/base.py:156 ops/models/base.py:51 #: ops/models/job.py:235 xpack/plugins/cloud/models.py:225 msgid "Result" msgstr "结果" -#: accounts/templates/accounts/check_account_report.html:95 +#: accounts/templates/accounts/check_account_report.html:96 msgid "No weak password" msgstr "无弱密码" @@ -1747,7 +1757,7 @@ msgstr "新发现的帐户" msgid "Lost accounts" msgstr "丢失的账号" -#: accounts/templates/accounts/push_account_report.html:13 +#: accounts/templates/accounts/push_account_report.html:15 msgid "" "The following is a summary of account push tasks, please read and process" msgstr "以下是账号推送任务的汇总,请阅读并处理" @@ -2054,28 +2064,28 @@ msgstr "同级别节点名字不能重复" msgid "App Assets" msgstr "资产管理" -#: assets/automations/base/manager.py:332 +#: assets/automations/base/manager.py:347 msgid " - Platform {} ansible disabled" msgstr " - 平台 {} Ansible 已禁用, 无法执行任务" -#: assets/automations/base/manager.py:514 +#: assets/automations/base/manager.py:530 msgid ">>> Task preparation phase" msgstr ">>> 任务准备阶段" -#: assets/automations/base/manager.py:518 +#: assets/automations/base/manager.py:534 #, python-brace-format msgid ">>> Executing tasks in batches, total {runner_count}" msgstr ">>> 分次执行任务,总共 {runner_count}" -#: assets/automations/base/manager.py:523 +#: assets/automations/base/manager.py:539 msgid ">>> Start executing tasks" msgstr ">>> 开始执行任务" -#: assets/automations/base/manager.py:525 +#: assets/automations/base/manager.py:541 msgid ">>> No tasks need to be executed" msgstr ">>> 没有需要执行的任务" -#: assets/automations/base/manager.py:529 +#: assets/automations/base/manager.py:545 #, python-brace-format msgid ">>> Begin executing batch {index} of tasks" msgstr ">>> 开始执行第 {index} 批任务" @@ -2505,29 +2515,35 @@ msgstr "节点" msgid "Parameters" msgstr "参数" -#: assets/models/automations/base.py:41 assets/models/automations/base.py:128 +#: assets/models/automations/base.py:31 +#, fuzzy +#| msgid "Last execution" +msgid "Last execution date" +msgstr "最后执行" + +#: assets/models/automations/base.py:44 assets/models/automations/base.py:131 msgid "Automation task" msgstr "自动化任务" -#: assets/models/automations/base.py:119 +#: assets/models/automations/base.py:122 msgid "Asset automation task" msgstr "资产自动化任务" # msgid "Comment" # msgstr "备注" -#: assets/models/automations/base.py:136 assets/models/cmd_filter.py:41 +#: assets/models/automations/base.py:139 assets/models/cmd_filter.py:41 #: common/db/models.py:34 ops/models/base.py:54 ops/models/job.py:238 #: users/models/user/__init__.py:322 msgid "Date created" msgstr "创建日期" -#: assets/models/automations/base.py:150 +#: assets/models/automations/base.py:153 #: assets/serializers/automations/base.py:44 xpack/plugins/cloud/models.py:242 #: xpack/plugins/cloud/serializers/task.py:249 msgid "Trigger mode" msgstr "触发模式" -#: assets/models/automations/base.py:152 audits/serializers.py:39 +#: assets/models/automations/base.py:155 audits/serializers.py:39 #: ops/models/base.py:52 ops/models/job.py:236 #: xpack/plugins/cloud/manager.py:103 msgid "Summary" @@ -7003,7 +7019,9 @@ msgid "User first login update profile done redirect to it" msgstr "用户第一次登录,修改profile后重定向到地址, 可以是 wiki 或 其他说明文档" #: settings/serializers/basic.py:22 -msgid "Global organization" +#, fuzzy +#| msgid "Global organization" +msgid "Global org display" msgstr "全局组织名" #: settings/serializers/basic.py:23 diff --git a/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po b/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po index f455b8750..3892ae09f 100644 --- a/apps/i18n/core/zh_Hant/LC_MESSAGES/django.po +++ b/apps/i18n/core/zh_Hant/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: 2025-02-28 18:37+0800\n" +"POT-Creation-Date: 2025-03-07 15:03+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -25,7 +25,7 @@ msgstr "" msgid "Account already exists" msgstr "帳號已存在" -#: accounts/api/account/application.py:77 +#: accounts/api/account/application.py:78 #: authentication/api/connection_token.py:449 msgid "Account not found" msgstr "帳號未找到" @@ -49,8 +49,8 @@ msgstr "生成資產相關備份信息文件" #: accounts/automations/backup_account/handlers.py:168 #: accounts/automations/backup_account/manager.py:26 #: accounts/automations/change_secret/manager.py:95 -#: accounts/automations/push_account/manager.py:59 -#: assets/models/automations/base.py:142 ops/serializers/job.py:71 +#: accounts/automations/push_account/manager.py:61 +#: assets/models/automations/base.py:145 ops/serializers/job.py:71 #: ops/serializers/job.py:95 #: settings/templates/ldap/_msg_import_ldap_user.html:7 #: terminal/serializers/session.py:49 @@ -61,23 +61,27 @@ msgstr "花費時間" msgid "Backup file creation completed" msgstr "建立備份檔案完成" -#: accounts/automations/backup_account/handlers.py:203 +#: accounts/automations/backup_account/handlers.py:177 +msgid "Start sending backup emails" +msgstr "開始發送備份電子郵件" + +#: accounts/automations/backup_account/handlers.py:204 msgid "Encrypting files using encryption password" msgstr "使用加密密碼對檔案進行加密中" -#: accounts/automations/backup_account/handlers.py:213 +#: accounts/automations/backup_account/handlers.py:214 msgid "The backup file will be sent to" msgstr "備份檔案將被傳送至" -#: accounts/automations/backup_account/handlers.py:236 +#: accounts/automations/backup_account/handlers.py:237 msgid "The backup task has no assigned sftp server" msgstr "該備份任務未分配sftp伺服器" -#: accounts/automations/backup_account/handlers.py:257 +#: accounts/automations/backup_account/handlers.py:258 msgid "The backup task has no assigned recipient" msgstr "備份任務沒有指定收件人" -#: accounts/automations/backup_account/handlers.py:280 +#: accounts/automations/backup_account/handlers.py:281 msgid "Plan start" msgstr "Action開始" @@ -87,11 +91,11 @@ msgstr "帳號備份計劃正在執行" #: accounts/automations/backup_account/manager.py:24 #: accounts/automations/change_secret/manager.py:93 -#: accounts/automations/push_account/manager.py:57 +#: accounts/automations/push_account/manager.py:59 msgid "Plan execution end" msgstr "計劃執行結束" -#: accounts/automations/base/manager.py:106 +#: accounts/automations/base/manager.py:109 msgid "No pending accounts found" msgstr "未找到待處理帳戶" @@ -100,6 +104,12 @@ msgstr "未找到待處理帳戶" msgid "Success: %s, Failed: %s, Total: %s" msgstr "成功: %s, 失敗: %s, 總數: %s" +#: accounts/automations/push_account/manager.py:31 +#, fuzzy +#| msgid "The {} cannot be empty" +msgid "Secret cannot be empty" +msgstr "{} 不能為空" + #: accounts/automations/verify_gateway_account/manager.py:18 msgid ">>> Start executing the task to test gateway account connectivity" msgstr ">>> 開始執行測試閘道器帳號可連結性的任務" @@ -424,13 +434,13 @@ msgstr "用戶 %s 查看/匯出 了密碼" #: accounts/serializers/automations/gather_account.py:47 #: accounts/templates/accounts/asset_account_change_info.html:7 #: accounts/templates/accounts/change_secret_failed_info.html:11 -#: accounts/templates/accounts/change_secret_report.html:70 -#: accounts/templates/accounts/change_secret_report.html:102 -#: accounts/templates/accounts/check_account_report.html:78 +#: accounts/templates/accounts/change_secret_report.html:72 +#: accounts/templates/accounts/change_secret_report.html:104 +#: accounts/templates/accounts/check_account_report.html:79 #: accounts/templates/accounts/gather_account_report.html:71 #: accounts/templates/accounts/gather_account_report.html:103 -#: accounts/templates/accounts/push_account_report.html:70 -#: accounts/templates/accounts/push_account_report.html:102 +#: accounts/templates/accounts/push_account_report.html:72 +#: accounts/templates/accounts/push_account_report.html:104 #: acls/serializers/base.py:130 assets/models/asset/common.py:102 #: assets/models/asset/common.py:366 assets/models/cmd_filter.py:36 #: audits/models.py:59 audits/models.py:312 audits/serializers.py:228 @@ -493,7 +503,7 @@ msgstr "改密狀態" #: accounts/models/account.py:85 #: accounts/models/automations/check_account.py:67 -#: accounts/serializers/account/service.py:10 +#: accounts/serializers/account/service.py:11 #: accounts/serializers/automations/change_secret.py:115 #: accounts/serializers/automations/change_secret.py:146 #: accounts/templates/accounts/change_secret_failed_info.html:12 @@ -537,7 +547,7 @@ msgstr "可以移除帳號" #: accounts/models/application.py:16 #: accounts/models/automations/check_account.py:119 accounts/models/base.py:63 -#: accounts/serializers/account/service.py:26 +#: accounts/serializers/account/service.py:27 #: accounts/serializers/account/virtual.py:20 acls/models/base.py:35 #: acls/models/base.py:96 acls/models/command_acl.py:21 #: acls/serializers/base.py:35 assets/models/asset/common.py:100 @@ -705,7 +715,7 @@ msgstr "SSH 金鑰推送方式" msgid "Check connection after change" msgstr "更改後檢查連接" -#: accounts/models/automations/change_secret.py:16 +#: accounts/models/automations/change_secret.py:17 #: accounts/models/automations/check_account.py:19 #: accounts/models/automations/gather_account.py:92 #: accounts/serializers/automations/change_secret.py:59 @@ -714,22 +724,22 @@ msgstr "更改後檢查連接" msgid "Recipient" msgstr "收件人" -#: accounts/models/automations/change_secret.py:23 +#: accounts/models/automations/change_secret.py:24 msgid "Change secret automation" msgstr "自動化改密" -#: accounts/models/automations/change_secret.py:46 -#: assets/models/automations/base.py:141 ops/models/base.py:56 +#: accounts/models/automations/change_secret.py:47 +#: assets/models/automations/base.py:144 ops/models/base.py:56 #: ops/models/celery.py:90 ops/models/job.py:240 #: terminal/models/applet/host.py:142 msgid "Date finished" msgstr "結束日期" -#: accounts/models/automations/change_secret.py:48 +#: accounts/models/automations/change_secret.py:49 #: accounts/models/automations/check_account.py:75 #: accounts/models/automations/gather_account.py:25 #: accounts/serializers/automations/check_account.py:39 -#: assets/models/automations/base.py:133 +#: assets/models/automations/base.py:136 #: assets/serializers/automations/base.py:45 audits/models.py:209 #: audits/serializers.py:78 ops/models/base.py:49 ops/models/job.py:231 #: terminal/models/applet/applet.py:331 terminal/models/applet/host.py:140 @@ -743,7 +753,7 @@ msgstr "結束日期" msgid "Status" msgstr "狀態" -#: accounts/models/automations/change_secret.py:50 +#: accounts/models/automations/change_secret.py:51 #: accounts/serializers/account/account.py:276 #: accounts/templates/accounts/change_secret_failed_info.html:13 #: assets/const/automation.py:9 @@ -754,19 +764,19 @@ msgstr "狀態" msgid "Error" msgstr "錯誤" -#: accounts/models/automations/change_secret.py:66 +#: accounts/models/automations/change_secret.py:73 msgid "Old secret" msgstr "原金鑰" -#: accounts/models/automations/change_secret.py:67 +#: accounts/models/automations/change_secret.py:74 msgid "New secret" msgstr "新金鑰" -#: accounts/models/automations/change_secret.py:68 +#: accounts/models/automations/change_secret.py:75 msgid "Ignore fail" msgstr "忽略失敗" -#: accounts/models/automations/change_secret.py:71 +#: accounts/models/automations/change_secret.py:78 msgid "Change secret record" msgstr "改密記錄" @@ -820,8 +830,8 @@ msgid "Long time no change" msgstr "長時間未改密" #: accounts/models/automations/check_account.py:52 -#: accounts/templates/accounts/check_account_report.html:69 -#: accounts/templates/accounts/check_account_report.html:89 +#: accounts/templates/accounts/check_account_report.html:70 +#: accounts/templates/accounts/check_account_report.html:90 msgid "Weak password" msgstr "弱密碼" @@ -848,13 +858,13 @@ msgstr "其它" #: accounts/models/automations/check_account.py:64 #: accounts/models/automations/gather_account.py:17 accounts/models/base.py:64 #: accounts/serializers/account/virtual.py:21 -#: accounts/templates/accounts/change_secret_report.html:71 -#: accounts/templates/accounts/change_secret_report.html:103 -#: accounts/templates/accounts/check_account_report.html:79 +#: accounts/templates/accounts/change_secret_report.html:73 +#: accounts/templates/accounts/change_secret_report.html:105 +#: accounts/templates/accounts/check_account_report.html:80 #: accounts/templates/accounts/gather_account_report.html:72 #: accounts/templates/accounts/gather_account_report.html:104 -#: accounts/templates/accounts/push_account_report.html:71 -#: accounts/templates/accounts/push_account_report.html:103 +#: accounts/templates/accounts/push_account_report.html:73 +#: accounts/templates/accounts/push_account_report.html:105 #: acls/serializers/base.py:19 acls/serializers/base.py:50 audits/models.py:189 #: authentication/forms.py:21 authentication/forms.py:23 #: authentication/models/temp_token.py:9 @@ -1272,12 +1282,12 @@ msgstr "" "提示:如果認證時不需要使用者名稱,可填寫為 null,如果是 AD 帳號,格式為 " "username@domain" -#: accounts/serializers/account/service.py:12 +#: accounts/serializers/account/service.py:13 #: authentication/serializers/token.py:22 msgid "Access IP" msgstr "IP 白名單" -#: accounts/serializers/account/service.py:25 +#: accounts/serializers/account/service.py:26 #: accounts/serializers/account/virtual.py:19 assets/models/cmd_filter.py:40 #: assets/models/cmd_filter.py:88 common/db/models.py:36 ops/models/adhoc.py:25 #: ops/models/job.py:163 ops/models/playbook.py:31 rbac/models/role.py:37 @@ -1292,9 +1302,9 @@ msgstr "IP 白名單" msgid "Comment" msgstr "備註" -#: accounts/serializers/account/service.py:27 -#: accounts/templates/accounts/backup_account_report.html:38 -#: accounts/templates/accounts/check_account_report.html:38 +#: accounts/serializers/account/service.py:28 +#: accounts/templates/accounts/backup_account_report.html:39 +#: accounts/templates/accounts/check_account_report.html:39 #: assets/serializers/asset/common.py:151 msgid "Accounts amount" msgstr "帳號數量" @@ -1388,7 +1398,7 @@ msgid "Name already exists" msgstr "名稱已存在" #: accounts/serializers/automations/base.py:31 -#: assets/models/automations/base.py:144 +#: assets/models/automations/base.py:147 #: assets/serializers/automations/base.py:43 msgid "Automation snapshot" msgstr "自動化快照" @@ -1426,7 +1436,7 @@ msgid "Is success" msgstr "是否成功" #: accounts/serializers/automations/change_secret.py:119 -#: assets/models/automations/base.py:160 +#: assets/models/automations/base.py:163 msgid "Automation task execution" msgstr "自動化任務執行歷史" @@ -1583,28 +1593,28 @@ msgstr "測試帳號可連接性" msgid "Deleted account" msgstr "刪除帳號" -#: accounts/templates/accounts/backup_account_report.html:13 +#: accounts/templates/accounts/backup_account_report.html:14 msgid "" "The following is a summary of account backup tasks, please review and handle " "them" msgstr "以下是帳戶備份任務的概要,請查閱並處理。" -#: accounts/templates/accounts/backup_account_report.html:22 +#: accounts/templates/accounts/backup_account_report.html:23 #: accounts/templates/accounts/change_secret_failed_info.html:3 -#: accounts/templates/accounts/change_secret_report.html:22 -#: accounts/templates/accounts/check_account_report.html:22 +#: accounts/templates/accounts/change_secret_report.html:24 +#: accounts/templates/accounts/check_account_report.html:23 #: accounts/templates/accounts/gather_account_report.html:23 -#: accounts/templates/accounts/push_account_report.html:22 +#: accounts/templates/accounts/push_account_report.html:24 #: terminal/serializers/task.py:10 msgid "Task name" msgstr "任務名稱" -#: accounts/templates/accounts/backup_account_report.html:26 -#: accounts/templates/accounts/change_secret_report.html:26 -#: accounts/templates/accounts/check_account_report.html:26 +#: accounts/templates/accounts/backup_account_report.html:27 +#: accounts/templates/accounts/change_secret_report.html:28 +#: accounts/templates/accounts/check_account_report.html:27 #: accounts/templates/accounts/gather_account_report.html:27 -#: accounts/templates/accounts/push_account_report.html:26 -#: assets/models/automations/base.py:139 audits/models.py:66 +#: accounts/templates/accounts/push_account_report.html:28 +#: assets/models/automations/base.py:142 audits/models.py:66 #: ops/models/base.py:55 ops/models/celery.py:89 ops/models/job.py:239 #: ops/templates/ops/celery_task_log.html:101 #: perms/models/asset_permission.py:78 settings/serializers/feature.py:27 @@ -1615,26 +1625,26 @@ msgstr "任務名稱" msgid "Date start" msgstr "開始日期" -#: accounts/templates/accounts/backup_account_report.html:30 -#: accounts/templates/accounts/change_secret_report.html:30 -#: accounts/templates/accounts/check_account_report.html:30 +#: accounts/templates/accounts/backup_account_report.html:31 +#: accounts/templates/accounts/change_secret_report.html:32 +#: accounts/templates/accounts/check_account_report.html:31 #: accounts/templates/accounts/gather_account_report.html:31 -#: accounts/templates/accounts/push_account_report.html:30 +#: accounts/templates/accounts/push_account_report.html:32 #: settings/serializers/feature.py:28 #: settings/templates/ldap/_msg_import_ldap_user.html:6 #: terminal/models/session/session.py:48 msgid "Date end" msgstr "結束日期" -#: accounts/templates/accounts/backup_account_report.html:34 -#: accounts/templates/accounts/change_secret_report.html:34 -#: accounts/templates/accounts/check_account_report.html:34 +#: accounts/templates/accounts/backup_account_report.html:35 +#: accounts/templates/accounts/change_secret_report.html:36 +#: accounts/templates/accounts/check_account_report.html:35 #: accounts/templates/accounts/gather_account_report.html:35 -#: accounts/templates/accounts/push_account_report.html:34 +#: accounts/templates/accounts/push_account_report.html:36 msgid "Time using" msgstr "耗時" -#: accounts/templates/accounts/backup_account_report.html:42 +#: accounts/templates/accounts/backup_account_report.html:43 msgid "Type count" msgstr "類型數" @@ -1652,93 +1662,93 @@ msgid "" "or pushing the account. Please check and handle it in time." msgstr "你好! 以下是資產改密或推送帳戶失敗的情況。 請及時檢查並處理。" -#: accounts/templates/accounts/change_secret_report.html:13 +#: accounts/templates/accounts/change_secret_report.html:15 msgid "" "The following is a summary of account change secret tasks, please read and " "process" msgstr "以下是帳號更改秘密任務的摘要,請閱讀並處理" -#: accounts/templates/accounts/change_secret_report.html:38 +#: accounts/templates/accounts/change_secret_report.html:40 #: accounts/templates/accounts/gather_account_report.html:39 -#: accounts/templates/accounts/push_account_report.html:38 +#: accounts/templates/accounts/push_account_report.html:40 #: assets/serializers/domain.py:24 assets/serializers/platform.py:182 #: orgs/serializers.py:13 perms/serializers/permission.py:50 msgid "Assets amount" msgstr "資產數量" -#: accounts/templates/accounts/change_secret_report.html:42 -#: accounts/templates/accounts/check_account_report.html:50 +#: accounts/templates/accounts/change_secret_report.html:44 +#: accounts/templates/accounts/check_account_report.html:51 #: accounts/templates/accounts/gather_account_report.html:43 -#: accounts/templates/accounts/push_account_report.html:42 +#: accounts/templates/accounts/push_account_report.html:44 msgid "Asset success count" msgstr "資產成功數" -#: accounts/templates/accounts/change_secret_report.html:46 -#: accounts/templates/accounts/check_account_report.html:54 +#: accounts/templates/accounts/change_secret_report.html:48 +#: accounts/templates/accounts/check_account_report.html:55 #: accounts/templates/accounts/gather_account_report.html:47 -#: accounts/templates/accounts/push_account_report.html:46 +#: accounts/templates/accounts/push_account_report.html:48 msgid "Asset failed count" msgstr "資產失敗數" -#: accounts/templates/accounts/change_secret_report.html:50 -#: accounts/templates/accounts/check_account_report.html:58 +#: accounts/templates/accounts/change_secret_report.html:52 +#: accounts/templates/accounts/check_account_report.html:59 #: accounts/templates/accounts/gather_account_report.html:51 -#: accounts/templates/accounts/push_account_report.html:50 +#: accounts/templates/accounts/push_account_report.html:52 msgid "Asset not support count" msgstr "資產不支援數" -#: accounts/templates/accounts/change_secret_report.html:61 -#: accounts/templates/accounts/push_account_report.html:61 +#: accounts/templates/accounts/change_secret_report.html:63 +#: accounts/templates/accounts/push_account_report.html:63 msgid "Success accounts" msgstr "成功帳號" -#: accounts/templates/accounts/change_secret_report.html:69 -#: accounts/templates/accounts/change_secret_report.html:101 -#: accounts/templates/accounts/check_account_report.html:77 +#: accounts/templates/accounts/change_secret_report.html:71 +#: accounts/templates/accounts/change_secret_report.html:103 +#: accounts/templates/accounts/check_account_report.html:78 #: accounts/templates/accounts/gather_account_report.html:70 #: accounts/templates/accounts/gather_account_report.html:102 -#: accounts/templates/accounts/push_account_report.html:69 -#: accounts/templates/accounts/push_account_report.html:101 +#: accounts/templates/accounts/push_account_report.html:71 +#: accounts/templates/accounts/push_account_report.html:103 #: audits/handler.py:128 msgid "No" msgstr "否" -#: accounts/templates/accounts/change_secret_report.html:85 -#: accounts/templates/accounts/change_secret_report.html:117 +#: accounts/templates/accounts/change_secret_report.html:87 +#: accounts/templates/accounts/change_secret_report.html:119 #: accounts/templates/accounts/gather_account_report.html:86 #: accounts/templates/accounts/gather_account_report.html:118 -#: accounts/templates/accounts/push_account_report.html:85 -#: accounts/templates/accounts/push_account_report.html:117 +#: accounts/templates/accounts/push_account_report.html:87 +#: accounts/templates/accounts/push_account_report.html:119 msgid "No new accounts found" msgstr "未找到新帳戶" -#: accounts/templates/accounts/change_secret_report.html:92 -#: accounts/templates/accounts/push_account_report.html:92 +#: accounts/templates/accounts/change_secret_report.html:94 +#: accounts/templates/accounts/push_account_report.html:94 msgid "Failed accounts" msgstr "失敗帳號" -#: accounts/templates/accounts/check_account_report.html:13 +#: accounts/templates/accounts/check_account_report.html:14 #: accounts/templates/accounts/gather_account_report.html:14 msgid "" "The following is a summary of the account check tasks. Please review and " "handle them" msgstr "以下為帳號檢查任務的彙總,請查閱並處理" -#: accounts/templates/accounts/check_account_report.html:42 +#: accounts/templates/accounts/check_account_report.html:43 msgid "Ok count" msgstr "成功數" -#: accounts/templates/accounts/check_account_report.html:46 +#: accounts/templates/accounts/check_account_report.html:47 msgid "No password count" msgstr "無密碼數" -#: accounts/templates/accounts/check_account_report.html:80 -#: assets/models/automations/base.py:153 ops/models/base.py:51 +#: accounts/templates/accounts/check_account_report.html:81 +#: assets/models/automations/base.py:156 ops/models/base.py:51 #: ops/models/job.py:235 xpack/plugins/cloud/models.py:225 msgid "Result" msgstr "結果" -#: accounts/templates/accounts/check_account_report.html:95 +#: accounts/templates/accounts/check_account_report.html:96 msgid "No weak password" msgstr "無弱密碼" @@ -1750,7 +1760,7 @@ msgstr "新發現的帳戶" msgid "Lost accounts" msgstr "遺失的帳號" -#: accounts/templates/accounts/push_account_report.html:13 +#: accounts/templates/accounts/push_account_report.html:15 msgid "" "The following is a summary of account push tasks, please read and process" msgstr "以下是帳號推送任務的彙總,請閱讀並處理" @@ -2057,28 +2067,28 @@ msgstr "同級別節點名字不能重複" msgid "App Assets" msgstr "資產管理" -#: assets/automations/base/manager.py:332 +#: assets/automations/base/manager.py:347 msgid " - Platform {} ansible disabled" msgstr " - 平台 {} Ansible 已禁用, 無法執行任務" -#: assets/automations/base/manager.py:514 +#: assets/automations/base/manager.py:530 msgid ">>> Task preparation phase" msgstr ">>> 任務準備階段" -#: assets/automations/base/manager.py:518 +#: assets/automations/base/manager.py:534 #, python-brace-format msgid ">>> Executing tasks in batches, total {runner_count}" msgstr ">>> 分次執行任務,總共 {runner_count}" -#: assets/automations/base/manager.py:523 +#: assets/automations/base/manager.py:539 msgid ">>> Start executing tasks" msgstr ">>> 開始執行任務" -#: assets/automations/base/manager.py:525 +#: assets/automations/base/manager.py:541 msgid ">>> No tasks need to be executed" msgstr ">>> 沒有需要執行的任務" -#: assets/automations/base/manager.py:529 +#: assets/automations/base/manager.py:545 #, python-brace-format msgid ">>> Begin executing batch {index} of tasks" msgstr ">>> 開始執行第 {index} 批任務" @@ -2508,29 +2518,35 @@ msgstr "節點" msgid "Parameters" msgstr "參數" -#: assets/models/automations/base.py:41 assets/models/automations/base.py:128 +#: assets/models/automations/base.py:31 +#, fuzzy +#| msgid "Last execution" +msgid "Last execution date" +msgstr "最後執行" + +#: assets/models/automations/base.py:44 assets/models/automations/base.py:131 msgid "Automation task" msgstr "自動化任務" -#: assets/models/automations/base.py:119 +#: assets/models/automations/base.py:122 msgid "Asset automation task" msgstr "資產自動化任務" # msgid "Comment" # msgstr "備註" -#: assets/models/automations/base.py:136 assets/models/cmd_filter.py:41 +#: assets/models/automations/base.py:139 assets/models/cmd_filter.py:41 #: common/db/models.py:34 ops/models/base.py:54 ops/models/job.py:238 #: users/models/user/__init__.py:322 msgid "Date created" msgstr "創建日期" -#: assets/models/automations/base.py:150 +#: assets/models/automations/base.py:153 #: assets/serializers/automations/base.py:44 xpack/plugins/cloud/models.py:242 #: xpack/plugins/cloud/serializers/task.py:249 msgid "Trigger mode" msgstr "觸發模式" -#: assets/models/automations/base.py:152 audits/serializers.py:39 +#: assets/models/automations/base.py:155 audits/serializers.py:39 #: ops/models/base.py:52 ops/models/job.py:236 #: xpack/plugins/cloud/manager.py:103 msgid "Summary" @@ -7008,7 +7024,9 @@ msgid "User first login update profile done redirect to it" msgstr "用戶第一次登錄,修改profile後重定向到地址, 可以是 wiki 或 其他說明文件" #: settings/serializers/basic.py:22 -msgid "Global organization" +#, fuzzy +#| msgid "Global organization" +msgid "Global org display" msgstr "全球組織名稱" #: settings/serializers/basic.py:23 diff --git a/apps/i18n/lina/en.json b/apps/i18n/lina/en.json index 1ab7c94a5..f133bb89e 100644 --- a/apps/i18n/lina/en.json +++ b/apps/i18n/lina/en.json @@ -1509,5 +1509,9 @@ "IgnoreAlert": "Ignore alert", "DeleteGatherAccountTitle": "Delete gather account", "DeleteRemoteAccount": "Delete remote account", - "AddAccountAfterChangingPassword": "Add account after changing password" + "AddAccountAfterChangingPassword": "Add account after changing password", + "ExecutionID": "Execution ID", + "Invalid": "Invalid", + "Disabled": "Disabled", + "IgnoreFail": "Ignore fail" } \ No newline at end of file diff --git a/apps/i18n/lina/zh.json b/apps/i18n/lina/zh.json index ceb10623c..d4bd015cc 100644 --- a/apps/i18n/lina/zh.json +++ b/apps/i18n/lina/zh.json @@ -1508,5 +1508,9 @@ "IgnoreAlert": "忽略警报", "DeleteGatherAccountTitle": "删除发现的账号", "DeleteRemoteAccount": "删除远端账号", - "AddAccountAfterChangingPassword": "修改密码后添加账号" + "AddAccountAfterChangingPassword": "修改密码后添加账号", + "ExecutionID": "执行 ID", + "Invalid": "无效", + "Disabled": "已禁用", + "IgnoreFail": "忽略失败" } \ No newline at end of file From 033750f108708fd1c0ee0e3c08a4d9d5d213e577 Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Fri, 7 Mar 2025 17:04:04 +0800 Subject: [PATCH 07/11] perf: execution automation ObjectRelatedField --- apps/assets/serializers/automations/base.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/assets/serializers/automations/base.py b/apps/assets/serializers/automations/base.py index ba534aa2c..071aa066d 100644 --- a/apps/assets/serializers/automations/base.py +++ b/apps/assets/serializers/automations/base.py @@ -43,7 +43,7 @@ class AutomationExecutionSerializer(serializers.ModelSerializer): snapshot = serializers.SerializerMethodField(label=_('Automation snapshot')) trigger = LabeledChoiceField(choices=Trigger.choices, read_only=True, label=_("Trigger mode")) status = LabeledChoiceField(choices=Status.choices, read_only=True, label=_('Status')) - automation = ObjectRelatedField(read_only=True, attrs=('id', 'name')) + automation = ObjectRelatedField(required=False, queryset=BaseAutomation.objects, attrs=('id', 'name')) class Meta: model = AutomationExecution From 090ad0ba837cc4adbac63a83262d40a8d151ac93 Mon Sep 17 00:00:00 2001 From: wangruidong <940853815@qq.com> Date: Fri, 7 Mar 2025 18:11:44 +0800 Subject: [PATCH 08/11] fix: Add drf filter set to SecretRecordMixin --- apps/accounts/filters.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/accounts/filters.py b/apps/accounts/filters.py index b305196df..f4fddae51 100644 --- a/apps/accounts/filters.py +++ b/apps/accounts/filters.py @@ -150,7 +150,7 @@ class GatheredAccountFilterSet(BaseFilterSet): fields = ["id", "username"] -class SecretRecordMixin: +class SecretRecordMixin(drf_filters.FilterSet): asset_name = drf_filters.CharFilter( field_name="asset__name", lookup_expr="icontains" ) From c84bc52c7027762a95bfd32fe5723f495e980708 Mon Sep 17 00:00:00 2001 From: wangruidong <940853815@qq.com> Date: Mon, 10 Mar 2025 10:40:48 +0800 Subject: [PATCH 09/11] perf: Translate check account --- .../automations/check_account/manager.py | 21 +- apps/i18n/core/zh/LC_MESSAGES/django.po | 394 ++++++++++-------- apps/i18n/lina/en.json | 3 +- apps/i18n/lina/zh.json | 3 +- 4 files changed, 226 insertions(+), 195 deletions(-) diff --git a/apps/accounts/automations/check_account/manager.py b/apps/accounts/automations/check_account/manager.py index 02b60b1da..6720fd3c1 100644 --- a/apps/accounts/automations/check_account/manager.py +++ b/apps/accounts/automations/check_account/manager.py @@ -6,6 +6,7 @@ import uuid from django.conf import settings from django.utils import timezone +from django.utils.translation import gettext_lazy as _ from accounts.models import Account, AccountRisk, RiskChoice from assets.automations.base.manager import BaseManager @@ -266,17 +267,13 @@ class CheckAccountManager(BaseManager): return "accounts/check_account_report.html" def print_summary(self): - tmpl = ( - "\n---\nSummary: \nok: %s, weak password: %s, leaked password: %s, " - "repeated password: %s, no secret: %s, using time: %ss" - % ( - self.summary["ok"], - self.summary[RiskChoice.weak_password], - self.summary[RiskChoice.leaked_password], - self.summary[RiskChoice.repeated_password], - - self.summary["no_secret"], - int(self.duration), - ) + tmpl = _("\n---\nSummary: \nok: {}, weak password: {}, leaked password: {}, " + "repeated password: {}, no secret: {}, using time: {}s").format( + self.summary["ok"], + self.summary[RiskChoice.weak_password], + self.summary[RiskChoice.leaked_password], + self.summary[RiskChoice.repeated_password], + self.summary["no_secret"], + int(self.duration) ) print(tmpl) diff --git a/apps/i18n/core/zh/LC_MESSAGES/django.po b/apps/i18n/core/zh/LC_MESSAGES/django.po index 90bd02fdd..0bc11f7d3 100644 --- a/apps/i18n/core/zh/LC_MESSAGES/django.po +++ b/apps/i18n/core/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: 2025-03-07 15:03+0800\n" +"POT-Creation-Date: 2025-03-10 10:34+0800\n" "PO-Revision-Date: 2021-05-20 10:54+0800\n" "Last-Translator: ibuler \n" "Language-Team: JumpServer team\n" @@ -102,9 +102,20 @@ msgstr "未找到待处理帐户" msgid "Success: %s, Failed: %s, Total: %s" msgstr "成功: %s, 失败: %s, 总数: %s" +#: accounts/automations/check_account/manager.py:270 +msgid "" +"\n" +"---\n" +"Summary: \n" +"ok: {}, weak password: {}, leaked password: {}, repeated password: {}, no " +"secret: {}, using time: {}s" +msgstr "" +"\n" +"---\n" +"摘要: \n" +"正常: {}, 弱密码: {}, 泄露密码: {}, 重复密码: {}, 无密码: {}, 耗时: {}秒" + #: accounts/automations/push_account/manager.py:31 -#, fuzzy -#| msgid "The {} cannot be empty" msgid "Secret cannot be empty" msgstr "{} 不能为空" @@ -127,6 +138,8 @@ msgstr ">>> 开始执行测试网关账号可连接性任务" #: users/templates/users/_msg_user_created.html:13 #: users/templates/users/user_password_verify.html:18 #: xpack/plugins/cloud/serializers/account_attrs.py:28 +#: xpack/plugins/cloud/serializers/account_attrs.py:89 +#: xpack/plugins/cloud/serializers/account_attrs.py:96 msgid "Password" msgstr "密码" @@ -421,7 +434,7 @@ msgstr "导出搜素: %s" msgid "User %s view/export secret" msgstr "用户 %s 查看/导出 了密码" -#: accounts/models/account.py:65 +#: accounts/models/account.py:83 #: accounts/models/automations/check_account.py:62 #: accounts/models/automations/gather_account.py:16 #: accounts/serializers/account/account.py:226 @@ -448,11 +461,11 @@ msgstr "用户 %s 查看/导出 了密码" #: terminal/serializers/command.py:17 terminal/serializers/session.py:30 #: terminal/templates/terminal/_msg_command_warning.html:4 #: terminal/templates/terminal/_msg_session_sharing.html:4 -#: tickets/models/ticket/apply_asset.py:16 xpack/plugins/cloud/models.py:290 +#: tickets/models/ticket/apply_asset.py:16 xpack/plugins/cloud/models.py:289 msgid "Asset" msgstr "资产" -#: accounts/models/account.py:69 accounts/models/template.py:16 +#: accounts/models/account.py:87 accounts/models/template.py:16 #: accounts/serializers/account/account.py:233 #: accounts/serializers/account/account.py:284 #: accounts/serializers/account/template.py:35 @@ -460,46 +473,46 @@ msgstr "资产" msgid "Su from" msgstr "切换自" -#: accounts/models/account.py:71 assets/const/protocol.py:195 +#: accounts/models/account.py:89 assets/const/protocol.py:195 #: settings/serializers/auth/cas.py:25 terminal/models/applet/applet.py:36 #: terminal/models/virtualapp/virtualapp.py:21 msgid "Version" msgstr "版本" -#: accounts/models/account.py:73 +#: accounts/models/account.py:91 msgid "historical Account" msgstr "历史账号" -#: accounts/models/account.py:74 +#: accounts/models/account.py:92 msgid "Secret reset" msgstr "可改密" -#: accounts/models/account.py:75 accounts/serializers/account/account.py:228 +#: accounts/models/account.py:93 accounts/serializers/account/account.py:228 #: users/models/user/__init__.py:127 msgid "Source" msgstr "来源" -#: accounts/models/account.py:76 +#: accounts/models/account.py:94 msgid "Source ID" msgstr "来源 ID" -#: accounts/models/account.py:77 +#: accounts/models/account.py:95 msgid "Date last access" msgstr "上次访问日期" -#: accounts/models/account.py:78 +#: accounts/models/account.py:96 msgid "Access by" msgstr "访问方式" -#: accounts/models/account.py:79 +#: accounts/models/account.py:97 msgid "Date change secret" msgstr "密码日期" -#: accounts/models/account.py:81 +#: accounts/models/account.py:99 msgid "Change secret status" msgstr "改密状态" -#: accounts/models/account.py:85 +#: accounts/models/account.py:103 #: accounts/models/automations/check_account.py:67 #: accounts/serializers/account/service.py:11 #: accounts/serializers/automations/change_secret.py:115 @@ -519,27 +532,27 @@ msgstr "改密状态" msgid "Account" msgstr "账号" -#: accounts/models/account.py:91 +#: accounts/models/account.py:109 msgid "Can view asset account secret" msgstr "可以查看资产账号密码" -#: accounts/models/account.py:92 +#: accounts/models/account.py:110 msgid "Can view asset history account" msgstr "可以查看资产历史账号" -#: accounts/models/account.py:93 +#: accounts/models/account.py:111 msgid "Can view asset history account secret" msgstr "可以查看资产历史账号密码" -#: accounts/models/account.py:94 +#: accounts/models/account.py:112 msgid "Can verify account" msgstr "可以验证账号" -#: accounts/models/account.py:95 +#: accounts/models/account.py:113 msgid "Can push account" msgstr "可以推送账号" -#: accounts/models/account.py:96 +#: accounts/models/account.py:114 msgid "Can remove account" msgstr "可以移除账号" @@ -573,8 +586,8 @@ msgstr "可以移除账号" #: terminal/models/virtualapp/virtualapp.py:19 tickets/api/ticket.py:87 #: users/forms/profile.py:33 users/models/group.py:13 #: users/models/preference.py:11 users/models/user/__init__.py:65 -#: xpack/plugins/cloud/models.py:34 xpack/plugins/cloud/models.py:310 -#: xpack/plugins/cloud/serializers/task.py:77 +#: xpack/plugins/cloud/models.py:34 xpack/plugins/cloud/models.py:309 +#: xpack/plugins/cloud/serializers/task.py:75 msgid "Name" msgstr "名称" @@ -746,8 +759,8 @@ msgstr "结束日期" #: terminal/serializers/applet.py:18 terminal/serializers/applet_host.py:148 #: terminal/serializers/virtualapp.py:35 tickets/models/ticket/general.py:284 #: tickets/serializers/super_ticket.py:13 -#: tickets/serializers/ticket/ticket.py:20 xpack/plugins/cloud/models.py:227 -#: xpack/plugins/cloud/models.py:294 +#: tickets/serializers/ticket/ticket.py:20 xpack/plugins/cloud/models.py:226 +#: xpack/plugins/cloud/models.py:293 msgid "Status" msgstr "状态" @@ -873,6 +886,8 @@ msgstr "其它" #: users/forms/profile.py:117 users/models/user/__init__.py:64 #: users/templates/users/_msg_user_created.html:12 #: xpack/plugins/cloud/serializers/account_attrs.py:26 +#: xpack/plugins/cloud/serializers/account_attrs.py:87 +#: xpack/plugins/cloud/serializers/account_attrs.py:94 msgid "Username" msgstr "用户名" @@ -1022,7 +1037,7 @@ msgstr "平台" msgid "Push params" msgstr "账号推送参数" -#: accounts/models/template.py:26 xpack/plugins/cloud/models.py:391 +#: accounts/models/template.py:26 xpack/plugins/cloud/models.py:390 msgid "Account template" msgstr "账号模板" @@ -1213,7 +1228,7 @@ msgstr "已修改" #: ops/models/job.py:155 ops/serializers/job.py:21 #: perms/serializers/permission.py:46 #: terminal/templates/terminal/_msg_command_execute_alert.html:16 -#: xpack/plugins/cloud/manager.py:93 +#: xpack/plugins/cloud/manager.py:83 msgid "Assets" msgstr "资产" @@ -1296,7 +1311,7 @@ msgstr "IP 白名单" #: terminal/models/session/session.py:49 #: terminal/models/virtualapp/virtualapp.py:28 tickets/models/comment.py:32 #: tickets/models/ticket/general.py:298 users/models/user/__init__.py:99 -#: xpack/plugins/cloud/models.py:41 xpack/plugins/cloud/models.py:124 +#: xpack/plugins/cloud/models.py:41 xpack/plugins/cloud/models.py:123 msgid "Comment" msgstr "备注" @@ -1741,7 +1756,7 @@ msgstr "无密码数" #: accounts/templates/accounts/check_account_report.html:81 #: assets/models/automations/base.py:156 ops/models/base.py:51 -#: ops/models/job.py:235 xpack/plugins/cloud/models.py:225 +#: ops/models/job.py:235 xpack/plugins/cloud/models.py:224 msgid "Result" msgstr "结果" @@ -1810,12 +1825,12 @@ msgid "Face Online" msgstr "人脸在线" #: acls/models/base.py:37 assets/models/cmd_filter.py:76 -#: terminal/models/component/endpoint.py:115 xpack/plugins/cloud/models.py:316 +#: terminal/models/component/endpoint.py:115 xpack/plugins/cloud/models.py:315 msgid "Priority" msgstr "优先级" #: acls/models/base.py:38 assets/models/cmd_filter.py:76 -#: terminal/models/component/endpoint.py:116 xpack/plugins/cloud/models.py:317 +#: terminal/models/component/endpoint.py:116 xpack/plugins/cloud/models.py:316 msgid "1-100, the lower the value will be match first" msgstr "优先级可选范围为 1-100 (数值越小越优先)" @@ -1849,13 +1864,13 @@ msgid "Command" msgstr "命令" #: acls/models/command_acl.py:17 assets/models/cmd_filter.py:59 -#: xpack/plugins/cloud/models.py:357 +#: xpack/plugins/cloud/models.py:356 msgid "Regex" msgstr "正则表达式" #: acls/models/command_acl.py:26 assets/models/cmd_filter.py:79 #: settings/models.py:187 settings/serializers/feature.py:22 -#: settings/serializers/msg.py:78 xpack/plugins/license/models.py:31 +#: settings/serializers/msg.py:78 xpack/plugins/license/models.py:30 msgid "Content" msgstr "内容" @@ -1934,8 +1949,8 @@ msgid "" "10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64 (Domain name " "support)" msgstr "" -"* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:" -"db8:2de::e13, 2001:db8:1a:1110::/64 (支持网域)" +"* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, " +"2001:db8:2de::e13, 2001:db8:1a:1110::/64 (支持网域)" #: acls/serializers/base.py:41 assets/serializers/asset/host.py:19 msgid "IP/Host" @@ -1954,7 +1969,7 @@ msgid "None of the reviewers belong to Organization `{}`" msgstr "所有复核人都不属于组织 `{}`" #: acls/serializers/rules/rules.py:20 -#: xpack/plugins/cloud/serializers/task.py:152 +#: xpack/plugins/cloud/serializers/task.py:150 msgid "IP address invalid: `{}`" msgstr "IP 地址无效: `{}`" @@ -1963,14 +1978,14 @@ msgid "" "With * indicating a match all. Such as: 192.168.10.1, 192.168.1.0/24, " "10.1.1.1-10.1.1.20, 2001:db8:2de::e13, 2001:db8:1a:1110::/64 " msgstr "" -"* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, 2001:" -"db8:2de::e13, 2001:db8:1a:1110::/64" +"* 表示匹配所有。例如: 192.168.10.1, 192.168.1.0/24, 10.1.1.1-10.1.1.20, " +"2001:db8:2de::e13, 2001:db8:1a:1110::/64" #: acls/serializers/rules/rules.py:33 #: 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 -#: common/drf/renders/base.py:150 xpack/plugins/cloud/models.py:393 +#: common/drf/renders/base.py:150 xpack/plugins/cloud/models.py:391 msgid "IP" msgstr "IP" @@ -2164,7 +2179,7 @@ msgstr "脚本" #: settings/serializers/auth/radius.py:17 settings/serializers/auth/sms.py:76 #: settings/serializers/feature.py:81 settings/serializers/feature.py:94 #: settings/serializers/msg.py:30 terminal/models/component/endpoint.py:14 -#: terminal/serializers/applet.py:17 xpack/plugins/cloud/manager.py:93 +#: terminal/serializers/applet.py:17 xpack/plugins/cloud/manager.py:83 #: xpack/plugins/cloud/serializers/account_attrs.py:72 msgid "Host" msgstr "主机" @@ -2183,7 +2198,8 @@ msgstr "云服务" msgid "Web" msgstr "Web" -#: assets/const/category.py:15 common/sdk/sms/endpoint.py:20 +#: assets/const/category.py:15 common/sdk/sms/custom_file.py:47 +#: common/sdk/sms/endpoint.py:20 msgid "Custom type" msgstr "自定义类型" @@ -2435,7 +2451,7 @@ msgstr "地址" #: assets/serializers/asset/common.py:150 #: authentication/backends/passkey/models.py:12 #: authentication/serializers/connect_token_secret.py:118 -#: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:387 +#: perms/serializers/user_permission.py:25 xpack/plugins/cloud/models.py:386 msgid "Platform" msgstr "平台" @@ -2506,7 +2522,7 @@ msgstr "代理" #: assets/models/automations/base.py:23 assets/models/cmd_filter.py:32 #: assets/models/node.py:553 ops/models/job.py:156 #: perms/models/asset_permission.py:72 tickets/models/ticket/apply_asset.py:14 -#: xpack/plugins/cloud/models.py:388 +#: xpack/plugins/cloud/models.py:387 msgid "Node" msgstr "节点" @@ -2538,14 +2554,14 @@ msgid "Date created" msgstr "创建日期" #: assets/models/automations/base.py:153 -#: assets/serializers/automations/base.py:44 xpack/plugins/cloud/models.py:242 -#: xpack/plugins/cloud/serializers/task.py:249 +#: assets/serializers/automations/base.py:44 xpack/plugins/cloud/models.py:241 +#: xpack/plugins/cloud/serializers/task.py:247 msgid "Trigger mode" msgstr "触发模式" #: assets/models/automations/base.py:155 audits/serializers.py:39 #: ops/models/base.py:52 ops/models/job.py:236 -#: xpack/plugins/cloud/manager.py:103 +#: xpack/plugins/cloud/manager.py:87 msgid "Summary" msgstr "汇总" @@ -2632,7 +2648,7 @@ msgstr "值" #: assets/serializers/platform.py:159 #: authentication/serializers/connect_token_secret.py:124 #: common/serializers/common.py:85 labels/serializers.py:45 -#: settings/serializers/msg.py:90 xpack/plugins/cloud/models.py:392 +#: settings/serializers/msg.py:90 msgid "Label" msgstr "标签" @@ -2845,8 +2861,8 @@ msgstr "节点路径,格式为 [\"/组织/节点名\"], 如果节点不存在 #: authentication/serializers/connect_token_secret.py:30 #: authentication/serializers/connect_token_secret.py:75 #: perms/models/asset_permission.py:76 perms/serializers/permission.py:56 -#: perms/serializers/user_permission.py:74 xpack/plugins/cloud/models.py:390 -#: xpack/plugins/cloud/serializers/task.py:36 +#: perms/serializers/user_permission.py:74 xpack/plugins/cloud/models.py:389 +#: xpack/plugins/cloud/serializers/task.py:35 msgid "Protocols" msgstr "协议组" @@ -2872,7 +2888,7 @@ msgstr "端口超出范围 (0-65535)" msgid "Protocol is required: {}" msgstr "协议是必填的: {}" -#: assets/serializers/asset/common.py:350 +#: assets/serializers/asset/common.py:350 labels/api.py:107 msgid "Invalid data" msgstr "无效的数据" @@ -3265,7 +3281,7 @@ msgstr "映射目录" #: audits/const.py:23 rbac/tree.py:268 terminal/api/session/session.py:284 #: terminal/templates/terminal/_msg_command_warning.html:18 #: terminal/templates/terminal/_msg_session_sharing.html:10 -#: xpack/plugins/cloud/manager.py:94 +#: xpack/plugins/cloud/manager.py:84 msgid "View" msgstr "查看" @@ -3419,7 +3435,7 @@ msgid "MFA" msgstr "MFA" #: audits/models.py:204 terminal/models/session/sharing.py:125 -#: xpack/plugins/cloud/manager.py:180 xpack/plugins/cloud/models.py:231 +#: xpack/plugins/cloud/manager.py:158 xpack/plugins/cloud/models.py:230 msgid "Reason" msgstr "原因" @@ -4146,13 +4162,13 @@ msgstr "私有令牌" #: authentication/models/ssh_key.py:15 terminal/serializers/storage.py:146 #: users/models/user/__init__.py:94 -#: xpack/plugins/cloud/serializers/account_attrs.py:214 +#: xpack/plugins/cloud/serializers/account_attrs.py:213 msgid "Private key" msgstr "ssh私钥" #: authentication/models/ssh_key.py:18 settings/serializers/terminal.py:34 #: users/forms/profile.py:175 users/models/user/__init__.py:97 -#: xpack/plugins/cloud/serializers/account_attrs.py:211 +#: xpack/plugins/cloud/serializers/account_attrs.py:210 msgid "Public key" msgstr "SSH公钥" @@ -4190,7 +4206,7 @@ msgid "Component" msgstr "组件" #: authentication/serializers/connect_token_secret.py:136 -#: perms/serializers/user_permission.py:28 xpack/plugins/cloud/models.py:389 +#: perms/serializers/user_permission.py:28 xpack/plugins/cloud/models.py:388 msgid "Domain" msgstr "网域" @@ -4699,26 +4715,27 @@ msgid "Confirmed" msgstr "确认" #: common/const/choices.py:120 terminal/models/applet/applet.py:31 +#: xpack/plugins/license/models.py:88 msgid "Community edition" msgstr "社区版" -#: common/const/choices.py:121 +#: common/const/choices.py:121 xpack/plugins/license/models.py:80 msgid "Basic edition" msgstr "企业基础版" -#: common/const/choices.py:122 +#: common/const/choices.py:122 xpack/plugins/license/models.py:82 msgid "Standard edition" msgstr "企业标准版" -#: common/const/choices.py:123 +#: common/const/choices.py:123 xpack/plugins/license/models.py:84 msgid "Professional edition" msgstr "企业专业版" -#: common/const/choices.py:124 +#: common/const/choices.py:124 xpack/plugins/license/models.py:86 msgid "Ultimate edition" msgstr "企业旗舰版" -#: common/const/common.py:5 xpack/plugins/cloud/manager.py:427 +#: common/const/common.py:5 xpack/plugins/cloud/manager.py:411 #, python-format msgid "%(name)s was created successfully" msgstr "%(name)s 创建成功" @@ -4782,8 +4799,8 @@ msgstr "无效的ID,应为列表" #: common/serializers/fields.py:146 terminal/serializers/session.py:81 #: tickets/serializers/ticket/common.py:58 #: xpack/plugins/cloud/serializers/account_attrs.py:56 -#: xpack/plugins/cloud/serializers/account_attrs.py:80 -#: xpack/plugins/cloud/serializers/account_attrs.py:151 +#: xpack/plugins/cloud/serializers/account_attrs.py:79 +#: xpack/plugins/cloud/serializers/account_attrs.py:150 msgid "This field is required." msgstr "该字段是必填项。" @@ -4976,6 +4993,10 @@ msgstr "自定义短信文件无效" msgid "SMS sending failed[%s]: %s" msgstr "短信发送失败[%s]: %s" +#: common/sdk/sms/custom_file.py:47 common/serializers/common.py:98 +msgid "File" +msgstr "文件" + #: common/sdk/sms/endpoint.py:16 msgid "Alibaba cloud" msgstr "阿里云" @@ -5020,10 +5041,6 @@ msgstr "请在 {} 秒后发送" msgid "Children" msgstr "节点" -#: common/serializers/common.py:98 -msgid "File" -msgstr "文件" - #: common/serializers/fields.py:139 msgid "Invalid data type" msgstr "无效的数据" @@ -5144,6 +5161,10 @@ msgstr "你的账号已创建成功" msgid "JumpServer - An open-source PAM" msgstr "JumpServer 开源堡垒机" +#: jumpserver/context_processor.py:28 +msgid "FIT2CLOUD" +msgstr "" + #: jumpserver/views/celery_flower.py:22 msgid "

Flower service unavailable, check it

" msgstr "Flower 服务不可用,请检查" @@ -6213,7 +6234,7 @@ msgstr "系统设置" msgid "Session audits" msgstr "会话审计" -#: rbac/tree.py:49 xpack/plugins/cloud/manager.py:94 +#: rbac/tree.py:49 xpack/plugins/cloud/manager.py:84 msgid "Cloud import" msgstr "云同步" @@ -6252,7 +6273,7 @@ msgid "Appearance" msgstr "界面" #: rbac/tree.py:65 xpack/plugins/license/meta.py:10 -#: xpack/plugins/license/models.py:153 +#: xpack/plugins/license/models.py:144 msgid "License" msgstr "许可证" @@ -6988,7 +7009,7 @@ msgid "SSO auth key TTL" msgstr "令牌有效期" #: settings/serializers/auth/sso.py:20 -#: xpack/plugins/cloud/serializers/account_attrs.py:201 +#: xpack/plugins/cloud/serializers/account_attrs.py:200 msgid "Unit: second" msgstr "单位: 秒" @@ -7146,8 +7167,8 @@ msgid "Tenant ID" msgstr "租户 ID" #: settings/serializers/feature.py:110 terminal/serializers/storage.py:68 -#: xpack/plugins/cloud/manager.py:111 xpack/plugins/cloud/manager.py:116 -#: xpack/plugins/cloud/models.py:287 +#: xpack/plugins/cloud/manager.py:100 xpack/plugins/cloud/manager.py:131 +#: xpack/plugins/cloud/models.py:286 msgid "Region" msgstr "地域" @@ -8061,7 +8082,7 @@ msgstr "无法删除正在使用的存储: {}" msgid "Command storages" msgstr "命令存储" -#: terminal/api/component/storage.py:84 xpack/plugins/cloud/manager.py:111 +#: terminal/api/component/storage.py:84 msgid "Invalid" msgstr "无效" @@ -8094,7 +8115,7 @@ msgstr "会话不存在: {}" msgid "Session is finished or the protocol not supported" msgstr "会话已经完成或协议不支持" -#: terminal/api/session/session.py:345 +#: terminal/api/session/session.py:345 tickets/api/ticket.py:140 msgid "User does not have permission" msgstr "用户没有权限" @@ -8643,9 +8664,9 @@ msgid "" "days. Detail" msgstr "" -"如果不存在,RDS 将处于试用模式,试用期为 120 天。详情" +"如果不存在,RDS 将处于试用模式,试用期为 120 天。详情" #: terminal/serializers/applet_host.py:55 msgid "RDS License Server" @@ -8879,8 +8900,8 @@ msgid "" "If there are multiple hosts, use a comma (,) to separate them.
(For " "example: http://www.jumpserver.a.com:9100, http://www.jumpserver.b.com:9100)" msgstr "" -"如果有多个主机,请用逗号 (,) 分隔它们。
(例如:http://www.jumpserver.a." -"com:9100,http://www.jumpserver.b.com:9100)" +"如果有多个主机,请用逗号 (,) 分隔它们。
(例如:http://" +"www.jumpserver.a.com:9100,http://www.jumpserver.b.com:9100)" #: terminal/serializers/storage.py:199 msgid "Index by date" @@ -9952,11 +9973,11 @@ msgid "" msgstr "" "管理员已开启'仅允许已存在用户登录',当前用户不在用户列表中,请联系管理员。" -#: users/signal_handlers.py:197 +#: users/signal_handlers.py:177 msgid "Clean up expired user sessions" msgstr "清除过期的用户会话" -#: users/signal_handlers.py:199 +#: users/signal_handlers.py:179 msgid "" "After logging in via the web, a user session record is created. At 2 a.m. " "every day, \n" @@ -10411,7 +10432,7 @@ msgstr "私有IP" msgid "Public IP" msgstr "公网IP" -#: xpack/plugins/cloud/const.py:42 xpack/plugins/cloud/models.py:361 +#: xpack/plugins/cloud/const.py:42 xpack/plugins/cloud/models.py:360 msgid "Instance name" msgstr "实例名称" @@ -10423,19 +10444,19 @@ msgstr "实例名称和部分IP" msgid "Succeed" msgstr "成功" -#: xpack/plugins/cloud/const.py:52 xpack/plugins/cloud/manager.py:99 +#: xpack/plugins/cloud/const.py:52 xpack/plugins/cloud/manager.py:90 msgid "Unsync" msgstr "未同步" -#: xpack/plugins/cloud/const.py:53 xpack/plugins/cloud/manager.py:98 +#: xpack/plugins/cloud/const.py:53 xpack/plugins/cloud/manager.py:89 msgid "New Sync" msgstr "新同步" -#: xpack/plugins/cloud/const.py:54 xpack/plugins/cloud/manager.py:98 +#: xpack/plugins/cloud/const.py:54 xpack/plugins/cloud/manager.py:89 msgid "Synced" msgstr "已同步" -#: xpack/plugins/cloud/const.py:55 xpack/plugins/cloud/manager.py:100 +#: xpack/plugins/cloud/const.py:55 xpack/plugins/cloud/manager.py:90 msgid "Released" msgstr "已释放" @@ -10455,97 +10476,92 @@ msgstr "已同步组织" msgid "Imported" msgstr "导入" -#: xpack/plugins/cloud/manager.py:52 +#: xpack/plugins/cloud/manager.py:47 #, python-format msgid "Task \"%s\" starts executing" msgstr "任务 \"%s\" 开始执行" -#: xpack/plugins/cloud/manager.py:91 +#: xpack/plugins/cloud/manager.py:81 msgid "View the task details path: " msgstr "查看详情" -#: xpack/plugins/cloud/manager.py:94 +#: xpack/plugins/cloud/manager.py:84 msgid "Account Details" msgstr "账号" -#: xpack/plugins/cloud/manager.py:95 +#: xpack/plugins/cloud/manager.py:85 msgid "Synchronization History List" msgstr "同步历史列表" -#: xpack/plugins/cloud/manager.py:95 +#: xpack/plugins/cloud/manager.py:85 msgid "Synchronization Instance List" msgstr "同步实例列表" -#: xpack/plugins/cloud/manager.py:99 -msgid "To be released" -msgstr "待释放" - -#: xpack/plugins/cloud/manager.py:103 +#: xpack/plugins/cloud/manager.py:93 msgid "Task execution completed" msgstr "任务执行完成" -#: xpack/plugins/cloud/manager.py:108 +#: xpack/plugins/cloud/manager.py:97 msgid "Synchronization regions" msgstr "同步地区" -#: xpack/plugins/cloud/manager.py:133 +#: xpack/plugins/cloud/manager.py:115 #, python-format msgid "Get instances of region \"%s\" error, error: %s" msgstr "获取区域 \"%s\" 的实例错误,错误:%s" -#: xpack/plugins/cloud/manager.py:179 +#: xpack/plugins/cloud/manager.py:131 xpack/plugins/cloud/models.py:283 +msgid "Instance" +msgstr "实例" + +#: xpack/plugins/cloud/manager.py:157 #, python-format msgid "Failed to synchronize the instance \"%s\"" msgstr "无法同步实例 %s" -#: xpack/plugins/cloud/manager.py:357 +#: xpack/plugins/cloud/manager.py:336 #, python-format msgid "" "The updated platform of asset \"%s\" is inconsistent with the original " "platform type. Skip platform and protocol updates" msgstr "资产 \"%s\" 的更新平台与原平台类型不一致。跳过平台和协议更新" -#: xpack/plugins/cloud/manager.py:409 +#: xpack/plugins/cloud/manager.py:392 #, python-format msgid "The asset \"%s\" already exists" msgstr "资产 \"%s\" 已存在" -#: xpack/plugins/cloud/manager.py:411 +#: xpack/plugins/cloud/manager.py:394 #, python-format msgid "Update asset \"%s\"" msgstr "更新资产 \"%s\"" -#: xpack/plugins/cloud/manager.py:414 +#: xpack/plugins/cloud/manager.py:397 #, python-format msgid "Asset \"%s\" has been updated" msgstr "资产 \"%s\" 已更新" -#: xpack/plugins/cloud/manager.py:423 +#: xpack/plugins/cloud/manager.py:407 #, python-format msgid "Prepare to create asset \"%s\"" msgstr "准备创建资产 %s" -#: xpack/plugins/cloud/manager.py:444 +#: xpack/plugins/cloud/manager.py:428 #, python-format msgid "Set nodes \"%s\"" msgstr "设置节点: \"%s\"" -#: xpack/plugins/cloud/manager.py:470 +#: xpack/plugins/cloud/manager.py:454 #, python-format msgid "Set accounts \"%s\"" msgstr "设置账号: %s" -#: xpack/plugins/cloud/manager.py:486 +#: xpack/plugins/cloud/manager.py:470 #, python-format msgid "Set protocols \"%s\"" msgstr "设置协议 \"%s\"" -#: xpack/plugins/cloud/manager.py:494 -#, python-format -msgid "Set labels \"%s\"" -msgstr "设置标签: \"%s\"" - -#: xpack/plugins/cloud/manager.py:508 xpack/plugins/cloud/tasks.py:31 +#: xpack/plugins/cloud/manager.py:484 xpack/plugins/cloud/tasks.py:31 msgid "Run sync instance task" msgstr "执行同步实例任务" @@ -10572,8 +10588,8 @@ msgstr "测试云账号" #: xpack/plugins/cloud/models.py:104 #: xpack/plugins/cloud/serializers/account.py:76 -#: xpack/plugins/cloud/serializers/task.py:159 -#: xpack/plugins/cloud/serializers/task.py:160 +#: xpack/plugins/cloud/serializers/task.py:157 +#: xpack/plugins/cloud/serializers/task.py:158 msgid "Regions" msgstr "地域" @@ -10586,7 +10602,7 @@ msgid "IP network segment group" msgstr "IP网段组" #: xpack/plugins/cloud/models.py:116 -#: xpack/plugins/cloud/serializers/task.py:163 +#: xpack/plugins/cloud/serializers/task.py:161 msgid "Preferred IP type" msgstr "首选 IP 类型" @@ -10598,124 +10614,116 @@ msgstr "总是更新" msgid "Fully synchronous" msgstr "完全同步" -#: xpack/plugins/cloud/models.py:122 -msgid "Release assets" -msgstr "发布资产" - -#: xpack/plugins/cloud/models.py:127 +#: xpack/plugins/cloud/models.py:126 msgid "Date last sync" msgstr "最后同步日期" -#: xpack/plugins/cloud/models.py:130 xpack/plugins/cloud/models.py:379 -#: xpack/plugins/cloud/models.py:406 +#: xpack/plugins/cloud/models.py:129 xpack/plugins/cloud/models.py:378 +#: xpack/plugins/cloud/models.py:404 msgid "Strategy" msgstr "策略" -#: xpack/plugins/cloud/models.py:135 xpack/plugins/cloud/models.py:223 +#: xpack/plugins/cloud/models.py:134 xpack/plugins/cloud/models.py:222 msgid "Sync instance task" msgstr "同步实例任务" -#: xpack/plugins/cloud/models.py:234 xpack/plugins/cloud/models.py:297 +#: xpack/plugins/cloud/models.py:233 xpack/plugins/cloud/models.py:296 msgid "Date sync" msgstr "同步日期" -#: xpack/plugins/cloud/models.py:238 +#: xpack/plugins/cloud/models.py:237 msgid "Sync instance snapshot" msgstr "同步实例快照" -#: xpack/plugins/cloud/models.py:246 +#: xpack/plugins/cloud/models.py:245 msgid "Sync instance task execution" msgstr "同步实例任务执行" -#: xpack/plugins/cloud/models.py:277 +#: xpack/plugins/cloud/models.py:276 msgid "Sync task" msgstr "同步任务" -#: xpack/plugins/cloud/models.py:281 +#: xpack/plugins/cloud/models.py:280 msgid "Sync instance task history" msgstr "同步实例任务历史" -#: xpack/plugins/cloud/models.py:284 -msgid "Instance" -msgstr "实例" - -#: xpack/plugins/cloud/models.py:301 +#: xpack/plugins/cloud/models.py:300 msgid "Sync instance detail" msgstr "同步实例详情" -#: xpack/plugins/cloud/models.py:313 xpack/plugins/cloud/serializers/task.py:79 +#: xpack/plugins/cloud/models.py:312 xpack/plugins/cloud/serializers/task.py:77 msgid "Rule relation" msgstr "条件关系" -#: xpack/plugins/cloud/models.py:323 +#: xpack/plugins/cloud/models.py:322 msgid "Task strategy" msgstr "任务策略" -#: xpack/plugins/cloud/models.py:350 +#: xpack/plugins/cloud/models.py:349 msgid "Equal" msgstr "等于" -#: xpack/plugins/cloud/models.py:351 +#: xpack/plugins/cloud/models.py:350 msgid "Not Equal" msgstr "不等于" -#: xpack/plugins/cloud/models.py:352 +#: xpack/plugins/cloud/models.py:351 msgid "In" msgstr "在...中" -#: xpack/plugins/cloud/models.py:353 +#: xpack/plugins/cloud/models.py:352 msgid "Contains" msgstr "包含" -#: xpack/plugins/cloud/models.py:354 +#: xpack/plugins/cloud/models.py:353 msgid "Exclude" msgstr "排除" -#: xpack/plugins/cloud/models.py:355 +#: xpack/plugins/cloud/models.py:354 msgid "Startswith" msgstr "以...开头" -#: xpack/plugins/cloud/models.py:356 +#: xpack/plugins/cloud/models.py:355 msgid "Endswith" msgstr "以...结尾" -#: xpack/plugins/cloud/models.py:362 +#: xpack/plugins/cloud/models.py:361 msgid "Instance platform" msgstr "实例平台" -#: xpack/plugins/cloud/models.py:363 +#: xpack/plugins/cloud/models.py:362 msgid "Instance address" msgstr "实例地址" -#: xpack/plugins/cloud/models.py:370 +#: xpack/plugins/cloud/models.py:369 msgid "Rule attr" msgstr "规则属性" -#: xpack/plugins/cloud/models.py:374 +#: xpack/plugins/cloud/models.py:373 msgid "Rule match" msgstr "规则匹配" -#: xpack/plugins/cloud/models.py:376 +#: xpack/plugins/cloud/models.py:375 msgid "Rule value" msgstr "规则值" -#: xpack/plugins/cloud/models.py:383 xpack/plugins/cloud/serializers/task.py:82 +#: xpack/plugins/cloud/models.py:382 xpack/plugins/cloud/serializers/task.py:80 msgid "Strategy rule" msgstr "条件" -#: xpack/plugins/cloud/models.py:394 +#: xpack/plugins/cloud/models.py:392 msgid "Name strategy" msgstr "主机名策略" -#: xpack/plugins/cloud/models.py:401 +#: xpack/plugins/cloud/models.py:399 msgid "Action attr" msgstr "动作属性" -#: xpack/plugins/cloud/models.py:403 +#: xpack/plugins/cloud/models.py:401 msgid "Action value" msgstr "动作值" -#: xpack/plugins/cloud/models.py:410 xpack/plugins/cloud/serializers/task.py:85 +#: xpack/plugins/cloud/models.py:408 xpack/plugins/cloud/serializers/task.py:83 msgid "Strategy action" msgstr "动作" @@ -10939,55 +10947,57 @@ msgstr "Access key id" msgid "Subscription ID" msgstr "订阅 ID" -#: xpack/plugins/cloud/serializers/account_attrs.py:74 -msgid "Auto node classification" -msgstr "自动节点分类" +#: xpack/plugins/cloud/serializers/account_attrs.py:92 +#, fuzzy +#| msgid "Container name" +msgid "domain_name" +msgstr "容器名称" -#: xpack/plugins/cloud/serializers/account_attrs.py:99 -#: xpack/plugins/cloud/serializers/account_attrs.py:103 -#: xpack/plugins/cloud/serializers/account_attrs.py:127 -#: xpack/plugins/cloud/serializers/account_attrs.py:157 -#: xpack/plugins/cloud/serializers/account_attrs.py:207 +#: xpack/plugins/cloud/serializers/account_attrs.py:98 +#: xpack/plugins/cloud/serializers/account_attrs.py:102 +#: xpack/plugins/cloud/serializers/account_attrs.py:126 +#: xpack/plugins/cloud/serializers/account_attrs.py:156 +#: xpack/plugins/cloud/serializers/account_attrs.py:206 msgid "API Endpoint" msgstr "API 端点" -#: xpack/plugins/cloud/serializers/account_attrs.py:109 +#: xpack/plugins/cloud/serializers/account_attrs.py:108 msgid "Auth url" msgstr "认证地址" -#: xpack/plugins/cloud/serializers/account_attrs.py:110 +#: xpack/plugins/cloud/serializers/account_attrs.py:109 msgid "eg: http://openstack.example.com:5000/v3" msgstr "如: http://openstack.example.com:5000/v3" -#: xpack/plugins/cloud/serializers/account_attrs.py:113 +#: xpack/plugins/cloud/serializers/account_attrs.py:112 msgid "User domain" msgstr "用户域" -#: xpack/plugins/cloud/serializers/account_attrs.py:128 +#: xpack/plugins/cloud/serializers/account_attrs.py:127 msgid "Cert File" msgstr "证书文件" -#: xpack/plugins/cloud/serializers/account_attrs.py:129 +#: xpack/plugins/cloud/serializers/account_attrs.py:128 msgid "Key File" msgstr "密钥文件" -#: xpack/plugins/cloud/serializers/account_attrs.py:145 +#: xpack/plugins/cloud/serializers/account_attrs.py:144 msgid "Service account key" msgstr "服务帐号密钥" -#: xpack/plugins/cloud/serializers/account_attrs.py:146 +#: xpack/plugins/cloud/serializers/account_attrs.py:145 msgid "The file is in JSON format" msgstr "JSON 格式的文件" -#: xpack/plugins/cloud/serializers/account_attrs.py:164 +#: xpack/plugins/cloud/serializers/account_attrs.py:163 msgid "IP address invalid `{}`, {}" msgstr "IP 地址无效: `{}`, {}" -#: xpack/plugins/cloud/serializers/account_attrs.py:180 +#: xpack/plugins/cloud/serializers/account_attrs.py:179 msgid "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:183 +#: xpack/plugins/cloud/serializers/account_attrs.py:182 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 " @@ -10996,31 +11006,31 @@ msgstr "" "端口用来检测 IP 地址的有效性,在同步任务执行时,只会同步有效的 IP 地址。
" "如果端口为 0,则表示所有 IP 地址均有效。" -#: xpack/plugins/cloud/serializers/account_attrs.py:191 +#: xpack/plugins/cloud/serializers/account_attrs.py:190 msgid "Hostname prefix" msgstr "主机名前缀" -#: xpack/plugins/cloud/serializers/account_attrs.py:194 +#: xpack/plugins/cloud/serializers/account_attrs.py:193 msgid "IP segment" msgstr "IP 网段" -#: xpack/plugins/cloud/serializers/account_attrs.py:198 +#: xpack/plugins/cloud/serializers/account_attrs.py:197 msgid "Test port" msgstr "测试端口" -#: xpack/plugins/cloud/serializers/account_attrs.py:201 +#: xpack/plugins/cloud/serializers/account_attrs.py:200 msgid "Test timeout" msgstr "测试超时时间" -#: xpack/plugins/cloud/serializers/account_attrs.py:217 +#: xpack/plugins/cloud/serializers/account_attrs.py:216 msgid "Project" msgstr "project" -#: xpack/plugins/cloud/serializers/task.py:157 +#: xpack/plugins/cloud/serializers/task.py:155 msgid "History count" msgstr "执行次数" -#: xpack/plugins/cloud/serializers/task.py:158 +#: xpack/plugins/cloud/serializers/task.py:156 msgid "Instance count" msgstr "实例个数" @@ -11039,12 +11049,21 @@ msgid "Period clean sync instance task execution" msgstr "定期清除同步实例任务执行记录" #: xpack/plugins/cloud/tasks.py:54 +#, fuzzy +#| msgid "" +#| "Every day, according to the configuration in \"System Settings - Tasks - " +#| "Regular \n" +#| " clean-up - Cloud sync task history retention days\" the system " +#| "will clean up the execution \n" +#| " records generated by cloud synchronization" msgid "" -"Every day, according to the configuration in \"System Settings - Tasks - " -"Regular \n" +"\n" +" Every day, according to the configuration in \"System Settings - " +"Tasks - Regular \n" " clean-up - Cloud sync task history retention days\" the system will " "clean up the execution \n" -" records generated by cloud synchronization" +" records generated by cloud synchronization\n" +" " msgstr "" "每天,系统会根据“系统设置-任务-”中的配置定期清理云同步任务历史保留天数,对云" "同步产生的执行记录进行清理" @@ -11102,3 +11121,16 @@ msgstr "许可证导入成功" #: xpack/plugins/license/api.py:53 msgid "Invalid license" msgstr "许可证无效" + +#~ msgid "To be released" +#~ msgstr "待释放" + +#, python-format +#~ msgid "Set labels \"%s\"" +#~ msgstr "设置标签: \"%s\"" + +#~ msgid "Release assets" +#~ msgstr "发布资产" + +#~ msgid "Auto node classification" +#~ msgstr "自动节点分类" diff --git a/apps/i18n/lina/en.json b/apps/i18n/lina/en.json index f133bb89e..6b0549965 100644 --- a/apps/i18n/lina/en.json +++ b/apps/i18n/lina/en.json @@ -1513,5 +1513,6 @@ "ExecutionID": "Execution ID", "Invalid": "Invalid", "Disabled": "Disabled", - "IgnoreFail": "Ignore fail" + "IgnoreFail": "Ignore fail", + "RiskDetectionDetail": "Risk detection detail" } \ No newline at end of file diff --git a/apps/i18n/lina/zh.json b/apps/i18n/lina/zh.json index d4bd015cc..d3ef08b62 100644 --- a/apps/i18n/lina/zh.json +++ b/apps/i18n/lina/zh.json @@ -1512,5 +1512,6 @@ "ExecutionID": "执行 ID", "Invalid": "无效", "Disabled": "已禁用", - "IgnoreFail": "忽略失败" + "IgnoreFail": "忽略失败", + "RiskDetectionDetail": "风险检测详情" } \ No newline at end of file From 243083e8763fe3d5c819044c563ca0fcb24786a0 Mon Sep 17 00:00:00 2001 From: wangruidong <940853815@qq.com> Date: Mon, 10 Mar 2025 14:24:14 +0800 Subject: [PATCH 10/11] perf: Translate application detail --- apps/i18n/lina/en.json | 3 ++- apps/i18n/lina/zh.json | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/apps/i18n/lina/en.json b/apps/i18n/lina/en.json index 6b0549965..a20bd52f0 100644 --- a/apps/i18n/lina/en.json +++ b/apps/i18n/lina/en.json @@ -1514,5 +1514,6 @@ "Invalid": "Invalid", "Disabled": "Disabled", "IgnoreFail": "Ignore fail", - "RiskDetectionDetail": "Risk detection detail" + "RiskDetectionDetail": "Risk detection detail", + "ApplicationDetail": "Application detail" } \ No newline at end of file diff --git a/apps/i18n/lina/zh.json b/apps/i18n/lina/zh.json index d3ef08b62..c20206277 100644 --- a/apps/i18n/lina/zh.json +++ b/apps/i18n/lina/zh.json @@ -1513,5 +1513,6 @@ "Invalid": "无效", "Disabled": "已禁用", "IgnoreFail": "忽略失败", - "RiskDetectionDetail": "风险检测详情" + "RiskDetectionDetail": "风险检测详情", + "ApplicationDetail": "应用详情" } \ No newline at end of file From 423d6db2ac985618bdbd7fc5837eae48cd5b4d4c Mon Sep 17 00:00:00 2001 From: feng <1304903146@qq.com> Date: Mon, 10 Mar 2025 14:46:54 +0800 Subject: [PATCH 11/11] perf: change record dashboard --- apps/accounts/api/automations/change_secret.py | 5 +++-- apps/accounts/automations/base/manager.py | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/apps/accounts/api/automations/change_secret.py b/apps/accounts/api/automations/change_secret.py index ab1707f8d..6fe20a746 100644 --- a/apps/accounts/api/automations/change_secret.py +++ b/apps/accounts/api/automations/change_secret.py @@ -75,11 +75,12 @@ class ChangeSecretRecordViewSet(mixins.ListModelMixin, OrgGenericViewSet): date_finished=Subquery( recent_dates.filter(account=OuterRef('account')).values('max_date_finished')[:1] ) - ).filter(Q(status=ChangeSecretRecordStatusChoice.success) | Q(ignore_fail=True)) + ).filter(Q(status=ChangeSecretRecordStatusChoice.success)) failed_records = queryset.filter( ~Q(account__in=Subquery(recent_success_accounts.values('account'))), - status=ChangeSecretRecordStatusChoice.failed + status=ChangeSecretRecordStatusChoice.failed, + ignore_fail=False ) return failed_records diff --git a/apps/accounts/automations/base/manager.py b/apps/accounts/automations/base/manager.py index 9c0130d52..ab17a2c77 100644 --- a/apps/accounts/automations/base/manager.py +++ b/apps/accounts/automations/base/manager.py @@ -144,7 +144,7 @@ class BaseChangeSecretPushManager(AccountBasePlaybookManager): if exist: print(f"Data inserted, updating recorder status after {attempt + 1}th query") - recorder.save(update_fields=['status', 'date_finished']) + recorder.save(update_fields=['error', 'status', 'date_finished']) return True print(f"Data not ready, waiting {retry_interval} second(s) and retrying ({attempt + 1}/{max_retries})")