mirror of https://github.com/jumpserver/jumpserver
pref: 修改 applet host
parent
9b3b3d09da
commit
b0ae9b47ca
|
@ -30,11 +30,13 @@ class AccountHistoricalRecords(HistoricalRecords):
|
||||||
return
|
return
|
||||||
super().post_save(instance, created, using=using, **kwargs)
|
super().post_save(instance, created, using=using, **kwargs)
|
||||||
|
|
||||||
def fields_included(self, model):
|
def create_history_model(self, model, inherited):
|
||||||
if self.included_fields:
|
if self.included_fields and not self.excluded_fields:
|
||||||
fields = [i for i in model._meta.fields if i.name in self.included_fields]
|
self.excluded_fields = [
|
||||||
return fields
|
field.name for field in model._meta.fields
|
||||||
return super().fields_included(model)
|
if field.name not in self.included_fields
|
||||||
|
]
|
||||||
|
return super().create_history_model(model, inherited)
|
||||||
|
|
||||||
|
|
||||||
class Account(AbsConnectivity, BaseAccount):
|
class Account(AbsConnectivity, BaseAccount):
|
||||||
|
|
|
@ -9,8 +9,6 @@ logger = get_logger(__name__)
|
||||||
|
|
||||||
@receiver(pre_save, sender=Account)
|
@receiver(pre_save, sender=Account)
|
||||||
def on_account_pre_create(sender, instance, **kwargs):
|
def on_account_pre_create(sender, instance, **kwargs):
|
||||||
# Todo: 是否只有更改密码的时候才有版本增加, bitwarden 只有再改密码的时候,
|
|
||||||
# 才会有版本,代表的是 password_version
|
|
||||||
# 升级版本号
|
# 升级版本号
|
||||||
instance.version += 1
|
instance.version += 1
|
||||||
# 即使在 root 组织也不怕
|
# 即使在 root 组织也不怕
|
||||||
|
|
|
@ -13,8 +13,8 @@ from .mixin import BulkListSerializerMixin, BulkSerializerMixin
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'MethodSerializer', 'EmptySerializer', 'BulkModelSerializer',
|
'MethodSerializer', 'EmptySerializer', 'BulkModelSerializer',
|
||||||
'AdaptedBulkListSerializer', 'CeleryTaskExecutionSerializer',
|
'AdaptedBulkListSerializer', 'CeleryTaskExecutionSerializer',
|
||||||
'WritableNestedModelSerializer',
|
'WritableNestedModelSerializer', 'GroupedChoiceSerializer',
|
||||||
'GroupedChoiceSerializer',
|
'FileSerializer'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -88,3 +88,7 @@ class GroupedChoiceSerializer(ChoiceSerializer):
|
||||||
|
|
||||||
class WritableNestedModelSerializer(NestedModelSerializer):
|
class WritableNestedModelSerializer(NestedModelSerializer):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class FileSerializer(serializers.Serializer):
|
||||||
|
file = serializers.FileField(label=_("File"))
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:c4c889e251a4de3161f462e042882ba3c4ab40eaf34799e2d49d4788ad961586
|
oid sha256:07f1cfd07039142f4847b4139586bf815467f266119eae57476c073130f0ac92
|
||||||
size 119171
|
size 118098
|
||||||
|
|
|
@ -8,7 +8,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-01 15:30+0800\n"
|
"POT-Creation-Date: 2022-11-03 16:00+0800\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
@ -25,7 +25,7 @@ msgstr "Acls"
|
||||||
#: acls/models/base.py:25 acls/serializers/login_asset_acl.py:48
|
#: acls/models/base.py:25 acls/serializers/login_asset_acl.py:48
|
||||||
#: applications/models.py:10 assets/models/_user.py:33
|
#: applications/models.py:10 assets/models/_user.py:33
|
||||||
#: assets/models/asset/common.py:81 assets/models/asset/common.py:91
|
#: assets/models/asset/common.py:81 assets/models/asset/common.py:91
|
||||||
#: assets/models/base.py:59 assets/models/cmd_filter.py:25
|
#: assets/models/base.py:57 assets/models/cmd_filter.py:25
|
||||||
#: assets/models/domain.py:24 assets/models/group.py:20
|
#: assets/models/domain.py:24 assets/models/group.py:20
|
||||||
#: assets/models/label.py:17 assets/models/platform.py:22
|
#: assets/models/label.py:17 assets/models/platform.py:22
|
||||||
#: assets/models/platform.py:68 assets/serializers/asset/common.py:86
|
#: assets/models/platform.py:68 assets/serializers/asset/common.py:86
|
||||||
|
@ -60,7 +60,7 @@ msgstr "アクティブ"
|
||||||
|
|
||||||
#: acls/models/base.py:32 applications/models.py:19 assets/models/_user.py:40
|
#: acls/models/base.py:32 applications/models.py:19 assets/models/_user.py:40
|
||||||
#: assets/models/asset/common.py:100 assets/models/automations/base.py:26
|
#: assets/models/asset/common.py:100 assets/models/automations/base.py:26
|
||||||
#: assets/models/backup.py:30 assets/models/base.py:66
|
#: assets/models/backup.py:30 assets/models/base.py:65
|
||||||
#: assets/models/cmd_filter.py:40 assets/models/cmd_filter.py:88
|
#: assets/models/cmd_filter.py:40 assets/models/cmd_filter.py:88
|
||||||
#: assets/models/domain.py:25 assets/models/domain.py:69
|
#: assets/models/domain.py:25 assets/models/domain.py:69
|
||||||
#: assets/models/group.py:23 assets/models/label.py:22
|
#: assets/models/group.py:23 assets/models/label.py:22
|
||||||
|
@ -68,7 +68,7 @@ msgstr "アクティブ"
|
||||||
#: ops/models/playbook.py:25 orgs/models.py:74
|
#: ops/models/playbook.py:25 orgs/models.py:74
|
||||||
#: perms/models/asset_permission.py:84 rbac/models/role.py:37
|
#: perms/models/asset_permission.py:84 rbac/models/role.py:37
|
||||||
#: settings/models.py:38 terminal/models/applet/applet.py:28
|
#: settings/models.py:38 terminal/models/applet/applet.py:28
|
||||||
#: terminal/models/applet/applet.py:58 terminal/models/applet/host.py:34
|
#: terminal/models/applet/applet.py:61 terminal/models/applet/host.py:104
|
||||||
#: terminal/models/component/endpoint.py:24
|
#: terminal/models/component/endpoint.py:24
|
||||||
#: terminal/models/component/endpoint.py:97
|
#: terminal/models/component/endpoint.py:97
|
||||||
#: terminal/models/component/storage.py:28
|
#: terminal/models/component/storage.py:28
|
||||||
|
@ -129,14 +129,14 @@ msgstr "レビュー担当者"
|
||||||
msgid "Login acl"
|
msgid "Login acl"
|
||||||
msgstr "ログインacl"
|
msgstr "ログインacl"
|
||||||
|
|
||||||
#: acls/models/login_asset_acl.py:21 assets/models/account.py:57
|
#: acls/models/login_asset_acl.py:21 assets/models/account.py:59
|
||||||
#: authentication/models/connection_token.py:33 ops/models/base.py:18
|
#: authentication/models/connection_token.py:33 ops/models/base.py:18
|
||||||
#: terminal/models/session/session.py:34 xpack/plugins/cloud/models.py:87
|
#: terminal/models/session/session.py:34 xpack/plugins/cloud/models.py:87
|
||||||
#: xpack/plugins/cloud/serializers/task.py:65
|
#: xpack/plugins/cloud/serializers/task.py:65
|
||||||
msgid "Account"
|
msgid "Account"
|
||||||
msgstr "アカウント"
|
msgstr "アカウント"
|
||||||
|
|
||||||
#: acls/models/login_asset_acl.py:22 assets/models/account.py:47
|
#: acls/models/login_asset_acl.py:22 assets/models/account.py:49
|
||||||
#: assets/models/asset/common.py:83 assets/models/asset/common.py:227
|
#: assets/models/asset/common.py:83 assets/models/asset/common.py:227
|
||||||
#: assets/models/cmd_filter.py:36 assets/models/gathered_user.py:14
|
#: assets/models/cmd_filter.py:36 assets/models/gathered_user.py:14
|
||||||
#: assets/serializers/account/account.py:58 assets/serializers/label.py:30
|
#: assets/serializers/account/account.py:58 assets/serializers/label.py:30
|
||||||
|
@ -164,7 +164,7 @@ msgstr "コンマ区切り文字列の形式。* はすべて一致すること
|
||||||
|
|
||||||
#: acls/serializers/login_acl.py:15 acls/serializers/login_asset_acl.py:18
|
#: acls/serializers/login_acl.py:15 acls/serializers/login_asset_acl.py:18
|
||||||
#: acls/serializers/login_asset_acl.py:52 assets/models/_user.py:34
|
#: acls/serializers/login_asset_acl.py:52 assets/models/_user.py:34
|
||||||
#: assets/models/base.py:60 assets/models/gathered_user.py:15
|
#: assets/models/base.py:58 assets/models/gathered_user.py:15
|
||||||
#: audits/models.py:121 authentication/forms.py:25 authentication/forms.py:27
|
#: audits/models.py:121 authentication/forms.py:25 authentication/forms.py:27
|
||||||
#: authentication/models/temp_token.py:9
|
#: authentication/models/temp_token.py:9
|
||||||
#: authentication/templates/authentication/_msg_different_city.html:9
|
#: authentication/templates/authentication/_msg_different_city.html:9
|
||||||
|
@ -210,7 +210,7 @@ msgstr ""
|
||||||
"ション: {}"
|
"ション: {}"
|
||||||
|
|
||||||
#: acls/serializers/login_asset_acl.py:84
|
#: acls/serializers/login_asset_acl.py:84
|
||||||
#: tickets/serializers/ticket/ticket.py:85
|
#: tickets/serializers/ticket/ticket.py:86
|
||||||
msgid "The organization `{}` does not exist"
|
msgid "The organization `{}` does not exist"
|
||||||
msgstr "組織 '{}'は存在しません"
|
msgstr "組織 '{}'は存在しません"
|
||||||
|
|
||||||
|
@ -255,7 +255,7 @@ msgstr "カテゴリ"
|
||||||
#: assets/models/platform.py:70 assets/serializers/asset/common.py:63
|
#: assets/models/platform.py:70 assets/serializers/asset/common.py:63
|
||||||
#: assets/serializers/platform.py:75 terminal/models/applet/applet.py:24
|
#: assets/serializers/platform.py:75 terminal/models/applet/applet.py:24
|
||||||
#: terminal/models/component/storage.py:57
|
#: terminal/models/component/storage.py:57
|
||||||
#: terminal/models/component/storage.py:142 terminal/serializers/applet.py:20
|
#: terminal/models/component/storage.py:142 terminal/serializers/applet.py:33
|
||||||
#: tickets/models/comment.py:26 tickets/models/flow.py:57
|
#: tickets/models/comment.py:26 tickets/models/flow.py:57
|
||||||
#: tickets/models/ticket/apply_application.py:17
|
#: tickets/models/ticket/apply_application.py:17
|
||||||
#: tickets/models/ticket/general.py:273
|
#: tickets/models/ticket/general.py:273
|
||||||
|
@ -303,7 +303,7 @@ msgstr "アプリ資産"
|
||||||
msgid "{} disabled"
|
msgid "{} disabled"
|
||||||
msgstr "無効"
|
msgstr "無効"
|
||||||
|
|
||||||
#: assets/const/account.py:6 assets/tasks/const.py:51 audits/const.py:5
|
#: assets/const/account.py:6 audits/const.py:5
|
||||||
#: common/utils/ip/geoip/utils.py:31 common/utils/ip/geoip/utils.py:37
|
#: common/utils/ip/geoip/utils.py:31 common/utils/ip/geoip/utils.py:37
|
||||||
#: common/utils/ip/utils.py:84
|
#: common/utils/ip/utils.py:84
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
|
@ -313,14 +313,14 @@ msgstr "不明"
|
||||||
msgid "Ok"
|
msgid "Ok"
|
||||||
msgstr "OK"
|
msgstr "OK"
|
||||||
|
|
||||||
#: assets/const/account.py:8 audits/models.py:118 common/const/choices.py:18
|
#: assets/const/account.py:8 audits/models.py:118 common/const/choices.py:19
|
||||||
#: xpack/plugins/change_auth_plan/serializers/asset.py:190
|
#: xpack/plugins/change_auth_plan/serializers/asset.py:190
|
||||||
#: xpack/plugins/cloud/const.py:33
|
#: xpack/plugins/cloud/const.py:33
|
||||||
msgid "Failed"
|
msgid "Failed"
|
||||||
msgstr "失敗しました"
|
msgstr "失敗しました"
|
||||||
|
|
||||||
#: assets/const/account.py:12 assets/models/_user.py:35
|
#: assets/const/account.py:12 assets/models/_user.py:35
|
||||||
#: assets/models/base.py:53 assets/models/domain.py:71
|
#: assets/models/base.py:52 assets/models/domain.py:71
|
||||||
#: assets/serializers/base.py:15 audits/signal_handlers.py:50
|
#: assets/serializers/base.py:15 audits/signal_handlers.py:50
|
||||||
#: authentication/confirm/password.py:9 authentication/forms.py:32
|
#: authentication/confirm/password.py:9 authentication/forms.py:32
|
||||||
#: authentication/templates/authentication/login.html:228
|
#: authentication/templates/authentication/login.html:228
|
||||||
|
@ -337,19 +337,19 @@ msgstr "失敗しました"
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "パスワード"
|
msgstr "パスワード"
|
||||||
|
|
||||||
#: assets/const/account.py:13 assets/models/base.py:54
|
#: assets/const/account.py:13 assets/models/base.py:53
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "SSH Key"
|
#| msgid "SSH Key"
|
||||||
msgid "SSH key"
|
msgid "SSH key"
|
||||||
msgstr "SSHキー"
|
msgstr "SSHキー"
|
||||||
|
|
||||||
#: assets/const/account.py:14 assets/models/base.py:55
|
#: assets/const/account.py:14 assets/models/base.py:54
|
||||||
#: authentication/models/access_key.py:31
|
#: authentication/models/access_key.py:31
|
||||||
msgid "Access key"
|
msgid "Access key"
|
||||||
msgstr "アクセスキー"
|
msgstr "アクセスキー"
|
||||||
|
|
||||||
#: assets/const/account.py:15 assets/models/_user.py:38
|
#: assets/const/account.py:15 assets/models/_user.py:38
|
||||||
#: assets/models/base.py:56 authentication/models/sso_token.py:13
|
#: assets/models/base.py:55 authentication/models/sso_token.py:13
|
||||||
msgid "Token"
|
msgid "Token"
|
||||||
msgstr "トークン"
|
msgstr "トークン"
|
||||||
|
|
||||||
|
@ -417,7 +417,7 @@ msgid "Replace (The key generated by JumpServer) "
|
||||||
msgstr "置換(JumpServerによって生成された鍵)"
|
msgstr "置換(JumpServerによって生成された鍵)"
|
||||||
|
|
||||||
#: assets/const/category.py:11 settings/serializers/auth/radius.py:14
|
#: assets/const/category.py:11 settings/serializers/auth/radius.py:14
|
||||||
#: settings/serializers/auth/sms.py:56 terminal/models/applet/applet.py:56
|
#: settings/serializers/auth/sms.py:56 terminal/models/applet/applet.py:59
|
||||||
#: terminal/models/component/endpoint.py:12
|
#: terminal/models/component/endpoint.py:12
|
||||||
#: xpack/plugins/cloud/serializers/account_attrs.py:72
|
#: xpack/plugins/cloud/serializers/account_attrs.py:72
|
||||||
msgid "Host"
|
msgid "Host"
|
||||||
|
@ -499,22 +499,20 @@ msgstr "SSH秘密鍵"
|
||||||
msgid "SSH public key"
|
msgid "SSH public key"
|
||||||
msgstr "SSHパブリックキー"
|
msgstr "SSHパブリックキー"
|
||||||
|
|
||||||
#: assets/models/_user.py:41 assets/models/automations/base.py:87
|
#: assets/models/_user.py:41 assets/models/automations/base.py:96
|
||||||
#: assets/models/base.py:67 assets/models/domain.py:26
|
#: assets/models/domain.py:26 assets/models/gathered_user.py:19
|
||||||
#: assets/models/gathered_user.py:19 assets/models/group.py:22
|
#: assets/models/group.py:22 common/db/models.py:76 common/mixins/models.py:50
|
||||||
#: common/db/models.py:76 common/mixins/models.py:50 ops/models/base.py:53
|
#: ops/models/base.py:53 orgs/models.py:73 perms/models/asset_permission.py:82
|
||||||
#: orgs/models.py:73 perms/models/asset_permission.py:82
|
|
||||||
#: users/models/group.py:18 users/models/user.py:927
|
#: users/models/group.py:18 users/models/user.py:927
|
||||||
msgid "Date created"
|
msgid "Date created"
|
||||||
msgstr "作成された日付"
|
msgstr "作成された日付"
|
||||||
|
|
||||||
#: assets/models/_user.py:42 assets/models/base.py:68
|
#: assets/models/_user.py:42 assets/models/gathered_user.py:20
|
||||||
#: assets/models/gathered_user.py:20 common/db/models.py:77
|
#: common/db/models.py:77 common/mixins/models.py:51
|
||||||
#: common/mixins/models.py:51
|
|
||||||
msgid "Date updated"
|
msgid "Date updated"
|
||||||
msgstr "更新日"
|
msgstr "更新日"
|
||||||
|
|
||||||
#: assets/models/_user.py:43 assets/models/base.py:69
|
#: assets/models/_user.py:43 assets/models/base.py:66
|
||||||
#: assets/models/cmd_filter.py:44 assets/models/cmd_filter.py:91
|
#: assets/models/cmd_filter.py:44 assets/models/cmd_filter.py:91
|
||||||
#: assets/models/group.py:21 common/db/models.py:74 common/mixins/models.py:49
|
#: assets/models/group.py:21 common/db/models.py:74 common/mixins/models.py:49
|
||||||
#: orgs/models.py:71 perms/models/asset_permission.py:81
|
#: orgs/models.py:71 perms/models/asset_permission.py:81
|
||||||
|
@ -582,34 +580,34 @@ msgstr "システムユーザー"
|
||||||
msgid "Can match system user"
|
msgid "Can match system user"
|
||||||
msgstr "システムユーザーに一致できます"
|
msgstr "システムユーザーに一致できます"
|
||||||
|
|
||||||
#: assets/models/account.py:51
|
#: assets/models/account.py:53
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Switch from"
|
#| msgid "Switch from"
|
||||||
msgid "Su from"
|
msgid "Su from"
|
||||||
msgstr "から切り替え"
|
msgstr "から切り替え"
|
||||||
|
|
||||||
#: assets/models/account.py:53 settings/serializers/auth/cas.py:18
|
#: assets/models/account.py:55 settings/serializers/auth/cas.py:18
|
||||||
#: terminal/models/applet/applet.py:22
|
#: terminal/models/applet/applet.py:22
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr "バージョン"
|
msgstr "バージョン"
|
||||||
|
|
||||||
#: assets/models/account.py:63
|
#: assets/models/account.py:65
|
||||||
msgid "Can view asset account secret"
|
msgid "Can view asset account secret"
|
||||||
msgstr "資産アカウントの秘密を表示できます"
|
msgstr "資産アカウントの秘密を表示できます"
|
||||||
|
|
||||||
#: assets/models/account.py:64
|
#: assets/models/account.py:66
|
||||||
msgid "Can change asset account secret"
|
msgid "Can change asset account secret"
|
||||||
msgstr "資産口座の秘密を変更できます"
|
msgstr "資産口座の秘密を変更できます"
|
||||||
|
|
||||||
#: assets/models/account.py:65
|
#: assets/models/account.py:67
|
||||||
msgid "Can view asset history account"
|
msgid "Can view asset history account"
|
||||||
msgstr "資産履歴アカウントを表示できます"
|
msgstr "資産履歴アカウントを表示できます"
|
||||||
|
|
||||||
#: assets/models/account.py:66
|
#: assets/models/account.py:68
|
||||||
msgid "Can view asset history account secret"
|
msgid "Can view asset history account secret"
|
||||||
msgstr "資産履歴アカウントパスワードを表示できます"
|
msgstr "資産履歴アカウントパスワードを表示できます"
|
||||||
|
|
||||||
#: assets/models/account.py:89 assets/serializers/account/account.py:13
|
#: assets/models/account.py:91 assets/serializers/account/account.py:13
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Account name"
|
#| msgid "Account name"
|
||||||
msgid "Account template"
|
msgid "Account template"
|
||||||
|
@ -642,9 +640,9 @@ msgid "Nodes"
|
||||||
msgstr "ノード"
|
msgstr "ノード"
|
||||||
|
|
||||||
#: assets/models/asset/common.py:98 assets/models/automations/base.py:25
|
#: assets/models/asset/common.py:98 assets/models/automations/base.py:25
|
||||||
#: assets/models/cmd_filter.py:39 assets/models/domain.py:70
|
#: assets/models/base.py:64 assets/models/cmd_filter.py:39
|
||||||
#: assets/models/label.py:21 terminal/models/applet/applet.py:25
|
#: assets/models/domain.py:70 assets/models/label.py:21
|
||||||
#: users/serializers/user.py:147
|
#: terminal/models/applet/applet.py:25 users/serializers/user.py:147
|
||||||
msgid "Is active"
|
msgid "Is active"
|
||||||
msgstr "アクティブです。"
|
msgstr "アクティブです。"
|
||||||
|
|
||||||
|
@ -661,7 +659,9 @@ msgid "Can test asset connectivity"
|
||||||
msgstr "資産接続をテストできます"
|
msgstr "資産接続をテストできます"
|
||||||
|
|
||||||
#: assets/models/asset/common.py:232
|
#: assets/models/asset/common.py:232
|
||||||
msgid "Can push system user to asset"
|
#, fuzzy
|
||||||
|
#| msgid "Can push system user to asset"
|
||||||
|
msgid "Can push account to asset"
|
||||||
msgstr "システムユーザーを資産にプッシュできます"
|
msgstr "システムユーザーを資産にプッシュできます"
|
||||||
|
|
||||||
#: assets/models/asset/common.py:233
|
#: assets/models/asset/common.py:233
|
||||||
|
@ -677,6 +677,7 @@ msgid "Move asset to node"
|
||||||
msgstr "アセットをノードに移動する"
|
msgstr "アセットをノードに移動する"
|
||||||
|
|
||||||
#: assets/models/asset/web.py:9 audits/models.py:111
|
#: assets/models/asset/web.py:9 audits/models.py:111
|
||||||
|
#: terminal/serializers/applet_host.py:24
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "無効"
|
msgstr "無効"
|
||||||
|
|
||||||
|
@ -723,15 +724,15 @@ msgstr "アカウント"
|
||||||
msgid "Assets"
|
msgid "Assets"
|
||||||
msgstr "資産"
|
msgstr "資産"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:77 assets/models/automations/base.py:84
|
#: assets/models/automations/base.py:86 assets/models/automations/base.py:93
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Automatic managed"
|
#| msgid "Automatic managed"
|
||||||
msgid "Automation task"
|
msgid "Automation task"
|
||||||
msgstr "自動管理"
|
msgstr "自動管理"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:88 assets/models/backup.py:77
|
#: assets/models/automations/base.py:97 assets/models/backup.py:77
|
||||||
#: audits/models.py:44 ops/models/base.py:54
|
#: audits/models.py:44 ops/models/base.py:54
|
||||||
#: perms/models/asset_permission.py:76 terminal/models/applet/host.py:32
|
#: perms/models/asset_permission.py:76 terminal/models/applet/host.py:102
|
||||||
#: terminal/models/session/session.py:43
|
#: terminal/models/session/session.py:43
|
||||||
#: tickets/models/ticket/apply_application.py:28
|
#: tickets/models/ticket/apply_application.py:28
|
||||||
#: tickets/models/ticket/apply_asset.py:21
|
#: tickets/models/ticket/apply_asset.py:21
|
||||||
|
@ -741,32 +742,32 @@ msgstr "自動管理"
|
||||||
msgid "Date start"
|
msgid "Date start"
|
||||||
msgstr "開始日"
|
msgstr "開始日"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:89
|
#: assets/models/automations/base.py:98
|
||||||
#: assets/models/automations/change_secret.py:58 ops/models/base.py:55
|
#: assets/models/automations/change_secret.py:58 ops/models/base.py:55
|
||||||
#: terminal/models/applet/host.py:33
|
#: terminal/models/applet/host.py:103
|
||||||
msgid "Date finished"
|
msgid "Date finished"
|
||||||
msgstr "終了日"
|
msgstr "終了日"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:91
|
#: assets/models/automations/base.py:100
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Relation snapshot"
|
#| msgid "Relation snapshot"
|
||||||
msgid "Automation snapshot"
|
msgid "Automation snapshot"
|
||||||
msgstr "製造オーダスナップショット"
|
msgstr "製造オーダスナップショット"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:95 assets/models/backup.py:88
|
#: assets/models/automations/base.py:104 assets/models/backup.py:88
|
||||||
#: assets/serializers/account/backup.py:36
|
#: assets/serializers/account/backup.py:36
|
||||||
#: xpack/plugins/change_auth_plan/models/base.py:121
|
#: xpack/plugins/change_auth_plan/models/base.py:121
|
||||||
#: xpack/plugins/change_auth_plan/serializers/base.py:78
|
#: xpack/plugins/change_auth_plan/serializers/base.py:78
|
||||||
msgid "Trigger mode"
|
msgid "Trigger mode"
|
||||||
msgstr "トリガーモード"
|
msgstr "トリガーモード"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:99
|
#: assets/models/automations/base.py:108
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Command execution"
|
#| msgid "Command execution"
|
||||||
msgid "Automation task execution"
|
msgid "Automation task execution"
|
||||||
msgstr "コマンド実行"
|
msgstr "コマンド実行"
|
||||||
|
|
||||||
#: assets/models/automations/change_secret.py:15 assets/models/base.py:62
|
#: assets/models/automations/change_secret.py:15 assets/models/base.py:60
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Secret key"
|
#| msgid "Secret key"
|
||||||
msgid "Secret type"
|
msgid "Secret type"
|
||||||
|
@ -779,7 +780,7 @@ msgid "Secret strategy"
|
||||||
msgstr "SSHキー戦略"
|
msgstr "SSHキー戦略"
|
||||||
|
|
||||||
#: assets/models/automations/change_secret.py:21
|
#: assets/models/automations/change_secret.py:21
|
||||||
#: assets/models/automations/change_secret.py:56 assets/models/base.py:64
|
#: assets/models/automations/change_secret.py:56 assets/models/base.py:62
|
||||||
#: assets/serializers/account/base.py:17
|
#: assets/serializers/account/base.py:17
|
||||||
#: authentication/models/connection_token.py:34
|
#: authentication/models/connection_token.py:34
|
||||||
#: authentication/models/temp_token.py:10
|
#: authentication/models/temp_token.py:10
|
||||||
|
@ -825,7 +826,7 @@ msgstr "ひみつ"
|
||||||
msgid "Date started"
|
msgid "Date started"
|
||||||
msgstr "開始日"
|
msgstr "開始日"
|
||||||
|
|
||||||
#: assets/models/automations/change_secret.py:60 common/const/choices.py:19
|
#: assets/models/automations/change_secret.py:60 common/const/choices.py:20
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "WeCom Error"
|
#| msgid "WeCom Error"
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
|
@ -855,6 +856,12 @@ msgstr "資産ユーザーの収集"
|
||||||
msgid "Gather asset facts"
|
msgid "Gather asset facts"
|
||||||
msgstr "資産ユーザーの収集"
|
msgstr "資産ユーザーの収集"
|
||||||
|
|
||||||
|
#: assets/models/automations/ping.py:15
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Login asset"
|
||||||
|
msgid "Ping asset"
|
||||||
|
msgstr "ログイン資産"
|
||||||
|
|
||||||
#: assets/models/automations/push_account.py:16
|
#: assets/models/automations/push_account.py:16
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Is service account"
|
#| msgid "Is service account"
|
||||||
|
@ -902,15 +909,15 @@ msgstr "成功は"
|
||||||
msgid "Account backup execution"
|
msgid "Account backup execution"
|
||||||
msgstr "アカウントバックアップの実行"
|
msgstr "アカウントバックアップの実行"
|
||||||
|
|
||||||
#: assets/models/base.py:30 assets/serializers/domain.py:42
|
#: assets/models/base.py:29 assets/serializers/domain.py:42
|
||||||
msgid "Connectivity"
|
msgid "Connectivity"
|
||||||
msgstr "接続性"
|
msgstr "接続性"
|
||||||
|
|
||||||
#: assets/models/base.py:32 authentication/models/temp_token.py:12
|
#: assets/models/base.py:31 authentication/models/temp_token.py:12
|
||||||
msgid "Date verified"
|
msgid "Date verified"
|
||||||
msgstr "確認済みの日付"
|
msgstr "確認済みの日付"
|
||||||
|
|
||||||
#: assets/models/base.py:65
|
#: assets/models/base.py:63
|
||||||
msgid "Privileged"
|
msgid "Privileged"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -1079,6 +1086,7 @@ msgid "Setting"
|
||||||
msgstr "設定"
|
msgstr "設定"
|
||||||
|
|
||||||
#: assets/models/platform.py:43 audits/models.py:112 settings/models.py:37
|
#: assets/models/platform.py:43 audits/models.py:112 settings/models.py:37
|
||||||
|
#: terminal/serializers/applet_host.py:25
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "有効化"
|
msgstr "有効化"
|
||||||
|
|
||||||
|
@ -1415,60 +1423,18 @@ msgstr "パスワードには `'` を含まない"
|
||||||
msgid "Password can not contains `\"` "
|
msgid "Password can not contains `\"` "
|
||||||
msgstr "パスワードには `\"` を含まない"
|
msgstr "パスワードには `\"` を含まない"
|
||||||
|
|
||||||
#: assets/tasks/account_connectivity.py:30
|
#: assets/tasks/gather_facts.py:25
|
||||||
msgid "The asset {} system platform {} does not support run Ansible tasks"
|
|
||||||
msgstr ""
|
|
||||||
"資産 {} システムプラットフォーム {} はAnsibleタスクの実行をサポートしていませ"
|
|
||||||
"ん。"
|
|
||||||
|
|
||||||
#: assets/tasks/account_connectivity.py:108
|
|
||||||
msgid "Test account connectivity: "
|
|
||||||
msgstr "テストアカウント接続:"
|
|
||||||
|
|
||||||
#: assets/tasks/asset_connectivity.py:49
|
|
||||||
msgid "Test assets connectivity. "
|
|
||||||
msgstr "資産の接続性をテストします。"
|
|
||||||
|
|
||||||
#: assets/tasks/asset_connectivity.py:94 assets/tasks/asset_connectivity.py:107
|
|
||||||
msgid "Test assets connectivity: "
|
|
||||||
msgstr "資産の接続性のテスト:"
|
|
||||||
|
|
||||||
#: assets/tasks/asset_connectivity.py:121
|
|
||||||
msgid "Test if the assets under the node are connectable: "
|
|
||||||
msgstr "ノードの下のアセットが接続可能かどうかをテストします。"
|
|
||||||
|
|
||||||
#: assets/tasks/const.py:49
|
|
||||||
msgid "Unreachable"
|
|
||||||
msgstr "達成できない"
|
|
||||||
|
|
||||||
#: assets/tasks/const.py:50
|
|
||||||
msgid "Reachable"
|
|
||||||
msgstr "接続可能"
|
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_hardware_info.py:46
|
|
||||||
msgid "Get asset info failed: {}"
|
|
||||||
msgstr "資産情報の取得に失敗しました: {}"
|
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_hardware_info.py:97
|
|
||||||
msgid "Update some assets hardware info. "
|
msgid "Update some assets hardware info. "
|
||||||
msgstr "一部の資産ハードウェア情報を更新します。"
|
msgstr "一部の資産ハードウェア情報を更新します。"
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_hardware_info.py:118
|
#: assets/tasks/gather_facts.py:48
|
||||||
msgid "Update asset hardware info: "
|
|
||||||
msgstr "資産ハードウェア情報の更新:"
|
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_hardware_info.py:124
|
|
||||||
msgid "Update assets hardware info: "
|
msgid "Update assets hardware info: "
|
||||||
msgstr "資産のハードウェア情報を更新する:"
|
msgstr "資産のハードウェア情報を更新する:"
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_hardware_info.py:146
|
#: assets/tasks/gather_facts.py:58
|
||||||
msgid "Update node asset hardware information: "
|
msgid "Update node asset hardware information: "
|
||||||
msgstr "ノード資産のハードウェア情報を更新します。"
|
msgstr "ノード資産のハードウェア情報を更新します。"
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_users.py:110
|
|
||||||
msgid "Gather assets users"
|
|
||||||
msgstr "資産ユーザーの収集"
|
|
||||||
|
|
||||||
#: assets/tasks/nodes_amount.py:29
|
#: assets/tasks/nodes_amount.py:29
|
||||||
msgid ""
|
msgid ""
|
||||||
"The task of self-checking is already running and cannot be started repeatedly"
|
"The task of self-checking is already running and cannot be started repeatedly"
|
||||||
|
@ -1476,6 +1442,24 @@ msgstr ""
|
||||||
"セルフチェックのタスクはすでに実行されており、繰り返し開始することはできませ"
|
"セルフチェックのタスクはすでに実行されており、繰り返し開始することはできませ"
|
||||||
"ん"
|
"ん"
|
||||||
|
|
||||||
|
#: assets/tasks/ping.py:20 assets/tasks/ping.py:38
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Test assets connectivity. "
|
||||||
|
msgid "Test assets connectivity "
|
||||||
|
msgstr "資産の接続性をテストします。"
|
||||||
|
|
||||||
|
#: assets/tasks/ping.py:48
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Test if the assets under the node are connectable: "
|
||||||
|
msgid "Test if the assets under the node are connectable "
|
||||||
|
msgstr "ノードの下のアセットが接続可能かどうかをテストします。"
|
||||||
|
|
||||||
|
#: assets/tasks/push_account.py:36
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Create account successfully"
|
||||||
|
msgid "Push accounts to assets"
|
||||||
|
msgstr "アカウントを正常に作成"
|
||||||
|
|
||||||
#: assets/tasks/utils.py:17
|
#: assets/tasks/utils.py:17
|
||||||
msgid "Asset has been disabled, skipped: {}"
|
msgid "Asset has been disabled, skipped: {}"
|
||||||
msgstr "資産が無効化されました。スキップ: {}"
|
msgstr "資産が無効化されました。スキップ: {}"
|
||||||
|
@ -1492,6 +1476,12 @@ msgstr "セキュリティのために、ユーザー {} をプッシュしな
|
||||||
msgid "No assets matched, stop task"
|
msgid "No assets matched, stop task"
|
||||||
msgstr "一致する資産がない、タスクを停止"
|
msgstr "一致する資産がない、タスクを停止"
|
||||||
|
|
||||||
|
#: assets/tasks/verify_account.py:36
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Test account connectivity: "
|
||||||
|
msgid "Verify accounts connectivity"
|
||||||
|
msgstr "テストアカウント接続:"
|
||||||
|
|
||||||
#: audits/apps.py:9
|
#: audits/apps.py:9
|
||||||
msgid "Audits"
|
msgid "Audits"
|
||||||
msgstr "監査"
|
msgstr "監査"
|
||||||
|
@ -1539,7 +1529,7 @@ msgstr "操作"
|
||||||
msgid "Filename"
|
msgid "Filename"
|
||||||
msgstr "ファイル名"
|
msgstr "ファイル名"
|
||||||
|
|
||||||
#: audits/models.py:43 audits/models.py:117 common/const/choices.py:17
|
#: audits/models.py:43 audits/models.py:117 common/const/choices.py:18
|
||||||
#: terminal/models/session/sharing.py:104 tickets/views/approve.py:114
|
#: terminal/models/session/sharing.py:104 tickets/views/approve.py:114
|
||||||
#: xpack/plugins/change_auth_plan/serializers/asset.py:189
|
#: xpack/plugins/change_auth_plan/serializers/asset.py:189
|
||||||
msgid "Success"
|
msgid "Success"
|
||||||
|
@ -1619,8 +1609,8 @@ msgid "MFA"
|
||||||
msgstr "MFA"
|
msgstr "MFA"
|
||||||
|
|
||||||
#: audits/models.py:128 ops/models/base.py:48
|
#: audits/models.py:128 ops/models/base.py:48
|
||||||
#: terminal/models/applet/applet.py:57 terminal/models/applet/host.py:19
|
#: terminal/models/applet/applet.py:60 terminal/models/applet/host.py:101
|
||||||
#: terminal/models/applet/host.py:31 terminal/models/component/status.py:33
|
#: terminal/models/component/status.py:33 terminal/serializers/applet.py:22
|
||||||
#: tickets/models/ticket/general.py:281 xpack/plugins/cloud/models.py:171
|
#: tickets/models/ticket/general.py:281 xpack/plugins/cloud/models.py:171
|
||||||
#: xpack/plugins/cloud/models.py:223
|
#: xpack/plugins/cloud/models.py:223
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
|
@ -2144,13 +2134,13 @@ msgstr "アセットがアクティブ化されていません"
|
||||||
msgid "No account"
|
msgid "No account"
|
||||||
msgstr "ログインacl"
|
msgstr "ログインacl"
|
||||||
|
|
||||||
#: authentication/models/connection_token.py:103
|
#: authentication/models/connection_token.py:101
|
||||||
msgid "User has no permission to access asset or permission expired"
|
msgid "User has no permission to access asset or permission expired"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"ユーザーがアセットにアクセスする権限を持っていないか、権限の有効期限が切れて"
|
"ユーザーがアセットにアクセスする権限を持っていないか、権限の有効期限が切れて"
|
||||||
"います"
|
"います"
|
||||||
|
|
||||||
#: authentication/models/connection_token.py:145
|
#: authentication/models/connection_token.py:144
|
||||||
msgid "Super connection token"
|
msgid "Super connection token"
|
||||||
msgstr "スーパー接続トークン"
|
msgstr "スーパー接続トークン"
|
||||||
|
|
||||||
|
@ -2576,15 +2566,19 @@ msgstr "手動トリガー"
|
||||||
msgid "Timing trigger"
|
msgid "Timing trigger"
|
||||||
msgstr "タイミングトリガー"
|
msgstr "タイミングトリガー"
|
||||||
|
|
||||||
#: common/const/choices.py:15 tickets/const.py:29 tickets/const.py:37
|
#: common/const/choices.py:15 xpack/plugins/change_auth_plan/models/base.py:183
|
||||||
|
msgid "Ready"
|
||||||
|
msgstr "の準備を"
|
||||||
|
|
||||||
|
#: common/const/choices.py:16 tickets/const.py:29 tickets/const.py:37
|
||||||
msgid "Pending"
|
msgid "Pending"
|
||||||
msgstr "未定"
|
msgstr "未定"
|
||||||
|
|
||||||
#: common/const/choices.py:16
|
#: common/const/choices.py:17
|
||||||
msgid "Running"
|
msgid "Running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: common/const/choices.py:20
|
#: common/const/choices.py:21
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Cancel"
|
#| msgid "Cancel"
|
||||||
msgid "Canceled"
|
msgid "Canceled"
|
||||||
|
@ -2653,6 +2647,12 @@ msgstr "解析ファイルエラー: {}"
|
||||||
msgid "Children"
|
msgid "Children"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/drf/serializers/common.py:94
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Filename"
|
||||||
|
msgid "File"
|
||||||
|
msgstr "ファイル名"
|
||||||
|
|
||||||
#: common/exceptions.py:15
|
#: common/exceptions.py:15
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%s object does not exist."
|
msgid "%s object does not exist."
|
||||||
|
@ -3091,7 +3091,7 @@ msgstr "アプリ組織"
|
||||||
#: orgs/mixins/models.py:57 orgs/mixins/serializers.py:25 orgs/models.py:88
|
#: orgs/mixins/models.py:57 orgs/mixins/serializers.py:25 orgs/models.py:88
|
||||||
#: rbac/const.py:7 rbac/models/rolebinding.py:48
|
#: rbac/const.py:7 rbac/models/rolebinding.py:48
|
||||||
#: rbac/serializers/rolebinding.py:40 settings/serializers/auth/ldap.py:62
|
#: rbac/serializers/rolebinding.py:40 settings/serializers/auth/ldap.py:62
|
||||||
#: tickets/models/ticket/general.py:300 tickets/serializers/ticket/ticket.py:71
|
#: tickets/models/ticket/general.py:300 tickets/serializers/ticket/ticket.py:72
|
||||||
msgid "Organization"
|
msgid "Organization"
|
||||||
msgstr "組織"
|
msgstr "組織"
|
||||||
|
|
||||||
|
@ -4928,50 +4928,52 @@ msgstr "認証アドレス"
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/models/applet/applet.py:29 terminal/serializers/storage.py:157
|
#: terminal/models/applet/applet.py:31 terminal/serializers/storage.py:157
|
||||||
msgid "Hosts"
|
msgid "Hosts"
|
||||||
msgstr "ホスト"
|
msgstr "ホスト"
|
||||||
|
|
||||||
#: terminal/models/applet/applet.py:55 terminal/models/applet/host.py:21
|
#: terminal/models/applet/applet.py:58 terminal/models/applet/host.py:28
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Apply assets"
|
#| msgid "Apply assets"
|
||||||
msgid "Applet"
|
msgid "Applet"
|
||||||
msgstr "資産の適用"
|
msgstr "資産の適用"
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:14
|
#: terminal/models/applet/host.py:19 terminal/serializers/applet_host.py:36
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Verify auth"
|
|
||||||
msgid "Account automation"
|
|
||||||
msgstr "パスワード/キーの確認"
|
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:15 terminal/serializers/applet.py:66
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "More login options"
|
#| msgid "More login options"
|
||||||
msgid "Deploy options"
|
msgid "Deploy options"
|
||||||
msgstr "その他のログインオプション"
|
msgstr "その他のログインオプション"
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:16
|
#: terminal/models/applet/host.py:20
|
||||||
msgid "Inited"
|
msgid "Inited"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:17
|
#: terminal/models/applet/host.py:21
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Date finished"
|
#| msgid "Date finished"
|
||||||
msgid "Date inited"
|
msgid "Date inited"
|
||||||
msgstr "終了日"
|
msgstr "終了日"
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:18
|
#: terminal/models/applet/host.py:22
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Date sync"
|
#| msgid "Date sync"
|
||||||
msgid "Date synced"
|
msgid "Date synced"
|
||||||
msgstr "日付の同期"
|
msgstr "日付の同期"
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:30
|
#: terminal/models/applet/host.py:25 terminal/models/component/terminal.py:183
|
||||||
|
msgid "Terminal"
|
||||||
|
msgstr "ターミナル"
|
||||||
|
|
||||||
|
#: terminal/models/applet/host.py:99
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Host"
|
#| msgid "Host"
|
||||||
msgid "Hosting"
|
msgid "Hosting"
|
||||||
msgstr "ホスト"
|
msgstr "ホスト"
|
||||||
|
|
||||||
|
#: terminal/models/applet/host.py:100
|
||||||
|
msgid "Initial"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/models/component/endpoint.py:14
|
#: terminal/models/component/endpoint.py:14
|
||||||
msgid "HTTPS Port"
|
msgid "HTTPS Port"
|
||||||
msgstr "HTTPS ポート"
|
msgstr "HTTPS ポート"
|
||||||
|
@ -5076,10 +5078,6 @@ msgstr "再生ストレージ"
|
||||||
msgid "type"
|
msgid "type"
|
||||||
msgstr "タイプ"
|
msgstr "タイプ"
|
||||||
|
|
||||||
#: terminal/models/component/terminal.py:183
|
|
||||||
msgid "Terminal"
|
|
||||||
msgstr "ターミナル"
|
|
||||||
|
|
||||||
#: terminal/models/component/terminal.py:185
|
#: terminal/models/component/terminal.py:185
|
||||||
msgid "Can view terminal config"
|
msgid "Can view terminal config"
|
||||||
msgstr "ターミナル構成を表示できます"
|
msgstr "ターミナル構成を表示できます"
|
||||||
|
@ -5196,49 +5194,61 @@ msgstr "レベル"
|
||||||
msgid "Batch danger command alert"
|
msgid "Batch danger command alert"
|
||||||
msgstr "一括危険コマンド警告"
|
msgstr "一括危険コマンド警告"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:19
|
#: terminal/serializers/applet.py:16
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Public key"
|
||||||
|
msgid "Published"
|
||||||
|
msgstr "公開キー"
|
||||||
|
|
||||||
|
#: terminal/serializers/applet.py:17
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Finished"
|
||||||
|
msgid "Unpublished"
|
||||||
|
msgstr "終了"
|
||||||
|
|
||||||
|
#: terminal/serializers/applet.py:18
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Phone not set"
|
||||||
|
msgid "Not match"
|
||||||
|
msgstr "電話が設定されていない"
|
||||||
|
|
||||||
|
#: terminal/serializers/applet.py:32
|
||||||
msgid "Icon"
|
msgid "Icon"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:53
|
#: terminal/serializers/applet_host.py:20
|
||||||
#, fuzzy
|
|
||||||
#| msgid "Phone not set"
|
|
||||||
msgid "Not set"
|
|
||||||
msgstr "電話が設定されていない"
|
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:54
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Session"
|
#| msgid "Session"
|
||||||
msgid "Per Session"
|
msgid "Per Session"
|
||||||
msgstr "セッション"
|
msgstr "セッション"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:55
|
#: terminal/serializers/applet_host.py:21
|
||||||
msgid "Per Device"
|
msgid "Per Device"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:57
|
#: terminal/serializers/applet_host.py:27
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "License"
|
#| msgid "License"
|
||||||
msgid "RDS Licensing"
|
msgid "RDS Licensing"
|
||||||
msgstr "ライセンス"
|
msgstr "ライセンス"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:58
|
#: terminal/serializers/applet_host.py:28
|
||||||
msgid "RDS License Server"
|
msgid "RDS License Server"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:59
|
#: terminal/serializers/applet_host.py:29
|
||||||
msgid "RDS Licensing Mode"
|
msgid "RDS Licensing Mode"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:60
|
#: terminal/serializers/applet_host.py:30
|
||||||
msgid "RDS fSingleSessionPerUser"
|
msgid "RDS fSingleSessionPerUser"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:61
|
#: terminal/serializers/applet_host.py:31
|
||||||
msgid "RDS Max Disconnection Time"
|
msgid "RDS Max Disconnection Time"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:62
|
#: terminal/serializers/applet_host.py:32
|
||||||
msgid "RDS Remote App Logoff Time Limit"
|
msgid "RDS Remote App Logoff Time Limit"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
@ -5673,7 +5683,7 @@ msgstr "有効期限は開始日より大きくする必要があります"
|
||||||
msgid "Permission named `{}` already exists"
|
msgid "Permission named `{}` already exists"
|
||||||
msgstr "'{}'という名前の権限は既に存在します"
|
msgstr "'{}'という名前の権限は既に存在します"
|
||||||
|
|
||||||
#: tickets/serializers/ticket/ticket.py:99
|
#: tickets/serializers/ticket/ticket.py:101
|
||||||
msgid "The ticket flow `{}` does not exist"
|
msgid "The ticket flow `{}` does not exist"
|
||||||
msgstr "チケットフロー '{}'が存在しない"
|
msgstr "チケットフロー '{}'が存在しない"
|
||||||
|
|
||||||
|
@ -6377,10 +6387,6 @@ msgstr "公開鍵をnull、exitに設定することはできません。"
|
||||||
msgid "Change auth plan snapshot"
|
msgid "Change auth plan snapshot"
|
||||||
msgstr "計画スナップショットの暗号化"
|
msgstr "計画スナップショットの暗号化"
|
||||||
|
|
||||||
#: xpack/plugins/change_auth_plan/models/base.py:183
|
|
||||||
msgid "Ready"
|
|
||||||
msgstr "の準備を"
|
|
||||||
|
|
||||||
#: xpack/plugins/change_auth_plan/models/base.py:184
|
#: xpack/plugins/change_auth_plan/models/base.py:184
|
||||||
msgid "Preflight check"
|
msgid "Preflight check"
|
||||||
msgstr "プリフライトチェック"
|
msgstr "プリフライトチェック"
|
||||||
|
@ -6991,11 +6997,11 @@ msgstr "テーマ"
|
||||||
msgid "Interface setting"
|
msgid "Interface setting"
|
||||||
msgstr "インターフェイスの設定"
|
msgstr "インターフェイスの設定"
|
||||||
|
|
||||||
#: xpack/plugins/license/api.py:50
|
#: xpack/plugins/license/api.py:53
|
||||||
msgid "License import successfully"
|
msgid "License import successfully"
|
||||||
msgstr "ライセンスのインポートに成功"
|
msgstr "ライセンスのインポートに成功"
|
||||||
|
|
||||||
#: xpack/plugins/license/api.py:51
|
#: xpack/plugins/license/api.py:54
|
||||||
msgid "License is invalid"
|
msgid "License is invalid"
|
||||||
msgstr "ライセンスが無効です"
|
msgstr "ライセンスが無効です"
|
||||||
|
|
||||||
|
@ -7019,6 +7025,34 @@ msgstr "究極のエディション"
|
||||||
msgid "Community edition"
|
msgid "Community edition"
|
||||||
msgstr "コミュニティ版"
|
msgstr "コミュニティ版"
|
||||||
|
|
||||||
|
#, fuzzy
|
||||||
|
#~| msgid "Verify auth"
|
||||||
|
#~ msgid "Account automation"
|
||||||
|
#~ msgstr "パスワード/キーの確認"
|
||||||
|
|
||||||
|
#~ msgid "The asset {} system platform {} does not support run Ansible tasks"
|
||||||
|
#~ msgstr ""
|
||||||
|
#~ "資産 {} システムプラットフォーム {} はAnsibleタスクの実行をサポートしてい"
|
||||||
|
#~ "ません。"
|
||||||
|
|
||||||
|
#~ msgid "Test assets connectivity: "
|
||||||
|
#~ msgstr "資産の接続性のテスト:"
|
||||||
|
|
||||||
|
#~ msgid "Unreachable"
|
||||||
|
#~ msgstr "達成できない"
|
||||||
|
|
||||||
|
#~ msgid "Reachable"
|
||||||
|
#~ msgstr "接続可能"
|
||||||
|
|
||||||
|
#~ msgid "Get asset info failed: {}"
|
||||||
|
#~ msgstr "資産情報の取得に失敗しました: {}"
|
||||||
|
|
||||||
|
#~ msgid "Update asset hardware info: "
|
||||||
|
#~ msgstr "資産ハードウェア情報の更新:"
|
||||||
|
|
||||||
|
#~ msgid "Gather assets users"
|
||||||
|
#~ msgstr "資産ユーザーの収集"
|
||||||
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#~| msgid "Automatic managed"
|
#~| msgid "Automatic managed"
|
||||||
#~ msgid "Push automation"
|
#~ msgid "Push automation"
|
||||||
|
|
|
@ -1,3 +1,3 @@
|
||||||
version https://git-lfs.github.com/spec/v1
|
version https://git-lfs.github.com/spec/v1
|
||||||
oid sha256:08529907ac3879f60c2026f91e7ba3f48a3a7d288f7b29cd35c0f73bc3999c21
|
oid sha256:0b396cc9a485f6474d14ca30a1a7ba4f954b07754148b964efbb21519c55b280
|
||||||
size 103630
|
size 102849
|
||||||
|
|
|
@ -7,7 +7,7 @@ msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: JumpServer 0.3.3\n"
|
"Project-Id-Version: JumpServer 0.3.3\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2022-11-01 15:30+0800\n"
|
"POT-Creation-Date: 2022-11-03 16:00+0800\n"
|
||||||
"PO-Revision-Date: 2021-05-20 10:54+0800\n"
|
"PO-Revision-Date: 2021-05-20 10:54+0800\n"
|
||||||
"Last-Translator: ibuler <ibuler@qq.com>\n"
|
"Last-Translator: ibuler <ibuler@qq.com>\n"
|
||||||
"Language-Team: JumpServer team<ibuler@qq.com>\n"
|
"Language-Team: JumpServer team<ibuler@qq.com>\n"
|
||||||
|
@ -24,7 +24,7 @@ msgstr "访问控制"
|
||||||
#: acls/models/base.py:25 acls/serializers/login_asset_acl.py:48
|
#: acls/models/base.py:25 acls/serializers/login_asset_acl.py:48
|
||||||
#: applications/models.py:10 assets/models/_user.py:33
|
#: applications/models.py:10 assets/models/_user.py:33
|
||||||
#: assets/models/asset/common.py:81 assets/models/asset/common.py:91
|
#: assets/models/asset/common.py:81 assets/models/asset/common.py:91
|
||||||
#: assets/models/base.py:59 assets/models/cmd_filter.py:25
|
#: assets/models/base.py:57 assets/models/cmd_filter.py:25
|
||||||
#: assets/models/domain.py:24 assets/models/group.py:20
|
#: assets/models/domain.py:24 assets/models/group.py:20
|
||||||
#: assets/models/label.py:17 assets/models/platform.py:22
|
#: assets/models/label.py:17 assets/models/platform.py:22
|
||||||
#: assets/models/platform.py:68 assets/serializers/asset/common.py:86
|
#: assets/models/platform.py:68 assets/serializers/asset/common.py:86
|
||||||
|
@ -59,7 +59,7 @@ msgstr "激活中"
|
||||||
|
|
||||||
#: acls/models/base.py:32 applications/models.py:19 assets/models/_user.py:40
|
#: acls/models/base.py:32 applications/models.py:19 assets/models/_user.py:40
|
||||||
#: assets/models/asset/common.py:100 assets/models/automations/base.py:26
|
#: assets/models/asset/common.py:100 assets/models/automations/base.py:26
|
||||||
#: assets/models/backup.py:30 assets/models/base.py:66
|
#: assets/models/backup.py:30 assets/models/base.py:65
|
||||||
#: assets/models/cmd_filter.py:40 assets/models/cmd_filter.py:88
|
#: assets/models/cmd_filter.py:40 assets/models/cmd_filter.py:88
|
||||||
#: assets/models/domain.py:25 assets/models/domain.py:69
|
#: assets/models/domain.py:25 assets/models/domain.py:69
|
||||||
#: assets/models/group.py:23 assets/models/label.py:22
|
#: assets/models/group.py:23 assets/models/label.py:22
|
||||||
|
@ -67,7 +67,7 @@ msgstr "激活中"
|
||||||
#: ops/models/playbook.py:25 orgs/models.py:74
|
#: ops/models/playbook.py:25 orgs/models.py:74
|
||||||
#: perms/models/asset_permission.py:84 rbac/models/role.py:37
|
#: perms/models/asset_permission.py:84 rbac/models/role.py:37
|
||||||
#: settings/models.py:38 terminal/models/applet/applet.py:28
|
#: settings/models.py:38 terminal/models/applet/applet.py:28
|
||||||
#: terminal/models/applet/applet.py:58 terminal/models/applet/host.py:34
|
#: terminal/models/applet/applet.py:61 terminal/models/applet/host.py:104
|
||||||
#: terminal/models/component/endpoint.py:24
|
#: terminal/models/component/endpoint.py:24
|
||||||
#: terminal/models/component/endpoint.py:97
|
#: terminal/models/component/endpoint.py:97
|
||||||
#: terminal/models/component/storage.py:28
|
#: terminal/models/component/storage.py:28
|
||||||
|
@ -128,14 +128,14 @@ msgstr "审批人"
|
||||||
msgid "Login acl"
|
msgid "Login acl"
|
||||||
msgstr "登录访问控制"
|
msgstr "登录访问控制"
|
||||||
|
|
||||||
#: acls/models/login_asset_acl.py:21 assets/models/account.py:57
|
#: acls/models/login_asset_acl.py:21 assets/models/account.py:59
|
||||||
#: authentication/models/connection_token.py:33 ops/models/base.py:18
|
#: authentication/models/connection_token.py:33 ops/models/base.py:18
|
||||||
#: terminal/models/session/session.py:34 xpack/plugins/cloud/models.py:87
|
#: terminal/models/session/session.py:34 xpack/plugins/cloud/models.py:87
|
||||||
#: xpack/plugins/cloud/serializers/task.py:65
|
#: xpack/plugins/cloud/serializers/task.py:65
|
||||||
msgid "Account"
|
msgid "Account"
|
||||||
msgstr "账号"
|
msgstr "账号"
|
||||||
|
|
||||||
#: acls/models/login_asset_acl.py:22 assets/models/account.py:47
|
#: acls/models/login_asset_acl.py:22 assets/models/account.py:49
|
||||||
#: assets/models/asset/common.py:83 assets/models/asset/common.py:227
|
#: assets/models/asset/common.py:83 assets/models/asset/common.py:227
|
||||||
#: assets/models/cmd_filter.py:36 assets/models/gathered_user.py:14
|
#: assets/models/cmd_filter.py:36 assets/models/gathered_user.py:14
|
||||||
#: assets/serializers/account/account.py:58 assets/serializers/label.py:30
|
#: assets/serializers/account/account.py:58 assets/serializers/label.py:30
|
||||||
|
@ -163,7 +163,7 @@ msgstr "格式为逗号分隔的字符串, * 表示匹配所有. "
|
||||||
|
|
||||||
#: acls/serializers/login_acl.py:15 acls/serializers/login_asset_acl.py:18
|
#: acls/serializers/login_acl.py:15 acls/serializers/login_asset_acl.py:18
|
||||||
#: acls/serializers/login_asset_acl.py:52 assets/models/_user.py:34
|
#: acls/serializers/login_asset_acl.py:52 assets/models/_user.py:34
|
||||||
#: assets/models/base.py:60 assets/models/gathered_user.py:15
|
#: assets/models/base.py:58 assets/models/gathered_user.py:15
|
||||||
#: audits/models.py:121 authentication/forms.py:25 authentication/forms.py:27
|
#: audits/models.py:121 authentication/forms.py:25 authentication/forms.py:27
|
||||||
#: authentication/models/temp_token.py:9
|
#: authentication/models/temp_token.py:9
|
||||||
#: authentication/templates/authentication/_msg_different_city.html:9
|
#: authentication/templates/authentication/_msg_different_city.html:9
|
||||||
|
@ -206,7 +206,7 @@ msgid ""
|
||||||
msgstr "格式为逗号分隔的字符串, * 表示匹配所有. 可选的协议有: {}"
|
msgstr "格式为逗号分隔的字符串, * 表示匹配所有. 可选的协议有: {}"
|
||||||
|
|
||||||
#: acls/serializers/login_asset_acl.py:84
|
#: acls/serializers/login_asset_acl.py:84
|
||||||
#: tickets/serializers/ticket/ticket.py:85
|
#: tickets/serializers/ticket/ticket.py:86
|
||||||
msgid "The organization `{}` does not exist"
|
msgid "The organization `{}` does not exist"
|
||||||
msgstr "组织 `{}` 不存在"
|
msgstr "组织 `{}` 不存在"
|
||||||
|
|
||||||
|
@ -250,7 +250,7 @@ msgstr "类别"
|
||||||
#: assets/models/platform.py:70 assets/serializers/asset/common.py:63
|
#: assets/models/platform.py:70 assets/serializers/asset/common.py:63
|
||||||
#: assets/serializers/platform.py:75 terminal/models/applet/applet.py:24
|
#: assets/serializers/platform.py:75 terminal/models/applet/applet.py:24
|
||||||
#: terminal/models/component/storage.py:57
|
#: terminal/models/component/storage.py:57
|
||||||
#: terminal/models/component/storage.py:142 terminal/serializers/applet.py:20
|
#: terminal/models/component/storage.py:142 terminal/serializers/applet.py:33
|
||||||
#: tickets/models/comment.py:26 tickets/models/flow.py:57
|
#: tickets/models/comment.py:26 tickets/models/flow.py:57
|
||||||
#: tickets/models/ticket/apply_application.py:17
|
#: tickets/models/ticket/apply_application.py:17
|
||||||
#: tickets/models/ticket/general.py:273
|
#: tickets/models/ticket/general.py:273
|
||||||
|
@ -296,7 +296,7 @@ msgstr "资产管理"
|
||||||
msgid "{} disabled"
|
msgid "{} disabled"
|
||||||
msgstr "{} 已禁用"
|
msgstr "{} 已禁用"
|
||||||
|
|
||||||
#: assets/const/account.py:6 assets/tasks/const.py:51 audits/const.py:5
|
#: assets/const/account.py:6 audits/const.py:5
|
||||||
#: common/utils/ip/geoip/utils.py:31 common/utils/ip/geoip/utils.py:37
|
#: common/utils/ip/geoip/utils.py:31 common/utils/ip/geoip/utils.py:37
|
||||||
#: common/utils/ip/utils.py:84
|
#: common/utils/ip/utils.py:84
|
||||||
msgid "Unknown"
|
msgid "Unknown"
|
||||||
|
@ -306,14 +306,14 @@ msgstr "未知"
|
||||||
msgid "Ok"
|
msgid "Ok"
|
||||||
msgstr "成功"
|
msgstr "成功"
|
||||||
|
|
||||||
#: assets/const/account.py:8 audits/models.py:118 common/const/choices.py:18
|
#: assets/const/account.py:8 audits/models.py:118 common/const/choices.py:19
|
||||||
#: xpack/plugins/change_auth_plan/serializers/asset.py:190
|
#: xpack/plugins/change_auth_plan/serializers/asset.py:190
|
||||||
#: xpack/plugins/cloud/const.py:33
|
#: xpack/plugins/cloud/const.py:33
|
||||||
msgid "Failed"
|
msgid "Failed"
|
||||||
msgstr "失败"
|
msgstr "失败"
|
||||||
|
|
||||||
#: assets/const/account.py:12 assets/models/_user.py:35
|
#: assets/const/account.py:12 assets/models/_user.py:35
|
||||||
#: assets/models/base.py:53 assets/models/domain.py:71
|
#: assets/models/base.py:52 assets/models/domain.py:71
|
||||||
#: assets/serializers/base.py:15 audits/signal_handlers.py:50
|
#: assets/serializers/base.py:15 audits/signal_handlers.py:50
|
||||||
#: authentication/confirm/password.py:9 authentication/forms.py:32
|
#: authentication/confirm/password.py:9 authentication/forms.py:32
|
||||||
#: authentication/templates/authentication/login.html:228
|
#: authentication/templates/authentication/login.html:228
|
||||||
|
@ -330,17 +330,17 @@ msgstr "失败"
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "密码"
|
msgstr "密码"
|
||||||
|
|
||||||
#: assets/const/account.py:13 assets/models/base.py:54
|
#: assets/const/account.py:13 assets/models/base.py:53
|
||||||
msgid "SSH key"
|
msgid "SSH key"
|
||||||
msgstr "SSH 密钥"
|
msgstr "SSH 密钥"
|
||||||
|
|
||||||
#: assets/const/account.py:14 assets/models/base.py:55
|
#: assets/const/account.py:14 assets/models/base.py:54
|
||||||
#: authentication/models/access_key.py:31
|
#: authentication/models/access_key.py:31
|
||||||
msgid "Access key"
|
msgid "Access key"
|
||||||
msgstr "Access key"
|
msgstr "Access key"
|
||||||
|
|
||||||
#: assets/const/account.py:15 assets/models/_user.py:38
|
#: assets/const/account.py:15 assets/models/_user.py:38
|
||||||
#: assets/models/base.py:56 authentication/models/sso_token.py:13
|
#: assets/models/base.py:55 authentication/models/sso_token.py:13
|
||||||
msgid "Token"
|
msgid "Token"
|
||||||
msgstr "Token"
|
msgstr "Token"
|
||||||
|
|
||||||
|
@ -398,7 +398,7 @@ msgid "Replace (The key generated by JumpServer) "
|
||||||
msgstr "替换 (由 JumpServer 生成的密钥)"
|
msgstr "替换 (由 JumpServer 生成的密钥)"
|
||||||
|
|
||||||
#: assets/const/category.py:11 settings/serializers/auth/radius.py:14
|
#: assets/const/category.py:11 settings/serializers/auth/radius.py:14
|
||||||
#: settings/serializers/auth/sms.py:56 terminal/models/applet/applet.py:56
|
#: settings/serializers/auth/sms.py:56 terminal/models/applet/applet.py:59
|
||||||
#: terminal/models/component/endpoint.py:12
|
#: terminal/models/component/endpoint.py:12
|
||||||
#: xpack/plugins/cloud/serializers/account_attrs.py:72
|
#: xpack/plugins/cloud/serializers/account_attrs.py:72
|
||||||
msgid "Host"
|
msgid "Host"
|
||||||
|
@ -474,22 +474,20 @@ msgstr "SSH 密钥"
|
||||||
msgid "SSH public key"
|
msgid "SSH public key"
|
||||||
msgstr "SSH 公钥"
|
msgstr "SSH 公钥"
|
||||||
|
|
||||||
#: assets/models/_user.py:41 assets/models/automations/base.py:87
|
#: assets/models/_user.py:41 assets/models/automations/base.py:96
|
||||||
#: assets/models/base.py:67 assets/models/domain.py:26
|
#: assets/models/domain.py:26 assets/models/gathered_user.py:19
|
||||||
#: assets/models/gathered_user.py:19 assets/models/group.py:22
|
#: assets/models/group.py:22 common/db/models.py:76 common/mixins/models.py:50
|
||||||
#: common/db/models.py:76 common/mixins/models.py:50 ops/models/base.py:53
|
#: ops/models/base.py:53 orgs/models.py:73 perms/models/asset_permission.py:82
|
||||||
#: orgs/models.py:73 perms/models/asset_permission.py:82
|
|
||||||
#: users/models/group.py:18 users/models/user.py:927
|
#: users/models/group.py:18 users/models/user.py:927
|
||||||
msgid "Date created"
|
msgid "Date created"
|
||||||
msgstr "创建日期"
|
msgstr "创建日期"
|
||||||
|
|
||||||
#: assets/models/_user.py:42 assets/models/base.py:68
|
#: assets/models/_user.py:42 assets/models/gathered_user.py:20
|
||||||
#: assets/models/gathered_user.py:20 common/db/models.py:77
|
#: common/db/models.py:77 common/mixins/models.py:51
|
||||||
#: common/mixins/models.py:51
|
|
||||||
msgid "Date updated"
|
msgid "Date updated"
|
||||||
msgstr "更新日期"
|
msgstr "更新日期"
|
||||||
|
|
||||||
#: assets/models/_user.py:43 assets/models/base.py:69
|
#: assets/models/_user.py:43 assets/models/base.py:66
|
||||||
#: assets/models/cmd_filter.py:44 assets/models/cmd_filter.py:91
|
#: assets/models/cmd_filter.py:44 assets/models/cmd_filter.py:91
|
||||||
#: assets/models/group.py:21 common/db/models.py:74 common/mixins/models.py:49
|
#: assets/models/group.py:21 common/db/models.py:74 common/mixins/models.py:49
|
||||||
#: orgs/models.py:71 perms/models/asset_permission.py:81
|
#: orgs/models.py:71 perms/models/asset_permission.py:81
|
||||||
|
@ -557,32 +555,32 @@ msgstr "系统用户"
|
||||||
msgid "Can match system user"
|
msgid "Can match system user"
|
||||||
msgstr "可以匹配系统用户"
|
msgstr "可以匹配系统用户"
|
||||||
|
|
||||||
#: assets/models/account.py:51
|
#: assets/models/account.py:53
|
||||||
msgid "Su from"
|
msgid "Su from"
|
||||||
msgstr "切换自"
|
msgstr "切换自"
|
||||||
|
|
||||||
#: assets/models/account.py:53 settings/serializers/auth/cas.py:18
|
#: assets/models/account.py:55 settings/serializers/auth/cas.py:18
|
||||||
#: terminal/models/applet/applet.py:22
|
#: terminal/models/applet/applet.py:22
|
||||||
msgid "Version"
|
msgid "Version"
|
||||||
msgstr "版本"
|
msgstr "版本"
|
||||||
|
|
||||||
#: assets/models/account.py:63
|
#: assets/models/account.py:65
|
||||||
msgid "Can view asset account secret"
|
msgid "Can view asset account secret"
|
||||||
msgstr "可以查看资产账号密码"
|
msgstr "可以查看资产账号密码"
|
||||||
|
|
||||||
#: assets/models/account.py:64
|
#: assets/models/account.py:66
|
||||||
msgid "Can change asset account secret"
|
msgid "Can change asset account secret"
|
||||||
msgstr "可以更改资产账号密码"
|
msgstr "可以更改资产账号密码"
|
||||||
|
|
||||||
#: assets/models/account.py:65
|
#: assets/models/account.py:67
|
||||||
msgid "Can view asset history account"
|
msgid "Can view asset history account"
|
||||||
msgstr "可以查看资产历史账号"
|
msgstr "可以查看资产历史账号"
|
||||||
|
|
||||||
#: assets/models/account.py:66
|
#: assets/models/account.py:68
|
||||||
msgid "Can view asset history account secret"
|
msgid "Can view asset history account secret"
|
||||||
msgstr "可以查看资产历史账号密码"
|
msgstr "可以查看资产历史账号密码"
|
||||||
|
|
||||||
#: assets/models/account.py:89 assets/serializers/account/account.py:13
|
#: assets/models/account.py:91 assets/serializers/account/account.py:13
|
||||||
msgid "Account template"
|
msgid "Account template"
|
||||||
msgstr "账号模版"
|
msgstr "账号模版"
|
||||||
|
|
||||||
|
@ -613,9 +611,9 @@ msgid "Nodes"
|
||||||
msgstr "节点"
|
msgstr "节点"
|
||||||
|
|
||||||
#: assets/models/asset/common.py:98 assets/models/automations/base.py:25
|
#: assets/models/asset/common.py:98 assets/models/automations/base.py:25
|
||||||
#: assets/models/cmd_filter.py:39 assets/models/domain.py:70
|
#: assets/models/base.py:64 assets/models/cmd_filter.py:39
|
||||||
#: assets/models/label.py:21 terminal/models/applet/applet.py:25
|
#: assets/models/domain.py:70 assets/models/label.py:21
|
||||||
#: users/serializers/user.py:147
|
#: terminal/models/applet/applet.py:25 users/serializers/user.py:147
|
||||||
msgid "Is active"
|
msgid "Is active"
|
||||||
msgstr "激活"
|
msgstr "激活"
|
||||||
|
|
||||||
|
@ -632,7 +630,9 @@ msgid "Can test asset connectivity"
|
||||||
msgstr "可以测试资产连接性"
|
msgstr "可以测试资产连接性"
|
||||||
|
|
||||||
#: assets/models/asset/common.py:232
|
#: assets/models/asset/common.py:232
|
||||||
msgid "Can push system user to asset"
|
#, fuzzy
|
||||||
|
#| msgid "Can push system user to asset"
|
||||||
|
msgid "Can push account to asset"
|
||||||
msgstr "可以推送系统用户到资产"
|
msgstr "可以推送系统用户到资产"
|
||||||
|
|
||||||
#: assets/models/asset/common.py:233
|
#: assets/models/asset/common.py:233
|
||||||
|
@ -648,6 +648,7 @@ msgid "Move asset to node"
|
||||||
msgstr "移动资产到节点"
|
msgstr "移动资产到节点"
|
||||||
|
|
||||||
#: assets/models/asset/web.py:9 audits/models.py:111
|
#: assets/models/asset/web.py:9 audits/models.py:111
|
||||||
|
#: terminal/serializers/applet_host.py:24
|
||||||
msgid "Disabled"
|
msgid "Disabled"
|
||||||
msgstr "禁用"
|
msgstr "禁用"
|
||||||
|
|
||||||
|
@ -688,13 +689,13 @@ msgstr "账号管理"
|
||||||
msgid "Assets"
|
msgid "Assets"
|
||||||
msgstr "资产"
|
msgstr "资产"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:77 assets/models/automations/base.py:84
|
#: assets/models/automations/base.py:86 assets/models/automations/base.py:93
|
||||||
msgid "Automation task"
|
msgid "Automation task"
|
||||||
msgstr "自动化任务"
|
msgstr "自动化任务"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:88 assets/models/backup.py:77
|
#: assets/models/automations/base.py:97 assets/models/backup.py:77
|
||||||
#: audits/models.py:44 ops/models/base.py:54
|
#: audits/models.py:44 ops/models/base.py:54
|
||||||
#: perms/models/asset_permission.py:76 terminal/models/applet/host.py:32
|
#: perms/models/asset_permission.py:76 terminal/models/applet/host.py:102
|
||||||
#: terminal/models/session/session.py:43
|
#: terminal/models/session/session.py:43
|
||||||
#: tickets/models/ticket/apply_application.py:28
|
#: tickets/models/ticket/apply_application.py:28
|
||||||
#: tickets/models/ticket/apply_asset.py:21
|
#: tickets/models/ticket/apply_asset.py:21
|
||||||
|
@ -704,28 +705,28 @@ msgstr "自动化任务"
|
||||||
msgid "Date start"
|
msgid "Date start"
|
||||||
msgstr "开始日期"
|
msgstr "开始日期"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:89
|
#: assets/models/automations/base.py:98
|
||||||
#: assets/models/automations/change_secret.py:58 ops/models/base.py:55
|
#: assets/models/automations/change_secret.py:58 ops/models/base.py:55
|
||||||
#: terminal/models/applet/host.py:33
|
#: terminal/models/applet/host.py:103
|
||||||
msgid "Date finished"
|
msgid "Date finished"
|
||||||
msgstr "结束日期"
|
msgstr "结束日期"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:91
|
#: assets/models/automations/base.py:100
|
||||||
msgid "Automation snapshot"
|
msgid "Automation snapshot"
|
||||||
msgstr "自动化快照"
|
msgstr "自动化快照"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:95 assets/models/backup.py:88
|
#: assets/models/automations/base.py:104 assets/models/backup.py:88
|
||||||
#: assets/serializers/account/backup.py:36
|
#: assets/serializers/account/backup.py:36
|
||||||
#: xpack/plugins/change_auth_plan/models/base.py:121
|
#: xpack/plugins/change_auth_plan/models/base.py:121
|
||||||
#: xpack/plugins/change_auth_plan/serializers/base.py:78
|
#: xpack/plugins/change_auth_plan/serializers/base.py:78
|
||||||
msgid "Trigger mode"
|
msgid "Trigger mode"
|
||||||
msgstr "触发模式"
|
msgstr "触发模式"
|
||||||
|
|
||||||
#: assets/models/automations/base.py:99
|
#: assets/models/automations/base.py:108
|
||||||
msgid "Automation task execution"
|
msgid "Automation task execution"
|
||||||
msgstr "自动化任务执行"
|
msgstr "自动化任务执行"
|
||||||
|
|
||||||
#: assets/models/automations/change_secret.py:15 assets/models/base.py:62
|
#: assets/models/automations/change_secret.py:15 assets/models/base.py:60
|
||||||
msgid "Secret type"
|
msgid "Secret type"
|
||||||
msgstr "密文类型"
|
msgstr "密文类型"
|
||||||
|
|
||||||
|
@ -734,7 +735,7 @@ msgid "Secret strategy"
|
||||||
msgstr "密钥策略"
|
msgstr "密钥策略"
|
||||||
|
|
||||||
#: assets/models/automations/change_secret.py:21
|
#: assets/models/automations/change_secret.py:21
|
||||||
#: assets/models/automations/change_secret.py:56 assets/models/base.py:64
|
#: assets/models/automations/change_secret.py:56 assets/models/base.py:62
|
||||||
#: assets/serializers/account/base.py:17
|
#: assets/serializers/account/base.py:17
|
||||||
#: authentication/models/connection_token.py:34
|
#: authentication/models/connection_token.py:34
|
||||||
#: authentication/models/temp_token.py:10
|
#: authentication/models/temp_token.py:10
|
||||||
|
@ -772,7 +773,7 @@ msgstr "原来密码"
|
||||||
msgid "Date started"
|
msgid "Date started"
|
||||||
msgstr "开始日期"
|
msgstr "开始日期"
|
||||||
|
|
||||||
#: assets/models/automations/change_secret.py:60 common/const/choices.py:19
|
#: assets/models/automations/change_secret.py:60 common/const/choices.py:20
|
||||||
msgid "Error"
|
msgid "Error"
|
||||||
msgstr "错误"
|
msgstr "错误"
|
||||||
|
|
||||||
|
@ -794,6 +795,12 @@ msgstr "收集资产信息"
|
||||||
msgid "Gather asset facts"
|
msgid "Gather asset facts"
|
||||||
msgstr "收集资产信息"
|
msgstr "收集资产信息"
|
||||||
|
|
||||||
|
#: assets/models/automations/ping.py:15
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Login asset"
|
||||||
|
msgid "Ping asset"
|
||||||
|
msgstr "登录资产"
|
||||||
|
|
||||||
#: assets/models/automations/push_account.py:16
|
#: assets/models/automations/push_account.py:16
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Is service account"
|
#| msgid "Is service account"
|
||||||
|
@ -841,15 +848,15 @@ msgstr "是否成功"
|
||||||
msgid "Account backup execution"
|
msgid "Account backup execution"
|
||||||
msgstr "账号备份执行"
|
msgstr "账号备份执行"
|
||||||
|
|
||||||
#: assets/models/base.py:30 assets/serializers/domain.py:42
|
#: assets/models/base.py:29 assets/serializers/domain.py:42
|
||||||
msgid "Connectivity"
|
msgid "Connectivity"
|
||||||
msgstr "可连接性"
|
msgstr "可连接性"
|
||||||
|
|
||||||
#: assets/models/base.py:32 authentication/models/temp_token.py:12
|
#: assets/models/base.py:31 authentication/models/temp_token.py:12
|
||||||
msgid "Date verified"
|
msgid "Date verified"
|
||||||
msgstr "校验日期"
|
msgstr "校验日期"
|
||||||
|
|
||||||
#: assets/models/base.py:65
|
#: assets/models/base.py:63
|
||||||
msgid "Privileged"
|
msgid "Privileged"
|
||||||
msgstr "特权的"
|
msgstr "特权的"
|
||||||
|
|
||||||
|
@ -1015,6 +1022,7 @@ msgid "Setting"
|
||||||
msgstr "设置"
|
msgstr "设置"
|
||||||
|
|
||||||
#: assets/models/platform.py:43 audits/models.py:112 settings/models.py:37
|
#: assets/models/platform.py:43 audits/models.py:112 settings/models.py:37
|
||||||
|
#: terminal/serializers/applet_host.py:25
|
||||||
msgid "Enabled"
|
msgid "Enabled"
|
||||||
msgstr "启用"
|
msgstr "启用"
|
||||||
|
|
||||||
|
@ -1306,63 +1314,41 @@ msgstr "密码不能包含 `'` 字符"
|
||||||
msgid "Password can not contains `\"` "
|
msgid "Password can not contains `\"` "
|
||||||
msgstr "密码不能包含 `\"` 字符"
|
msgstr "密码不能包含 `\"` 字符"
|
||||||
|
|
||||||
#: assets/tasks/account_connectivity.py:30
|
#: assets/tasks/gather_facts.py:25
|
||||||
msgid "The asset {} system platform {} does not support run Ansible tasks"
|
|
||||||
msgstr "资产 {} 系统平台 {} 不支持运行 Ansible 任务"
|
|
||||||
|
|
||||||
#: assets/tasks/account_connectivity.py:108
|
|
||||||
msgid "Test account connectivity: "
|
|
||||||
msgstr "测试账号可连接性: "
|
|
||||||
|
|
||||||
#: assets/tasks/asset_connectivity.py:49
|
|
||||||
msgid "Test assets connectivity. "
|
|
||||||
msgstr "测试资产可连接性. "
|
|
||||||
|
|
||||||
#: assets/tasks/asset_connectivity.py:94 assets/tasks/asset_connectivity.py:107
|
|
||||||
msgid "Test assets connectivity: "
|
|
||||||
msgstr "测试资产可连接性: "
|
|
||||||
|
|
||||||
#: assets/tasks/asset_connectivity.py:121
|
|
||||||
msgid "Test if the assets under the node are connectable: "
|
|
||||||
msgstr "测试节点下资产是否可连接: "
|
|
||||||
|
|
||||||
#: assets/tasks/const.py:49
|
|
||||||
msgid "Unreachable"
|
|
||||||
msgstr "不可达"
|
|
||||||
|
|
||||||
#: assets/tasks/const.py:50
|
|
||||||
msgid "Reachable"
|
|
||||||
msgstr "可连接"
|
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_hardware_info.py:46
|
|
||||||
msgid "Get asset info failed: {}"
|
|
||||||
msgstr "获取资产信息失败:{}"
|
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_hardware_info.py:97
|
|
||||||
msgid "Update some assets hardware info. "
|
msgid "Update some assets hardware info. "
|
||||||
msgstr "更新资产硬件信息. "
|
msgstr "更新资产硬件信息. "
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_hardware_info.py:118
|
#: assets/tasks/gather_facts.py:48
|
||||||
msgid "Update asset hardware info: "
|
|
||||||
msgstr "更新资产硬件信息: "
|
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_hardware_info.py:124
|
|
||||||
msgid "Update assets hardware info: "
|
msgid "Update assets hardware info: "
|
||||||
msgstr "更新资产硬件信息: "
|
msgstr "更新资产硬件信息: "
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_hardware_info.py:146
|
#: assets/tasks/gather_facts.py:58
|
||||||
msgid "Update node asset hardware information: "
|
msgid "Update node asset hardware information: "
|
||||||
msgstr "更新节点资产硬件信息: "
|
msgstr "更新节点资产硬件信息: "
|
||||||
|
|
||||||
#: assets/tasks/gather_asset_users.py:110
|
|
||||||
msgid "Gather assets users"
|
|
||||||
msgstr "收集资产上的用户"
|
|
||||||
|
|
||||||
#: assets/tasks/nodes_amount.py:29
|
#: assets/tasks/nodes_amount.py:29
|
||||||
msgid ""
|
msgid ""
|
||||||
"The task of self-checking is already running and cannot be started repeatedly"
|
"The task of self-checking is already running and cannot be started repeatedly"
|
||||||
msgstr "自检程序已经在运行,不能重复启动"
|
msgstr "自检程序已经在运行,不能重复启动"
|
||||||
|
|
||||||
|
#: assets/tasks/ping.py:20 assets/tasks/ping.py:38
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Test assets connectivity. "
|
||||||
|
msgid "Test assets connectivity "
|
||||||
|
msgstr "测试资产可连接性. "
|
||||||
|
|
||||||
|
#: assets/tasks/ping.py:48
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Test if the assets under the node are connectable: "
|
||||||
|
msgid "Test if the assets under the node are connectable "
|
||||||
|
msgstr "测试节点下资产是否可连接: "
|
||||||
|
|
||||||
|
#: assets/tasks/push_account.py:36
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Push account method"
|
||||||
|
msgid "Push accounts to assets"
|
||||||
|
msgstr "推送方式"
|
||||||
|
|
||||||
#: assets/tasks/utils.py:17
|
#: assets/tasks/utils.py:17
|
||||||
msgid "Asset has been disabled, skipped: {}"
|
msgid "Asset has been disabled, skipped: {}"
|
||||||
msgstr "资产已经被禁用, 跳过: {}"
|
msgstr "资产已经被禁用, 跳过: {}"
|
||||||
|
@ -1379,6 +1365,12 @@ msgstr "为了安全,禁止推送用户 {}"
|
||||||
msgid "No assets matched, stop task"
|
msgid "No assets matched, stop task"
|
||||||
msgstr "没有匹配到资产,结束任务"
|
msgstr "没有匹配到资产,结束任务"
|
||||||
|
|
||||||
|
#: assets/tasks/verify_account.py:36
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Test account connectivity: "
|
||||||
|
msgid "Verify accounts connectivity"
|
||||||
|
msgstr "测试账号可连接性: "
|
||||||
|
|
||||||
#: audits/apps.py:9
|
#: audits/apps.py:9
|
||||||
msgid "Audits"
|
msgid "Audits"
|
||||||
msgstr "日志审计"
|
msgstr "日志审计"
|
||||||
|
@ -1426,7 +1418,7 @@ msgstr "操作"
|
||||||
msgid "Filename"
|
msgid "Filename"
|
||||||
msgstr "文件名"
|
msgstr "文件名"
|
||||||
|
|
||||||
#: audits/models.py:43 audits/models.py:117 common/const/choices.py:17
|
#: audits/models.py:43 audits/models.py:117 common/const/choices.py:18
|
||||||
#: terminal/models/session/sharing.py:104 tickets/views/approve.py:114
|
#: terminal/models/session/sharing.py:104 tickets/views/approve.py:114
|
||||||
#: xpack/plugins/change_auth_plan/serializers/asset.py:189
|
#: xpack/plugins/change_auth_plan/serializers/asset.py:189
|
||||||
msgid "Success"
|
msgid "Success"
|
||||||
|
@ -1506,8 +1498,8 @@ msgid "MFA"
|
||||||
msgstr "MFA"
|
msgstr "MFA"
|
||||||
|
|
||||||
#: audits/models.py:128 ops/models/base.py:48
|
#: audits/models.py:128 ops/models/base.py:48
|
||||||
#: terminal/models/applet/applet.py:57 terminal/models/applet/host.py:19
|
#: terminal/models/applet/applet.py:60 terminal/models/applet/host.py:101
|
||||||
#: terminal/models/applet/host.py:31 terminal/models/component/status.py:33
|
#: terminal/models/component/status.py:33 terminal/serializers/applet.py:22
|
||||||
#: tickets/models/ticket/general.py:281 xpack/plugins/cloud/models.py:171
|
#: tickets/models/ticket/general.py:281 xpack/plugins/cloud/models.py:171
|
||||||
#: xpack/plugins/cloud/models.py:223
|
#: xpack/plugins/cloud/models.py:223
|
||||||
msgid "Status"
|
msgid "Status"
|
||||||
|
@ -2018,11 +2010,11 @@ msgstr "资产未激活"
|
||||||
msgid "No account"
|
msgid "No account"
|
||||||
msgstr "登录账号"
|
msgstr "登录账号"
|
||||||
|
|
||||||
#: authentication/models/connection_token.py:103
|
#: authentication/models/connection_token.py:101
|
||||||
msgid "User has no permission to access asset or permission expired"
|
msgid "User has no permission to access asset or permission expired"
|
||||||
msgstr "用户没有权限访问资产或权限已过期"
|
msgstr "用户没有权限访问资产或权限已过期"
|
||||||
|
|
||||||
#: authentication/models/connection_token.py:145
|
#: authentication/models/connection_token.py:144
|
||||||
msgid "Super connection token"
|
msgid "Super connection token"
|
||||||
msgstr "超级连接令牌"
|
msgstr "超级连接令牌"
|
||||||
|
|
||||||
|
@ -2439,15 +2431,19 @@ msgstr "手动触发"
|
||||||
msgid "Timing trigger"
|
msgid "Timing trigger"
|
||||||
msgstr "定时触发"
|
msgstr "定时触发"
|
||||||
|
|
||||||
#: common/const/choices.py:15 tickets/const.py:29 tickets/const.py:37
|
#: common/const/choices.py:15 xpack/plugins/change_auth_plan/models/base.py:183
|
||||||
|
msgid "Ready"
|
||||||
|
msgstr "准备"
|
||||||
|
|
||||||
|
#: common/const/choices.py:16 tickets/const.py:29 tickets/const.py:37
|
||||||
msgid "Pending"
|
msgid "Pending"
|
||||||
msgstr "待定的"
|
msgstr "待定的"
|
||||||
|
|
||||||
#: common/const/choices.py:16
|
#: common/const/choices.py:17
|
||||||
msgid "Running"
|
msgid "Running"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: common/const/choices.py:20
|
#: common/const/choices.py:21
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Cancel"
|
#| msgid "Cancel"
|
||||||
msgid "Canceled"
|
msgid "Canceled"
|
||||||
|
@ -2515,6 +2511,12 @@ msgstr "解析文件错误: {}"
|
||||||
msgid "Children"
|
msgid "Children"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: common/drf/serializers/common.py:94
|
||||||
|
#, fuzzy
|
||||||
|
#| msgid "Filename"
|
||||||
|
msgid "File"
|
||||||
|
msgstr "文件名"
|
||||||
|
|
||||||
#: common/exceptions.py:15
|
#: common/exceptions.py:15
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%s object does not exist."
|
msgid "%s object does not exist."
|
||||||
|
@ -2925,7 +2927,7 @@ msgstr "组织管理"
|
||||||
#: orgs/mixins/models.py:57 orgs/mixins/serializers.py:25 orgs/models.py:88
|
#: orgs/mixins/models.py:57 orgs/mixins/serializers.py:25 orgs/models.py:88
|
||||||
#: rbac/const.py:7 rbac/models/rolebinding.py:48
|
#: rbac/const.py:7 rbac/models/rolebinding.py:48
|
||||||
#: rbac/serializers/rolebinding.py:40 settings/serializers/auth/ldap.py:62
|
#: rbac/serializers/rolebinding.py:40 settings/serializers/auth/ldap.py:62
|
||||||
#: tickets/models/ticket/general.py:300 tickets/serializers/ticket/ticket.py:71
|
#: tickets/models/ticket/general.py:300 tickets/serializers/ticket/ticket.py:72
|
||||||
msgid "Organization"
|
msgid "Organization"
|
||||||
msgstr "组织"
|
msgstr "组织"
|
||||||
|
|
||||||
|
@ -4725,42 +4727,46 @@ msgstr "作者"
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "标签"
|
msgstr "标签"
|
||||||
|
|
||||||
#: terminal/models/applet/applet.py:29 terminal/serializers/storage.py:157
|
#: terminal/models/applet/applet.py:31 terminal/serializers/storage.py:157
|
||||||
msgid "Hosts"
|
msgid "Hosts"
|
||||||
msgstr "主机"
|
msgstr "主机"
|
||||||
|
|
||||||
#: terminal/models/applet/applet.py:55 terminal/models/applet/host.py:21
|
#: terminal/models/applet/applet.py:58 terminal/models/applet/host.py:28
|
||||||
msgid "Applet"
|
msgid "Applet"
|
||||||
msgstr "远程应用"
|
msgstr "远程应用"
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:14
|
#: terminal/models/applet/host.py:19 terminal/serializers/applet_host.py:36
|
||||||
msgid "Account automation"
|
|
||||||
msgstr "账号自动化"
|
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:15 terminal/serializers/applet.py:66
|
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "More login options"
|
#| msgid "More login options"
|
||||||
msgid "Deploy options"
|
msgid "Deploy options"
|
||||||
msgstr "其他方式登录"
|
msgstr "其他方式登录"
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:16
|
#: terminal/models/applet/host.py:20
|
||||||
msgid "Inited"
|
msgid "Inited"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:17
|
#: terminal/models/applet/host.py:21
|
||||||
#, fuzzy
|
#, fuzzy
|
||||||
#| msgid "Date finished"
|
#| msgid "Date finished"
|
||||||
msgid "Date inited"
|
msgid "Date inited"
|
||||||
msgstr "结束日期"
|
msgstr "结束日期"
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:18
|
#: terminal/models/applet/host.py:22
|
||||||
msgid "Date synced"
|
msgid "Date synced"
|
||||||
msgstr "最后同步日期"
|
msgstr "最后同步日期"
|
||||||
|
|
||||||
#: terminal/models/applet/host.py:30
|
#: terminal/models/applet/host.py:25 terminal/models/component/terminal.py:183
|
||||||
|
msgid "Terminal"
|
||||||
|
msgstr "终端"
|
||||||
|
|
||||||
|
#: terminal/models/applet/host.py:99
|
||||||
msgid "Hosting"
|
msgid "Hosting"
|
||||||
msgstr "主机"
|
msgstr "主机"
|
||||||
|
|
||||||
|
#: terminal/models/applet/host.py:100
|
||||||
|
msgid "Initial"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: terminal/models/component/endpoint.py:14
|
#: terminal/models/component/endpoint.py:14
|
||||||
msgid "HTTPS Port"
|
msgid "HTTPS Port"
|
||||||
msgstr "HTTPS 端口"
|
msgstr "HTTPS 端口"
|
||||||
|
@ -4865,10 +4871,6 @@ msgstr "录像存储"
|
||||||
msgid "type"
|
msgid "type"
|
||||||
msgstr "类型"
|
msgstr "类型"
|
||||||
|
|
||||||
#: terminal/models/component/terminal.py:183
|
|
||||||
msgid "Terminal"
|
|
||||||
msgstr "终端"
|
|
||||||
|
|
||||||
#: terminal/models/component/terminal.py:185
|
#: terminal/models/component/terminal.py:185
|
||||||
msgid "Can view terminal config"
|
msgid "Can view terminal config"
|
||||||
msgstr "可以查看终端配置"
|
msgstr "可以查看终端配置"
|
||||||
|
@ -4985,43 +4987,51 @@ msgstr "级别"
|
||||||
msgid "Batch danger command alert"
|
msgid "Batch danger command alert"
|
||||||
msgstr "批量危险命令告警"
|
msgstr "批量危险命令告警"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:19
|
#: terminal/serializers/applet.py:16
|
||||||
|
msgid "Published"
|
||||||
|
msgstr "已安装"
|
||||||
|
|
||||||
|
#: terminal/serializers/applet.py:17
|
||||||
|
msgid "Unpublished"
|
||||||
|
msgstr "未安装"
|
||||||
|
|
||||||
|
#: terminal/serializers/applet.py:18
|
||||||
|
msgid "Not match"
|
||||||
|
msgstr "不匹配"
|
||||||
|
|
||||||
|
#: terminal/serializers/applet.py:32
|
||||||
msgid "Icon"
|
msgid "Icon"
|
||||||
msgstr "图标"
|
msgstr "图标"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:53
|
#: terminal/serializers/applet_host.py:20
|
||||||
msgid "Not set"
|
|
||||||
msgstr "不设置"
|
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:54
|
|
||||||
msgid "Per Session"
|
msgid "Per Session"
|
||||||
msgstr "按会话"
|
msgstr "按会话"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:55
|
#: terminal/serializers/applet_host.py:21
|
||||||
msgid "Per Device"
|
msgid "Per Device"
|
||||||
msgstr "按设备"
|
msgstr "按设备"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:57
|
#: terminal/serializers/applet_host.py:27
|
||||||
msgid "RDS Licensing"
|
msgid "RDS Licensing"
|
||||||
msgstr "部署 RDS 许可服务"
|
msgstr "部署 RDS 许可服务"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:58
|
#: terminal/serializers/applet_host.py:28
|
||||||
msgid "RDS License Server"
|
msgid "RDS License Server"
|
||||||
msgstr "RDS 许可服务主机"
|
msgstr "RDS 许可服务主机"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:59
|
#: terminal/serializers/applet_host.py:29
|
||||||
msgid "RDS Licensing Mode"
|
msgid "RDS Licensing Mode"
|
||||||
msgstr "RDS 许可模式"
|
msgstr "RDS 许可模式"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:60
|
#: terminal/serializers/applet_host.py:30
|
||||||
msgid "RDS fSingleSessionPerUser"
|
msgid "RDS fSingleSessionPerUser"
|
||||||
msgstr "RDS 会话用户数"
|
msgstr "RDS 会话用户数"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:61
|
#: terminal/serializers/applet_host.py:31
|
||||||
msgid "RDS Max Disconnection Time"
|
msgid "RDS Max Disconnection Time"
|
||||||
msgstr "RDS 会话断开时间"
|
msgstr "RDS 会话断开时间"
|
||||||
|
|
||||||
#: terminal/serializers/applet.py:62
|
#: terminal/serializers/applet_host.py:32
|
||||||
msgid "RDS Remote App Logoff Time Limit"
|
msgid "RDS Remote App Logoff Time Limit"
|
||||||
msgstr "RDS 远程应用注销时间"
|
msgstr "RDS 远程应用注销时间"
|
||||||
|
|
||||||
|
@ -5447,7 +5457,7 @@ msgstr "过期时间要大于开始时间"
|
||||||
msgid "Permission named `{}` already exists"
|
msgid "Permission named `{}` already exists"
|
||||||
msgstr "授权名称 `{}` 已存在"
|
msgstr "授权名称 `{}` 已存在"
|
||||||
|
|
||||||
#: tickets/serializers/ticket/ticket.py:99
|
#: tickets/serializers/ticket/ticket.py:101
|
||||||
msgid "The ticket flow `{}` does not exist"
|
msgid "The ticket flow `{}` does not exist"
|
||||||
msgstr "工单流程 `{}` 不存在"
|
msgstr "工单流程 `{}` 不存在"
|
||||||
|
|
||||||
|
@ -6136,10 +6146,6 @@ msgstr "公钥不能设置为空, 退出. "
|
||||||
msgid "Change auth plan snapshot"
|
msgid "Change auth plan snapshot"
|
||||||
msgstr "改密计划快照"
|
msgstr "改密计划快照"
|
||||||
|
|
||||||
#: xpack/plugins/change_auth_plan/models/base.py:183
|
|
||||||
msgid "Ready"
|
|
||||||
msgstr "准备"
|
|
||||||
|
|
||||||
#: xpack/plugins/change_auth_plan/models/base.py:184
|
#: xpack/plugins/change_auth_plan/models/base.py:184
|
||||||
msgid "Preflight check"
|
msgid "Preflight check"
|
||||||
msgstr "改密前的校验"
|
msgstr "改密前的校验"
|
||||||
|
@ -6747,11 +6753,11 @@ msgstr "主题"
|
||||||
msgid "Interface setting"
|
msgid "Interface setting"
|
||||||
msgstr "界面设置"
|
msgstr "界面设置"
|
||||||
|
|
||||||
#: xpack/plugins/license/api.py:50
|
#: xpack/plugins/license/api.py:53
|
||||||
msgid "License import successfully"
|
msgid "License import successfully"
|
||||||
msgstr "许可证导入成功"
|
msgstr "许可证导入成功"
|
||||||
|
|
||||||
#: xpack/plugins/license/api.py:51
|
#: xpack/plugins/license/api.py:54
|
||||||
msgid "License is invalid"
|
msgid "License is invalid"
|
||||||
msgstr "无效的许可证"
|
msgstr "无效的许可证"
|
||||||
|
|
||||||
|
@ -6775,6 +6781,30 @@ msgstr "旗舰版"
|
||||||
msgid "Community edition"
|
msgid "Community edition"
|
||||||
msgstr "社区版"
|
msgstr "社区版"
|
||||||
|
|
||||||
|
#~ msgid "Account automation"
|
||||||
|
#~ msgstr "账号自动化"
|
||||||
|
|
||||||
|
#~ msgid "The asset {} system platform {} does not support run Ansible tasks"
|
||||||
|
#~ msgstr "资产 {} 系统平台 {} 不支持运行 Ansible 任务"
|
||||||
|
|
||||||
|
#~ msgid "Test assets connectivity: "
|
||||||
|
#~ msgstr "测试资产可连接性: "
|
||||||
|
|
||||||
|
#~ msgid "Unreachable"
|
||||||
|
#~ msgstr "不可达"
|
||||||
|
|
||||||
|
#~ msgid "Reachable"
|
||||||
|
#~ msgstr "可连接"
|
||||||
|
|
||||||
|
#~ msgid "Get asset info failed: {}"
|
||||||
|
#~ msgstr "获取资产信息失败:{}"
|
||||||
|
|
||||||
|
#~ msgid "Update asset hardware info: "
|
||||||
|
#~ msgstr "更新资产硬件信息: "
|
||||||
|
|
||||||
|
#~ msgid "Gather assets users"
|
||||||
|
#~ msgstr "收集资产上的用户"
|
||||||
|
|
||||||
#~ msgid "Push automation"
|
#~ msgid "Push automation"
|
||||||
#~ msgstr "自动化推送"
|
#~ msgstr "自动化推送"
|
||||||
|
|
||||||
|
|
|
@ -13,9 +13,9 @@ from rest_framework.response import Response
|
||||||
from rest_framework.serializers import ValidationError
|
from rest_framework.serializers import ValidationError
|
||||||
|
|
||||||
from common.utils import is_uuid
|
from common.utils import is_uuid
|
||||||
|
from common.drf.serializers import FileSerializer
|
||||||
from terminal import serializers
|
from terminal import serializers
|
||||||
from terminal.models import AppletPublication, Applet
|
from terminal.models import AppletPublication, Applet
|
||||||
from terminal.serializers import AppletUploadSerializer
|
|
||||||
|
|
||||||
|
|
||||||
__all__ = ['AppletViewSet', 'AppletPublicationViewSet']
|
__all__ = ['AppletViewSet', 'AppletPublicationViewSet']
|
||||||
|
@ -59,7 +59,7 @@ class DownloadUploadMixin:
|
||||||
raise ValidationError({'error': 'Missing name in manifest.yml'})
|
raise ValidationError({'error': 'Missing name in manifest.yml'})
|
||||||
return manifest, tmp_dir
|
return manifest, tmp_dir
|
||||||
|
|
||||||
@action(detail=False, methods=['post'], serializer_class=AppletUploadSerializer)
|
@action(detail=False, methods=['post'], serializer_class=FileSerializer)
|
||||||
def upload(self, request, *args, **kwargs):
|
def upload(self, request, *args, **kwargs):
|
||||||
manifest, tmp_dir = self.extract_and_check_file(request)
|
manifest, tmp_dir = self.extract_and_check_file(request)
|
||||||
name = manifest['name']
|
name = manifest['name']
|
||||||
|
|
|
@ -2,6 +2,8 @@ from rest_framework import viewsets
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
|
|
||||||
|
from common.drf.api import JMSModelViewSet
|
||||||
|
from orgs.utils import tmp_to_builtin_org
|
||||||
from terminal import serializers
|
from terminal import serializers
|
||||||
from terminal.models import AppletHost, Applet, AppletHostDeployment
|
from terminal.models import AppletHost, Applet, AppletHostDeployment
|
||||||
from terminal.tasks import run_applet_host_deployment
|
from terminal.tasks import run_applet_host_deployment
|
||||||
|
@ -10,26 +12,34 @@ from terminal.tasks import run_applet_host_deployment
|
||||||
__all__ = ['AppletHostViewSet', 'AppletHostDeploymentViewSet']
|
__all__ = ['AppletHostViewSet', 'AppletHostDeploymentViewSet']
|
||||||
|
|
||||||
|
|
||||||
class AppletHostViewSet(viewsets.ModelViewSet):
|
class AppletHostViewSet(JMSModelViewSet):
|
||||||
serializer_class = serializers.AppletHostSerializer
|
serializer_class = serializers.AppletHostSerializer
|
||||||
queryset = AppletHost.objects.all()
|
queryset = AppletHost.objects.all()
|
||||||
|
rbac_perms = {
|
||||||
|
'accounts': 'terminal.view_applethost',
|
||||||
|
'reports': '*'
|
||||||
|
}
|
||||||
|
|
||||||
@action(methods=['post'], detail=True)
|
@action(methods=['post'], detail=True, serializer_class=serializers.AppletHostReportSerializer)
|
||||||
def report(self, request, *args, **kwargs):
|
def reports(self, request, *args, **kwargs):
|
||||||
# TODO:
|
# 1. Host 和 Terminal 关联
|
||||||
# 1. 上报 安装的 Applets 每小时
|
# 2. 上报 安装的 Applets 每小时
|
||||||
# 2. Host 和 Terminal 关联
|
|
||||||
instance = self.get_object()
|
instance = self.get_object()
|
||||||
instance.sync()
|
serializer = self.get_serializer(data=request.data)
|
||||||
|
serializer.is_valid(raise_exception=True)
|
||||||
|
|
||||||
|
data = serializer.validated_data
|
||||||
|
instance.check_terminal_binding(request)
|
||||||
|
instance.check_applets_state(data['applets'])
|
||||||
return Response({'msg': 'ok'})
|
return Response({'msg': 'ok'})
|
||||||
|
|
||||||
@action(methods=['get'], detail=True)
|
@action(methods=['get'], detail=True, serializer_class=serializers.AppletHostAccountSerializer)
|
||||||
def accounts(self, request, *args, **kwargs):
|
def accounts(self, request, *args, **kwargs):
|
||||||
# TODO:
|
host = self.get_object()
|
||||||
# 1. 返回 host 上的所有用户, host 可以去创建和更新 每小时
|
with tmp_to_builtin_org(system=1):
|
||||||
# 2. 密码长度最少 8 位,包含大小写字母和数字和特殊字符
|
accounts = host.accounts.all().filter(privileged=False)
|
||||||
instance = self.get_object()
|
response = self.get_paginated_response_from_queryset(accounts)
|
||||||
return Response(instance.get_accounts())
|
return response
|
||||||
|
|
||||||
|
|
||||||
class AppletHostDeploymentViewSet(viewsets.ModelViewSet):
|
class AppletHostDeploymentViewSet(viewsets.ModelViewSet):
|
||||||
|
|
|
@ -52,7 +52,7 @@ class StatusViewSet(viewsets.ModelViewSet):
|
||||||
terminal_id = self.kwargs.get("terminal", None)
|
terminal_id = self.kwargs.get("terminal", None)
|
||||||
if terminal_id:
|
if terminal_id:
|
||||||
terminal = get_object_or_404(Terminal, id=terminal_id)
|
terminal = get_object_or_404(Terminal, id=terminal_id)
|
||||||
return terminal.status_set.all()
|
return terminal.status.all()
|
||||||
return super().get_queryset()
|
return super().get_queryset()
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -42,37 +42,6 @@ class TerminalViewSet(JMSBulkModelViewSet):
|
||||||
self.perform_destroy(instance)
|
self.perform_destroy(instance)
|
||||||
return Response(status=status.HTTP_204_NO_CONTENT)
|
return Response(status=status.HTTP_204_NO_CONTENT)
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
|
||||||
if isinstance(request.data, list):
|
|
||||||
raise exceptions.BulkCreateNotSupport()
|
|
||||||
|
|
||||||
name = request.data.get('name')
|
|
||||||
remote_ip = request.META.get('REMOTE_ADDR')
|
|
||||||
x_real_ip = request.META.get('X-Real-IP')
|
|
||||||
remote_addr = x_real_ip or remote_ip
|
|
||||||
|
|
||||||
terminal = get_object_or_none(Terminal, name=name, is_deleted=False)
|
|
||||||
if terminal:
|
|
||||||
msg = 'Terminal name %s already used' % name
|
|
||||||
return Response({'msg': msg}, status=409)
|
|
||||||
|
|
||||||
serializer = self.serializer_class(data={
|
|
||||||
'name': name, 'remote_addr': remote_addr
|
|
||||||
})
|
|
||||||
|
|
||||||
if serializer.is_valid():
|
|
||||||
terminal = serializer.save()
|
|
||||||
|
|
||||||
# App should use id, token get access key, if accepted
|
|
||||||
token = uuid.uuid4().hex
|
|
||||||
cache.set(token, str(terminal.id), 3600)
|
|
||||||
data = {"id": str(terminal.id), "token": token, "msg": "Need accept"}
|
|
||||||
return Response(data, status=201)
|
|
||||||
else:
|
|
||||||
data = serializer.errors
|
|
||||||
logger.error("Register terminal error: {}".format(data))
|
|
||||||
return Response(data, status=400)
|
|
||||||
|
|
||||||
def filter_queryset(self, queryset):
|
def filter_queryset(self, queryset):
|
||||||
queryset = super().filter_queryset(queryset)
|
queryset = super().filter_queryset(queryset)
|
||||||
s = self.request.query_params.get('status')
|
s = self.request.query_params.get('status')
|
||||||
|
|
|
@ -50,6 +50,7 @@ class TerminalTypeChoices(TextChoices):
|
||||||
celery = 'celery', 'Celery'
|
celery = 'celery', 'Celery'
|
||||||
magnus = 'magnus', 'Magnus'
|
magnus = 'magnus', 'Magnus'
|
||||||
razor = 'razor', 'Razor'
|
razor = 'razor', 'Razor'
|
||||||
|
tinker = 'tinker', 'Tinker'
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def types(cls):
|
def types(cls):
|
||||||
|
|
|
@ -13,6 +13,10 @@ class Migration(migrations.Migration):
|
||||||
migrations.AlterField(
|
migrations.AlterField(
|
||||||
model_name='terminal',
|
model_name='terminal',
|
||||||
name='type',
|
name='type',
|
||||||
field=models.CharField(choices=[('koko', 'KoKo'), ('guacamole', 'Guacamole'), ('omnidb', 'OmniDB'), ('xrdp', 'Xrdp'), ('lion', 'Lion'), ('core', 'Core'), ('celery', 'Celery'), ('magnus', 'Magnus'), ('razor', 'Razor')], default='koko', max_length=64, verbose_name='type'),
|
field=models.CharField(choices=[
|
||||||
|
('koko', 'KoKo'), ('guacamole', 'Guacamole'), ('omnidb', 'OmniDB'),
|
||||||
|
('xrdp', 'Xrdp'), ('lion', 'Lion'), ('core', 'Core'), ('celery', 'Celery'),
|
||||||
|
('magnus', 'Magnus'), ('razor', 'Razor'), ('tinker', 'Tinker'),
|
||||||
|
], default='koko', max_length=64, verbose_name='type'),
|
||||||
),
|
),
|
||||||
]
|
]
|
||||||
|
|
|
@ -39,7 +39,6 @@ class Migration(migrations.Migration):
|
||||||
name='AppletHost',
|
name='AppletHost',
|
||||||
fields=[
|
fields=[
|
||||||
('host_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.host')),
|
('host_ptr', models.OneToOneField(auto_created=True, on_delete=django.db.models.deletion.CASCADE, parent_link=True, primary_key=True, serialize=False, to='assets.host')),
|
||||||
('account_automation', models.BooleanField(default=False, verbose_name='Account automation')),
|
|
||||||
('date_synced', models.DateTimeField(blank=True, null=True, verbose_name='Date synced')),
|
('date_synced', models.DateTimeField(blank=True, null=True, verbose_name='Date synced')),
|
||||||
('status', models.CharField(max_length=16, verbose_name='Status')),
|
('status', models.CharField(max_length=16, verbose_name='Status')),
|
||||||
],
|
],
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
# Generated by Django 3.2.14 on 2022-11-03 08:24
|
||||||
|
|
||||||
|
from django.db import migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('terminal', '0057_auto_20221102_1941'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.AlterModelOptions(
|
||||||
|
name='terminal',
|
||||||
|
options={'permissions': (('view_terminalconfig', 'Can view terminal config'),), 'verbose_name': 'Terminal'},
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='terminal',
|
||||||
|
name='http_port',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='terminal',
|
||||||
|
name='is_accepted',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='terminal',
|
||||||
|
name='ssh_port',
|
||||||
|
),
|
||||||
|
migrations.RemoveField(
|
||||||
|
model_name='applethost',
|
||||||
|
name='status',
|
||||||
|
),
|
||||||
|
]
|
|
@ -1,7 +1,14 @@
|
||||||
|
import os
|
||||||
|
from collections import defaultdict
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django.utils import timezone
|
||||||
|
from rest_framework.exceptions import ValidationError
|
||||||
|
from simple_history.utils import bulk_create_with_history
|
||||||
|
|
||||||
from common.db.models import JMSBaseModel
|
from common.db.models import JMSBaseModel
|
||||||
|
from common.utils import random_string
|
||||||
from assets.models import Host
|
from assets.models import Host
|
||||||
|
|
||||||
|
|
||||||
|
@ -9,14 +16,10 @@ __all__ = ['AppletHost', 'AppletHostDeployment']
|
||||||
|
|
||||||
|
|
||||||
class AppletHost(Host):
|
class AppletHost(Host):
|
||||||
LOCKING_ORG = '00000000-0000-0000-0000-000000000004'
|
|
||||||
|
|
||||||
account_automation = models.BooleanField(default=False, verbose_name=_('Account automation'))
|
|
||||||
deploy_options = models.JSONField(default=dict, verbose_name=_('Deploy options'))
|
deploy_options = models.JSONField(default=dict, verbose_name=_('Deploy options'))
|
||||||
inited = models.BooleanField(default=False, verbose_name=_('Inited'))
|
inited = models.BooleanField(default=False, verbose_name=_('Inited'))
|
||||||
date_inited = models.DateTimeField(null=True, blank=True, verbose_name=_('Date inited'))
|
date_inited = models.DateTimeField(null=True, blank=True, verbose_name=_('Date inited'))
|
||||||
date_synced = models.DateTimeField(null=True, blank=True, verbose_name=_('Date synced'))
|
date_synced = models.DateTimeField(null=True, blank=True, verbose_name=_('Date synced'))
|
||||||
status = models.CharField(max_length=16, verbose_name=_('Status'))
|
|
||||||
terminal = models.OneToOneField(
|
terminal = models.OneToOneField(
|
||||||
'terminal.Terminal', on_delete=models.PROTECT, null=True, blank=True,
|
'terminal.Terminal', on_delete=models.PROTECT, null=True, blank=True,
|
||||||
related_name='applet_host', verbose_name=_('Terminal')
|
related_name='applet_host', verbose_name=_('Terminal')
|
||||||
|
@ -25,10 +28,78 @@ class AppletHost(Host):
|
||||||
'Applet', verbose_name=_('Applet'),
|
'Applet', verbose_name=_('Applet'),
|
||||||
through='AppletPublication', through_fields=('host', 'applet'),
|
through='AppletPublication', through_fields=('host', 'applet'),
|
||||||
)
|
)
|
||||||
|
LOCKING_ORG = '00000000-0000-0000-0000-000000000004'
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return self.name
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def status(self):
|
||||||
|
if self.terminal:
|
||||||
|
return 'online'
|
||||||
|
return self.terminal.status
|
||||||
|
|
||||||
|
def check_terminal_binding(self, request):
|
||||||
|
request_terminal = getattr(request.user, 'terminal', None)
|
||||||
|
if not request_terminal:
|
||||||
|
raise ValidationError('Request user has no terminal')
|
||||||
|
|
||||||
|
self.date_synced = timezone.now()
|
||||||
|
if not self.terminal:
|
||||||
|
self.terminal = request_terminal
|
||||||
|
self.save(update_fields=['terminal', 'date_synced'])
|
||||||
|
elif self.terminal and self.terminal != request_terminal:
|
||||||
|
raise ValidationError('Terminal has been set')
|
||||||
|
else:
|
||||||
|
self.save(update_fields=['date_synced'])
|
||||||
|
|
||||||
|
def check_applets_state(self, applets_value_list):
|
||||||
|
applets = self.applets.all()
|
||||||
|
name_version_mapper = {
|
||||||
|
value['name']: value['version']
|
||||||
|
for value in applets_value_list
|
||||||
|
}
|
||||||
|
|
||||||
|
status_applets = defaultdict(list)
|
||||||
|
for applet in applets:
|
||||||
|
if applet.name not in name_version_mapper:
|
||||||
|
status_applets['unpublished'].append(applet)
|
||||||
|
elif applet.version != name_version_mapper[applet.name]:
|
||||||
|
status_applets['not_match'].append(applet)
|
||||||
|
else:
|
||||||
|
status_applets['published'].append(applet)
|
||||||
|
|
||||||
|
for status, applets in status_applets.items():
|
||||||
|
self.publications.filter(applet__in=applets)\
|
||||||
|
.exclude(status=status)\
|
||||||
|
.update(status=status)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def random_username():
|
||||||
|
return 'jms_' + random_string(8)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def random_password():
|
||||||
|
return random_string(16, special_char=True)
|
||||||
|
|
||||||
|
def generate_accounts(self):
|
||||||
|
amount = int(os.getenv('TERMINAL_ACCOUNTS_AMOUNT', 100))
|
||||||
|
now_count = self.accounts.filter(privileged=False).count()
|
||||||
|
need = amount - now_count
|
||||||
|
|
||||||
|
accounts = []
|
||||||
|
account_model = self.accounts.model
|
||||||
|
for i in range(need):
|
||||||
|
username = self.random_username()
|
||||||
|
password = self.random_password()
|
||||||
|
account = account_model(
|
||||||
|
username=username, secret=password, name=username,
|
||||||
|
asset_id=self.id, secret_type='password', version=1,
|
||||||
|
org_id=self.LOCKING_ORG
|
||||||
|
)
|
||||||
|
accounts.append(account)
|
||||||
|
bulk_create_with_history(accounts, account_model, batch_size=20)
|
||||||
|
|
||||||
|
|
||||||
class AppletHostDeployment(JMSBaseModel):
|
class AppletHostDeployment(JMSBaseModel):
|
||||||
host = models.ForeignKey('AppletHost', on_delete=models.CASCADE, verbose_name=_('Hosting'))
|
host = models.ForeignKey('AppletHost', on_delete=models.CASCADE, verbose_name=_('Hosting'))
|
||||||
|
|
|
@ -22,7 +22,7 @@ class Status(models.Model):
|
||||||
connections = models.IntegerField(verbose_name=_("Connections"), default=0)
|
connections = models.IntegerField(verbose_name=_("Connections"), default=0)
|
||||||
threads = models.IntegerField(verbose_name=_("Threads"), default=0)
|
threads = models.IntegerField(verbose_name=_("Threads"), default=0)
|
||||||
boot_time = models.FloatField(verbose_name=_("Boot Time"), default=0)
|
boot_time = models.FloatField(verbose_name=_("Boot Time"), default=0)
|
||||||
terminal = models.ForeignKey('terminal.Terminal', null=True, on_delete=models.CASCADE)
|
terminal = models.ForeignKey('terminal.Terminal', null=True, on_delete=models.CASCADE, related_name='status')
|
||||||
date_created = models.DateTimeField(auto_now_add=True)
|
date_created = models.DateTimeField(auto_now_add=True)
|
||||||
|
|
||||||
CACHE_KEY = 'TERMINAL_STATUS_{}'
|
CACHE_KEY = 'TERMINAL_STATUS_{}'
|
||||||
|
|
|
@ -9,7 +9,7 @@ from common.utils import get_logger
|
||||||
from users.models import User
|
from users.models import User
|
||||||
from orgs.utils import tmp_to_root_org
|
from orgs.utils import tmp_to_root_org
|
||||||
from .status import Status
|
from .status import Status
|
||||||
from terminal import const
|
from terminal.const import TerminalTypeChoices as TypeChoices
|
||||||
from terminal.const import ComponentStatusChoices as StatusChoice
|
from terminal.const import ComponentStatusChoices as StatusChoice
|
||||||
from ..session import Session
|
from ..session import Session
|
||||||
|
|
||||||
|
@ -99,16 +99,13 @@ class Terminal(StorageMixin, TerminalStatusMixin, models.Model):
|
||||||
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
|
id = models.UUIDField(default=uuid.uuid4, primary_key=True)
|
||||||
name = models.CharField(max_length=128, verbose_name=_('Name'))
|
name = models.CharField(max_length=128, verbose_name=_('Name'))
|
||||||
type = models.CharField(
|
type = models.CharField(
|
||||||
choices=const.TerminalTypeChoices.choices, default=const.TerminalTypeChoices.koko.value,
|
choices=TypeChoices.choices, default=TypeChoices.koko,
|
||||||
max_length=64, verbose_name=_('type')
|
max_length=64, verbose_name=_('type')
|
||||||
)
|
)
|
||||||
remote_addr = models.CharField(max_length=128, blank=True, verbose_name=_('Remote Address'))
|
remote_addr = models.CharField(max_length=128, blank=True, verbose_name=_('Remote Address'))
|
||||||
ssh_port = models.IntegerField(verbose_name=_('SSH Port'), default=2222)
|
|
||||||
http_port = models.IntegerField(verbose_name=_('HTTP Port'), default=5000)
|
|
||||||
command_storage = models.CharField(max_length=128, verbose_name=_("Command storage"), default='default')
|
command_storage = models.CharField(max_length=128, verbose_name=_("Command storage"), default='default')
|
||||||
replay_storage = models.CharField(max_length=128, verbose_name=_("Replay storage"), default='default')
|
replay_storage = models.CharField(max_length=128, verbose_name=_("Replay storage"), default='default')
|
||||||
user = models.OneToOneField(User, related_name='terminal', verbose_name='Application User', null=True, on_delete=models.CASCADE)
|
user = models.OneToOneField(User, related_name='terminal', verbose_name='Application User', null=True, on_delete=models.CASCADE)
|
||||||
is_accepted = models.BooleanField(default=False, verbose_name='Is Accepted')
|
|
||||||
is_deleted = models.BooleanField(default=False)
|
is_deleted = models.BooleanField(default=False)
|
||||||
date_created = models.DateTimeField(auto_now_add=True)
|
date_created = models.DateTimeField(auto_now_add=True)
|
||||||
comment = models.TextField(blank=True, verbose_name=_('Comment'))
|
comment = models.TextField(blank=True, verbose_name=_('Comment'))
|
||||||
|
@ -167,9 +164,7 @@ class Terminal(StorageMixin, TerminalStatusMixin, models.Model):
|
||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
status = "Active"
|
status = "Active"
|
||||||
if not self.is_accepted:
|
if self.is_deleted:
|
||||||
status = "NotAccept"
|
|
||||||
elif self.is_deleted:
|
|
||||||
status = "Deleted"
|
status = "Deleted"
|
||||||
elif not self.is_active:
|
elif not self.is_active:
|
||||||
status = "Disable"
|
status = "Disable"
|
||||||
|
@ -178,7 +173,6 @@ class Terminal(StorageMixin, TerminalStatusMixin, models.Model):
|
||||||
return '%s: %s' % (self.name, status)
|
return '%s: %s' % (self.name, status)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
ordering = ('is_accepted',)
|
|
||||||
db_table = "terminal"
|
db_table = "terminal"
|
||||||
verbose_name = _("Terminal")
|
verbose_name = _("Terminal")
|
||||||
permissions = (
|
permissions = (
|
||||||
|
|
|
@ -1,22 +1,22 @@
|
||||||
from rest_framework import serializers
|
from rest_framework import serializers
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
from django.db import models
|
||||||
|
|
||||||
from common.drf.fields import ObjectRelatedField, LabeledChoiceField
|
from common.drf.fields import ObjectRelatedField, LabeledChoiceField
|
||||||
from common.const.choices import Status
|
|
||||||
from ..models import Applet, AppletPublication, AppletHost
|
from ..models import Applet, AppletPublication, AppletHost
|
||||||
|
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'AppletSerializer', 'AppletPublicationSerializer',
|
'AppletSerializer', 'AppletPublicationSerializer',
|
||||||
'AppletUploadSerializer',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class AppletUploadSerializer(serializers.Serializer):
|
|
||||||
file = serializers.FileField()
|
|
||||||
|
|
||||||
|
|
||||||
class AppletPublicationSerializer(serializers.ModelSerializer):
|
class AppletPublicationSerializer(serializers.ModelSerializer):
|
||||||
|
class Status(models.TextChoices):
|
||||||
|
PUBLISHED = 'published', _('Published')
|
||||||
|
UNPUBLISHED = 'unpublished', _('Unpublished')
|
||||||
|
NOT_MATCH = 'not_match', _('Not match')
|
||||||
|
|
||||||
applet = ObjectRelatedField(attrs=('id', 'display_name', 'icon', 'version'), queryset=Applet.objects.all())
|
applet = ObjectRelatedField(attrs=('id', 'display_name', 'icon', 'version'), queryset=Applet.objects.all())
|
||||||
host = ObjectRelatedField(queryset=AppletHost.objects.all())
|
host = ObjectRelatedField(queryset=AppletHost.objects.all())
|
||||||
status = LabeledChoiceField(choices=Status.choices, label=_("Status"))
|
status = LabeledChoiceField(choices=Status.choices, label=_("Status"))
|
||||||
|
|
|
@ -2,7 +2,8 @@ from rest_framework import serializers
|
||||||
from django.utils.translation import gettext_lazy as _
|
from django.utils.translation import gettext_lazy as _
|
||||||
|
|
||||||
from common.validators import ProjectUniqueValidator
|
from common.validators import ProjectUniqueValidator
|
||||||
from assets.models import Platform
|
from common.drf.fields import ObjectRelatedField
|
||||||
|
from assets.models import Platform, Account
|
||||||
from assets.serializers import HostSerializer
|
from assets.serializers import HostSerializer
|
||||||
from ..models import AppletHost, AppletHostDeployment, Applet
|
from ..models import AppletHost, AppletHostDeployment, Applet
|
||||||
from .applet import AppletSerializer
|
from .applet import AppletSerializer
|
||||||
|
@ -10,6 +11,7 @@ from .applet import AppletSerializer
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'AppletHostSerializer', 'AppletHostDeploymentSerializer',
|
'AppletHostSerializer', 'AppletHostDeploymentSerializer',
|
||||||
|
'AppletHostAccountSerializer', 'AppletHostReportSerializer'
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
@ -36,7 +38,7 @@ class AppletHostSerializer(HostSerializer):
|
||||||
class Meta(HostSerializer.Meta):
|
class Meta(HostSerializer.Meta):
|
||||||
model = AppletHost
|
model = AppletHost
|
||||||
fields = HostSerializer.Meta.fields + [
|
fields = HostSerializer.Meta.fields + [
|
||||||
'account_automation', 'status', 'date_synced', 'deploy_options'
|
'status', 'date_synced', 'deploy_options'
|
||||||
]
|
]
|
||||||
extra_kwargs = {
|
extra_kwargs = {
|
||||||
'status': {'read_only': True},
|
'status': {'read_only': True},
|
||||||
|
@ -86,3 +88,13 @@ class AppletHostDeploymentSerializer(serializers.ModelSerializer):
|
||||||
'date_start', 'date_finished'
|
'date_start', 'date_finished'
|
||||||
]
|
]
|
||||||
fields = fields_mini + ['comment'] + read_only_fields
|
fields = fields_mini + ['comment'] + read_only_fields
|
||||||
|
|
||||||
|
|
||||||
|
class AppletHostAccountSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = Account
|
||||||
|
fields = ['id', 'username', 'secret', 'date_updated']
|
||||||
|
|
||||||
|
|
||||||
|
class AppletHostReportSerializer(serializers.Serializer):
|
||||||
|
applets = ObjectRelatedField(attrs=('id', 'name', 'version'), queryset=Applet.objects.all(), many=True)
|
||||||
|
|
|
@ -3,8 +3,8 @@ from django.utils.translation import ugettext_lazy as _
|
||||||
|
|
||||||
from common.drf.serializers import BulkModelSerializer
|
from common.drf.serializers import BulkModelSerializer
|
||||||
from common.utils import is_uuid
|
from common.utils import is_uuid
|
||||||
from users.serializers import ServiceAccountSerializer
|
|
||||||
from common.utils import get_request_ip, pretty_string
|
from common.utils import get_request_ip, pretty_string
|
||||||
|
from users.serializers import ServiceAccountSerializer
|
||||||
from .. import const
|
from .. import const
|
||||||
|
|
||||||
from ..models import (
|
from ..models import (
|
||||||
|
|
|
@ -4,7 +4,6 @@
|
||||||
from django.db.models.signals import post_save
|
from django.db.models.signals import post_save
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
|
||||||
|
|
||||||
from .models import Applet, AppletHost
|
from .models import Applet, AppletHost
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,6 +13,7 @@ def on_applet_host_create(sender, instance, created=False, **kwargs):
|
||||||
return
|
return
|
||||||
applets = Applet.objects.all()
|
applets = Applet.objects.all()
|
||||||
instance.applets.set(applets)
|
instance.applets.set(applets)
|
||||||
|
instance.generate_accounts()
|
||||||
|
|
||||||
|
|
||||||
@receiver(post_save, sender=Applet)
|
@receiver(post_save, sender=Applet)
|
||||||
|
|
Loading…
Reference in New Issue