diff --git a/apps/accounts/automations/change_secret/custom/ssh/manifest.yml b/apps/accounts/automations/change_secret/custom/ssh/manifest.yml index c46511344..be0248d68 100644 --- a/apps/accounts/automations/change_secret/custom/ssh/manifest.yml +++ b/apps/accounts/automations/change_secret/custom/ssh/manifest.yml @@ -9,12 +9,22 @@ method: change_secret params: - name: commands type: list - label: '自定义命令' + label: "{{ 'Params commands label' | trans }}" default: [ '' ] - help_text: '自定义命令中如需包含账号的 账号、密码、SSH 连接的用户密码 字段,
请使用 {username}、{password}、{login_password}格式,执行任务时会进行替换 。
比如针对 Cisco 主机进行改密,一般需要配置五条命令:
1. enable
2. {login_password}
3. configure terminal
4. username {username} privilege 0 password {password}
5. end' + help_text: "{{ 'Params commands help text' | trans }}" i18n: SSH account change secret: - zh: 使用 SSH 命令行自定义改密 - ja: SSH コマンドライン方式でカスタムパスワード変更 - en: Custom password change by SSH command line + zh: '使用 SSH 命令行自定义改密' + ja: 'SSH コマンドライン方式でカスタムパスワード変更' + en: 'Custom password change by SSH command line' + + Params commands help text: + zh: '自定义命令中如需包含账号的 账号、密码、SSH 连接的用户密码 字段,
请使用 {username}、{password}、{login_password}格式,执行任务时会进行替换 。
比如针对 Cisco 主机进行改密,一般需要配置五条命令:
1. enable
2. {login_password}
3. configure terminal
4. username {username} privilege 0 password {password}
5. end' + ja: 'カスタム コマンドに SSH 接続用のアカウント番号、パスワード、ユーザー パスワード フィールドを含める必要がある場合は、
{ユーザー名}、{パスワード}、{login_password& を使用してください。 # 125; 形式。タスクの実行時に置き換えられます。
たとえば、Cisco ホストのパスワードを変更するには、通常、次の 5 つのコマンドを設定する必要があります:
1.enable
2.{login_password}
3 .ターミナルの設定
4. ユーザー名 {ユーザー名} 権限 0 パスワード {パスワード}
5. 終了' + en: 'If the custom command needs to include the account number, password, and user password field for SSH connection,
Please use {username}, {password}, {login_password&# 125; format, which will be replaced when executing the task.
For example, to change the password of a Cisco host, you generally need to configure five commands:
1. enable
2. {login_password}
3. configure terminal
4. username {username} privilege 0 password {password}
5. end' + + Params commands label: + zh: '自定义命令' + ja: 'カスタムコマンド' + en: 'Custom command' diff --git a/apps/accounts/automations/push_account/host/aix/manifest.yml b/apps/accounts/automations/push_account/host/aix/manifest.yml index 949d49758..ee62d7020 100644 --- a/apps/accounts/automations/push_account/host/aix/manifest.yml +++ b/apps/accounts/automations/push_account/host/aix/manifest.yml @@ -9,7 +9,7 @@ params: type: str label: 'Sudo' default: '/bin/whoami' - help_text: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig' + help_text: "{{ 'Params sudo help text' | trans }}" - name: shell type: str @@ -18,19 +18,44 @@ params: - name: home type: str - label: '家目录' + label: "{{ 'Params home label' | trans }}" default: '' - help_text: '默认家目录 /home/系统用户名: /home/username' + help_text: "{{ 'Params home help text' | trans }}" - name: groups type: str - label: '用户组' + label: "{{ 'Params groups label' | trans }}" default: '' - help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)' + help_text: "{{ 'Params groups help text' | trans }}" i18n: Aix account push: - zh: 使用 Ansible 模块 user 执行 Aix 账号推送 (DES) - ja: Ansible user モジュールを使用して Aix アカウントをプッシュする (DES) - en: Using Ansible module user to push account (DES) + zh: '使用 Ansible 模块 user 执行 Aix 账号推送 (DES)' + ja: 'Ansible user モジュールを使用して Aix アカウントをプッシュする (DES)' + en: 'Using Ansible module user to push account (DES)' + + Params sudo help text: + zh: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig' + ja: 'コンマで区切って複数のコマンドを入力してください。例: /bin/whoami,/sbin/ifconfig' + en: 'Use commas to separate multiple commands, such as: /bin/whoami,/sbin/ifconfig' + + Params home help text: + zh: '默认家目录 /home/{账号用户名}' + ja: 'デフォルトのホームディレクトリ /home/{アカウントユーザ名}' + en: 'Default home directory /home/{account username}' + + Params groups help text: + zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)' + ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)' + en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)' + + Params home label: + zh: '家目录' + ja: 'ホームディレクトリ' + en: 'Home' + + Params groups label: + zh: '用户组' + ja: 'グループ' + en: 'Groups' diff --git a/apps/accounts/automations/push_account/host/posix/manifest.yml b/apps/accounts/automations/push_account/host/posix/manifest.yml index 0c1d31845..32964f1d6 100644 --- a/apps/accounts/automations/push_account/host/posix/manifest.yml +++ b/apps/accounts/automations/push_account/host/posix/manifest.yml @@ -10,7 +10,7 @@ params: type: str label: 'Sudo' default: '/bin/whoami' - help_text: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig' + help_text: "{{ 'Params sudo help text' | trans }}" - name: shell type: str @@ -20,18 +20,43 @@ params: - name: home type: str - label: '家目录' + label: "{{ 'Params home label' | trans }}" default: '' - help_text: '默认家目录 /home/系统用户名: /home/username' + help_text: "{{ 'Params home help text' | trans }}" - name: groups type: str - label: '用户组' + label: "{{ 'Params groups label' | trans }}" default: '' - help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)' + help_text: "{{ 'Params groups help text' | trans }}" i18n: Posix account push: - zh: 使用 Ansible 模块 user 执行账号推送 (sha512) - ja: Ansible user モジュールを使用してアカウントをプッシュする (sha512) - en: Using Ansible module user to push account (sha512) + zh: '使用 Ansible 模块 user 执行账号推送 (sha512)' + ja: 'Ansible user モジュールを使用してアカウントをプッシュする (sha512)' + en: 'Using Ansible module user to push account (sha512)' + + Params sudo help text: + zh: '使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig' + ja: 'コンマで区切って複数のコマンドを入力してください。例: /bin/whoami,/sbin/ifconfig' + en: 'Use commas to separate multiple commands, such as: /bin/whoami,/sbin/ifconfig' + + Params home help text: + zh: '默认家目录 /home/{账号用户名}' + ja: 'デフォルトのホームディレクトリ /home/{アカウントユーザ名}' + en: 'Default home directory /home/{account username}' + + Params groups help text: + zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)' + ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)' + en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)' + + Params home label: + zh: '家目录' + ja: 'ホームディレクトリ' + en: 'Home' + + Params groups label: + zh: '用户组' + ja: 'グループ' + en: 'Groups' \ No newline at end of file diff --git a/apps/accounts/automations/push_account/host/windows/manifest.yml b/apps/accounts/automations/push_account/host/windows/manifest.yml index 7866e3c13..dcbdfe7f8 100644 --- a/apps/accounts/automations/push_account/host/windows/manifest.yml +++ b/apps/accounts/automations/push_account/host/windows/manifest.yml @@ -10,10 +10,15 @@ params: type: str label: '用户组' default: 'Users,Remote Desktop Users' - help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)' + help_text: "{{ 'Params groups help text' | trans }}" i18n: Windows account push: - zh: 使用 Ansible 模块 win_user 执行 Windows 账号推送 - ja: Ansible win_user モジュールを使用して Windows アカウントをプッシュする - en: Using Ansible module win_user to push account + zh: '使用 Ansible 模块 win_user 执行 Windows 账号推送' + ja: 'Ansible win_user モジュールを使用して Windows アカウントをプッシュする' + en: 'Using Ansible module win_user to push account' + + Params groups help text: + zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)' + ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)' + en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)' diff --git a/apps/accounts/automations/push_account/host/windows_rdp_verify/manifest.yml b/apps/accounts/automations/push_account/host/windows_rdp_verify/manifest.yml index 449cf726f..d08a29ebc 100644 --- a/apps/accounts/automations/push_account/host/windows_rdp_verify/manifest.yml +++ b/apps/accounts/automations/push_account/host/windows_rdp_verify/manifest.yml @@ -10,10 +10,15 @@ params: type: str label: '用户组' default: 'Users,Remote Desktop Users' - help_text: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)' + help_text: "{{ 'Params groups help text' | trans }}" i18n: Windows account push rdp verify: - zh: 使用 Ansible 模块 win_user 执行 Windows 账号推送 RDP 协议测试最后的可连接性 - ja: Ansibleモジュールwin_userがWindowsアカウントプッシュRDPプロトコルテストを実行する最後の接続性 - en: Using the Ansible module win_user performs Windows account push RDP protocol testing for final connectivity + zh: '使用 Ansible 模块 win_user 执行 Windows 账号推送(最后使用 Python 模块 pyfreerdp 验证账号的可连接性)' + ja: 'Ansible モジュール win_user を使用して Windows アカウントのプッシュを実行します (最後に Python モジュール pyfreerdp を使用してアカウントの接続性を確認します)' + en: 'Use the Ansible module win_user to perform Windows account push (finally use the Python module pyfreerdp to verify the connectability of the account)' + + Params groups help text: + zh: '请输入用户组,多个用户组使用逗号分隔(需填写已存在的用户组)' + ja: 'グループを入力してください。複数のグループはコンマで区切ってください(既存のグループを入力してください)' + en: 'Please enter the group. Multiple groups are separated by commas (please enter the existing group)' diff --git a/apps/accounts/automations/verify_account/custom/rdp/manifest.yml b/apps/accounts/automations/verify_account/custom/rdp/manifest.yml index 79fcce96b..1d68afbac 100644 --- a/apps/accounts/automations/verify_account/custom/rdp/manifest.yml +++ b/apps/accounts/automations/verify_account/custom/rdp/manifest.yml @@ -8,6 +8,6 @@ method: verify_account i18n: Windows rdp account verify: - zh: 使用 Python 模块 pyfreerdp 验证账号 - ja: Python モジュール pyfreerdp を使用してアカウントを検証する - en: Using Python module pyfreerdp to verify account + zh: '使用 Python 模块 pyfreerdp 验证账号' + ja: 'Python モジュール pyfreerdp を使用してアカウントを検証する' + en: 'Using Python module pyfreerdp to verify account' diff --git a/apps/accounts/automations/verify_account/custom/ssh/manifest.yml b/apps/accounts/automations/verify_account/custom/ssh/manifest.yml index 666266416..12d495d01 100644 --- a/apps/accounts/automations/verify_account/custom/ssh/manifest.yml +++ b/apps/accounts/automations/verify_account/custom/ssh/manifest.yml @@ -9,6 +9,6 @@ method: verify_account i18n: SSH account verify: - zh: 使用 Python 模块 paramiko 验证账号 - ja: Python モジュール paramiko を使用してアカウントを検証する - en: Using Python module paramiko to verify account + zh: '使用 Python 模块 paramiko 验证账号' + ja: 'Python モジュール paramiko を使用してアカウントを検証する' + en: 'Using Python module paramiko to verify account' diff --git a/apps/assets/automations/gather_facts/host/posix/manifest.yml b/apps/assets/automations/gather_facts/host/posix/manifest.yml index a92c496e9..d1a833311 100644 --- a/apps/assets/automations/gather_facts/host/posix/manifest.yml +++ b/apps/assets/automations/gather_facts/host/posix/manifest.yml @@ -7,6 +7,6 @@ type: method: gather_facts i18n: Gather posix facts: - zh: 使用 Ansible 指令 gather_facts 从主机获取设备信息 - en: Gather facts from asset using gather_facts - ja: gather_factsを使用してPosixから情報を収集する + zh: '使用 Ansible 指令 gather_facts 从主机获取设备信息' + en: 'Gather facts from asset using gather_facts' + ja: 'gather_factsを使用してPosixから情報を収集する' diff --git a/apps/assets/automations/gather_facts/host/windows/manifest.yml b/apps/assets/automations/gather_facts/host/windows/manifest.yml index 809208e10..7068f4d6e 100644 --- a/apps/assets/automations/gather_facts/host/windows/manifest.yml +++ b/apps/assets/automations/gather_facts/host/windows/manifest.yml @@ -7,6 +7,6 @@ type: - windows i18n: Gather facts windows: - zh: 使用 Ansible 指令 gather_facts 从 Windows 获取设备信息 - en: Gather facts from Windows using gather_facts - ja: gather_factsを使用してWindowsから情報を収集する + zh: '使用 Ansible 指令 gather_facts 从 Windows 获取设备信息' + en: 'Gather facts from Windows using gather_facts' + ja: 'gather_factsを使用してWindowsから情報を収集する' diff --git a/apps/assets/automations/methods.py b/apps/assets/automations/methods.py index 8db474d7b..b0ad883fd 100644 --- a/apps/assets/automations/methods.py +++ b/apps/assets/automations/methods.py @@ -31,7 +31,7 @@ def generate_serializer(data): return create_serializer_class(serializer_name, params) -def get_platform_automation_methods(path): +def get_platform_automation_methods(path, lang=None): methods = [] for root, dirs, files in os.walk(path, topdown=False): for name in files: @@ -40,7 +40,7 @@ def get_platform_automation_methods(path): continue with open(path, 'r', encoding='utf8') as f: - manifest = yaml_load_with_i18n(f) + manifest = yaml_load_with_i18n(f, lang) check_platform_method(manifest, path) manifest['dir'] = os.path.dirname(path) manifest['params_serializer'] = generate_serializer(manifest) diff --git a/apps/assets/automations/ping/custom/rdp/manifest.yml b/apps/assets/automations/ping/custom/rdp/manifest.yml index 77b8a855e..ab5846100 100644 --- a/apps/assets/automations/ping/custom/rdp/manifest.yml +++ b/apps/assets/automations/ping/custom/rdp/manifest.yml @@ -8,6 +8,6 @@ type: method: ping i18n: Ping by pyfreerdp: - zh: 使用 Python 模块 pyfreerdp 测试主机可连接性 - en: Ping by pyfreerdp module - ja: Pyfreerdpモジュールを使用してホストにPingする + zh: '使用 Python 模块 pyfreerdp 测试主机可连接性' + en: 'Ping by pyfreerdp module' + ja: 'Pyfreerdpモジュールを使用してホストにPingする' diff --git a/apps/assets/automations/ping/custom/ssh/manifest.yml b/apps/assets/automations/ping/custom/ssh/manifest.yml index d57a50a2e..95bb85d60 100644 --- a/apps/assets/automations/ping/custom/ssh/manifest.yml +++ b/apps/assets/automations/ping/custom/ssh/manifest.yml @@ -8,6 +8,6 @@ type: method: ping i18n: Ping by paramiko: - zh: 使用 Python 模块 paramiko 测试主机可连接性 - en: Ping by paramiko module - ja: Paramikoモジュールを使用してホストにPingする + zh: '使用 Python 模块 paramiko 测试主机可连接性' + en: 'Ping by paramiko module' + ja: 'Paramikoモジュールを使用してホストにPingする' diff --git a/apps/assets/const/types.py b/apps/assets/const/types.py index 8654002b9..c33052c64 100644 --- a/apps/assets/const/types.py +++ b/apps/assets/const/types.py @@ -2,9 +2,11 @@ import json from collections import defaultdict from copy import deepcopy +from django.conf import settings from django.utils.translation import gettext as _ from common.db.models import ChoicesMixin +from jumpserver.utils import get_current_request from .category import Category from .cloud import CloudTypes from .custom import CustomTypes @@ -22,6 +24,8 @@ class AllTypes(ChoicesMixin): CloudTypes, WebTypes, CustomTypes, GPTTypes ] _category_constrains = {} + _automation_methods = None + _current_language = settings.LANGUAGE_CODE @classmethod def choices(cls): @@ -61,9 +65,28 @@ class AllTypes(ChoicesMixin): @classmethod def get_automation_methods(cls): - from assets.automations import platform_automation_methods as asset_methods - from accounts.automations import platform_automation_methods as account_methods - return asset_methods + account_methods + from assets.automations import methods as asset + from accounts.automations import methods as account + + automation_methods = \ + asset.platform_automation_methods + \ + account.platform_automation_methods + + request = get_current_request() + if request is None: + return automation_methods + + language = request.LANGUAGE_CODE + if cls._automation_methods is not None and language == cls._current_language: + automation_methods = cls._automation_methods + else: + automation_methods = \ + asset.get_platform_automation_methods(asset.BASE_DIR, language) + \ + account.get_platform_automation_methods(account.BASE_DIR, language) + + cls._current_language = language + cls._automation_methods = automation_methods + return cls._automation_methods @classmethod def set_automation_methods(cls, category, tp_name, constraints): diff --git a/apps/common/utils/yml.py b/apps/common/utils/yml.py index 6db03ea63..c5221b948 100644 --- a/apps/common/utils/yml.py +++ b/apps/common/utils/yml.py @@ -5,20 +5,21 @@ from django.conf import settings from jinja2 import Environment -def translate(key, i18n): - lang = settings.LANGUAGE_CODE[:2] +def translate(key, i18n, lang): + lang = settings.LANGUAGE_CODE if lang is None else lang + lang = lang[:2] lang_data = i18n.get(key, {}) return lang_data.get(lang, key) -def yaml_load_with_i18n(stream): +def yaml_load_with_i18n(stream, lang): ori_text = stream.read() stream = io.StringIO(ori_text) yaml_data = yaml.safe_load(stream) i18n = yaml_data.get('i18n', {}) env = Environment() - env.filters['trans'] = lambda key: translate(key, i18n) + env.filters['trans'] = lambda key: translate(key, i18n, lang) template = env.from_string(ori_text) yaml_data = template.render() yaml_f = io.StringIO(yaml_data)