mirror of https://github.com/jumpserver/jumpserver
[Update] 抽象Inventory,更新翻译 (#2530)
* [Update] 抽象Inventory, 支持自定义用户名密码构建Inventory * [Update] 更新翻译pull/2541/head
parent
7ea03801d0
commit
612d5efd1b
|
@ -82,7 +82,7 @@
|
|||
<div id="actions" class="" style="margin-top: -20px">
|
||||
<div class="input-group">
|
||||
<select class="form-control m-b" style="width: auto" id="slct_bulk_update">
|
||||
<option value="export">{% trans 'Export login log' %}</option>
|
||||
<option value="export">{% trans 'Export' %}</option>
|
||||
</select>
|
||||
<div class="input-group-btn pull-left" style="padding-left: 5px;">
|
||||
<button id='btn_bulk_update' style="height: 32px;" class="btn btn-sm btn-primary btn_export">
|
||||
|
|
Binary file not shown.
|
@ -8,7 +8,7 @@ msgid ""
|
|||
msgstr ""
|
||||
"Project-Id-Version: Jumpserver 0.3.3\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2019-03-22 15:57+0800\n"
|
||||
"POT-Creation-Date: 2019-03-22 16:48+0800\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: ibuler <ibuler@qq.com>\n"
|
||||
"Language-Team: Jumpserver team<ibuler@qq.com>\n"
|
||||
|
@ -1337,6 +1337,7 @@ msgid "Import"
|
|||
msgstr "导入"
|
||||
|
||||
#: assets/templates/assets/asset_list.html:76
|
||||
#: audits/templates/audits/login_log_list.html:85
|
||||
#: users/templates/users/user_list.html:10
|
||||
msgid "Export"
|
||||
msgstr "导出"
|
||||
|
@ -1947,12 +1948,6 @@ msgstr "城市"
|
|||
msgid "Date"
|
||||
msgstr "日期"
|
||||
|
||||
#: audits/templates/audits/login_log_list.html:85
|
||||
#, fuzzy
|
||||
#| msgid "Login log"
|
||||
msgid "Export login log"
|
||||
msgstr "登录日志"
|
||||
|
||||
#: audits/templates/audits/operate_log_list.html:71
|
||||
#: audits/templates/audits/password_change_log_list.html:53
|
||||
#: ops/templates/ops/task_adhoc.html:63
|
||||
|
@ -1983,8 +1978,6 @@ msgid "Login log"
|
|||
msgstr "登录日志"
|
||||
|
||||
#: audits/views.py:242
|
||||
#, fuzzy
|
||||
#| msgid "Command execution"
|
||||
msgid "Command execution log"
|
||||
msgstr "命令执行"
|
||||
|
||||
|
@ -4709,7 +4702,7 @@ msgstr "选择管理员"
|
|||
#: xpack/plugins/cloud/views.py:41 xpack/plugins/cloud/views.py:57
|
||||
#: xpack/plugins/cloud/views.py:71 xpack/plugins/cloud/views.py:84
|
||||
#: xpack/plugins/cloud/views.py:100 xpack/plugins/cloud/views.py:121
|
||||
#: xpack/plugins/cloud/views.py:136 xpack/plugins/cloud/views.py:187
|
||||
#: xpack/plugins/cloud/views.py:136 xpack/plugins/cloud/views.py:179
|
||||
msgid "Cloud center"
|
||||
msgstr "云管中心"
|
||||
|
||||
|
@ -4840,7 +4833,7 @@ msgstr "同步历史列表"
|
|||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:28
|
||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:31
|
||||
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:29
|
||||
#: xpack/plugins/cloud/views.py:188
|
||||
#: xpack/plugins/cloud/views.py:180
|
||||
msgid "Sync instance list"
|
||||
msgstr "同步实例列表"
|
||||
|
||||
|
@ -4903,14 +4896,10 @@ msgid "Image of login page"
|
|||
msgstr "登录页面图片"
|
||||
|
||||
#: xpack/plugins/interface/forms.py:27
|
||||
#, fuzzy
|
||||
#| msgid ""
|
||||
#| "Tips: This will be displayed on the enterprise user login page. (suggest "
|
||||
#| "image size: 492px*472px)"
|
||||
msgid ""
|
||||
"Tips: This will be displayed on the enterprise user login page. (suggest "
|
||||
"image size: 635px*472px)"
|
||||
msgstr "提示:将会显示在企业版用户登录页面(建议图片大小为: 492px*472px)"
|
||||
"image size: 492px*472px)"
|
||||
msgstr "提示:将会显示在企业版用户登录页面(建议图片大小为: 492*472px)"
|
||||
|
||||
#: xpack/plugins/interface/forms.py:33 xpack/plugins/interface/models.py:23
|
||||
msgid "Website icon"
|
||||
|
@ -5084,12 +5073,6 @@ msgstr "创建组织"
|
|||
msgid "Update org"
|
||||
msgstr "更新组织"
|
||||
|
||||
#~ msgid "Cycle perform"
|
||||
#~ msgstr "周期执行"
|
||||
|
||||
#~ msgid "Tips: (Units: hour)"
|
||||
#~ msgstr "提示:(单位: 时)"
|
||||
|
||||
#~ msgid "Password length"
|
||||
#~ msgstr "密码长度"
|
||||
|
||||
|
@ -5099,9 +5082,15 @@ msgstr "更新组织"
|
|||
#~ msgid "* Please enter a valid crontab expression"
|
||||
#~ msgstr "* 请输入有效的 crontab 表达式"
|
||||
|
||||
#~ msgid "Timing perform"
|
||||
#~ msgid "Asset username"
|
||||
#~ msgstr "资产用户名"
|
||||
|
||||
#~ msgid "Periodic perform"
|
||||
#~ msgstr "定时执行"
|
||||
|
||||
#~ msgid "Tips: (Units: hour)"
|
||||
#~ msgstr "提示:(单位: 时)"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "eg: Every Sunday 03:05 run (5 3 * * 0) <br> Tips: Using 5 digits linux "
|
||||
#~ "crontab expressions (<a href='https://tool.lu/crontab/' "
|
||||
|
@ -5124,8 +5113,8 @@ msgstr "更新组织"
|
|||
#~ msgid "All assets use different random password"
|
||||
#~ msgstr "所有资产使用不同的随机密码"
|
||||
|
||||
#~ msgid "Asset username"
|
||||
#~ msgstr "资产用户名"
|
||||
#~ msgid "Cycle perform"
|
||||
#~ msgstr "周期执行"
|
||||
|
||||
#~ msgid "Regularly perform"
|
||||
#~ msgstr "定期执行"
|
||||
|
@ -5139,11 +5128,11 @@ msgstr "更新组织"
|
|||
#~ msgid "Change auth plan snapshot"
|
||||
#~ msgstr "改密计划快照"
|
||||
|
||||
#~ msgid "Change auth plan history"
|
||||
#~ msgstr "改密计划历史"
|
||||
#~ msgid "Change auth plan execution"
|
||||
#~ msgstr "改密计划执行"
|
||||
|
||||
#~ msgid "Change auth plan task"
|
||||
#~ msgstr "改密计划任务"
|
||||
#~ msgid "Change auth plan execution subtask"
|
||||
#~ msgstr "改密计划执行子任务"
|
||||
|
||||
#~ msgid "Authentication failed"
|
||||
#~ msgstr "认证失败"
|
||||
|
@ -5154,8 +5143,8 @@ msgstr "更新组织"
|
|||
#~ msgid "Plan detail"
|
||||
#~ msgstr "计划详情"
|
||||
|
||||
#~ msgid "Run history list"
|
||||
#~ msgstr "执行历史列表"
|
||||
#~ msgid "Plan execution list"
|
||||
#~ msgstr "执行列表"
|
||||
|
||||
#~ msgid "Add asset to this plan"
|
||||
#~ msgstr "添加资产"
|
||||
|
@ -5166,8 +5155,14 @@ msgstr "更新组织"
|
|||
#~ msgid "Length"
|
||||
#~ msgstr "长度"
|
||||
|
||||
#~ msgid "History of plan"
|
||||
#~ msgstr "执行历史"
|
||||
#~ msgid "Execute plan"
|
||||
#~ msgstr "执行计划"
|
||||
|
||||
#~ msgid "Execute failed"
|
||||
#~ msgstr "执行失败"
|
||||
|
||||
#~ msgid "Execution list of plan"
|
||||
#~ msgstr "执行列表"
|
||||
|
||||
#~ msgid "Log"
|
||||
#~ msgstr "日志"
|
||||
|
@ -5190,12 +5185,8 @@ msgstr "更新组织"
|
|||
#~ msgid "plan asset list"
|
||||
#~ msgstr "计划资产列表"
|
||||
|
||||
#~ msgid "Run history task list"
|
||||
#~ msgstr "执行历史任务列表"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "* When selecting a custom password strategy, please enter the password"
|
||||
#~ msgstr "* 选择自定义密码策略时,请输入密码"
|
||||
#~ msgid "Plan execution task list"
|
||||
#~ msgstr "执行任务列表"
|
||||
|
||||
#~ msgid "Monitor"
|
||||
#~ msgstr "监控"
|
||||
|
|
|
@ -7,17 +7,70 @@ from assets.utils import get_assets_by_id_list, get_system_user_by_id
|
|||
from common.utils import get_logger
|
||||
|
||||
__all__ = [
|
||||
'JMSInventory'
|
||||
'JMSInventory', 'JMSCustomInventory',
|
||||
]
|
||||
|
||||
|
||||
logger = get_logger(__file__)
|
||||
|
||||
|
||||
class JMSInventory(BaseInventory):
|
||||
class JMSBaseInventory(BaseInventory):
|
||||
|
||||
def convert_to_ansible(self, asset, run_as_admin=False):
|
||||
info = {
|
||||
'id': asset.id,
|
||||
'hostname': asset.hostname,
|
||||
'ip': asset.ip,
|
||||
'port': asset.port,
|
||||
'vars': dict(),
|
||||
'groups': [],
|
||||
}
|
||||
if asset.domain and asset.domain.has_gateway():
|
||||
info["vars"].update(self.make_proxy_command(asset))
|
||||
if run_as_admin:
|
||||
info.update(asset.get_auth_info())
|
||||
for node in asset.nodes.all():
|
||||
info["groups"].append(node.value)
|
||||
for label in asset.labels.all():
|
||||
info["vars"].update({
|
||||
label.name: label.value
|
||||
})
|
||||
info["groups"].append("{}:{}".format(label.name, label.value))
|
||||
if asset.domain:
|
||||
info["vars"].update({
|
||||
"domain": asset.domain.name,
|
||||
})
|
||||
info["groups"].append("domain_"+asset.domain.name)
|
||||
return info
|
||||
|
||||
@staticmethod
|
||||
def make_proxy_command(asset):
|
||||
gateway = asset.domain.random_gateway()
|
||||
proxy_command_list = [
|
||||
"ssh", "-p", str(gateway.port),
|
||||
"-o", "StrictHostKeyChecking=no",
|
||||
"{}@{}".format(gateway.username, gateway.ip),
|
||||
"-W", "%h:%p", "-q",
|
||||
]
|
||||
|
||||
if gateway.password:
|
||||
proxy_command_list.insert(
|
||||
0, "sshpass -p '{}'".format(gateway.password)
|
||||
)
|
||||
if gateway.private_key:
|
||||
proxy_command_list.append("-i {}".format(gateway.private_key_file))
|
||||
|
||||
proxy_command = "'-o ProxyCommand={}'".format(
|
||||
" ".join(proxy_command_list)
|
||||
)
|
||||
return {"ansible_ssh_common_args": proxy_command}
|
||||
|
||||
|
||||
class JMSInventory(JMSBaseInventory):
|
||||
"""
|
||||
JMS Inventory is the manager with jumpserver assets, so you can
|
||||
write you own manager, construct you inventory
|
||||
write you own manager, construct you inventory,
|
||||
user_info is obtained from admin_user or asset_user
|
||||
"""
|
||||
def __init__(self, assets, run_as_admin=False, run_as=None, become_info=None):
|
||||
"""
|
||||
|
@ -47,33 +100,6 @@ class JMSInventory(BaseInventory):
|
|||
host.update(become_info)
|
||||
super().__init__(host_list=host_list)
|
||||
|
||||
def convert_to_ansible(self, asset, run_as_admin=False):
|
||||
info = {
|
||||
'id': asset.id,
|
||||
'hostname': asset.hostname,
|
||||
'ip': asset.ip,
|
||||
'port': asset.port,
|
||||
'vars': dict(),
|
||||
'groups': [],
|
||||
}
|
||||
if asset.domain and asset.domain.has_gateway():
|
||||
info["vars"].update(self.make_proxy_command(asset))
|
||||
if run_as_admin:
|
||||
info.update(asset.get_auth_info())
|
||||
for node in asset.nodes.all():
|
||||
info["groups"].append(node.value)
|
||||
for label in asset.labels.all():
|
||||
info["vars"].update({
|
||||
label.name: label.value
|
||||
})
|
||||
info["groups"].append("{}:{}".format(label.name, label.value))
|
||||
if asset.domain:
|
||||
info["vars"].update({
|
||||
"domain": asset.domain.name,
|
||||
})
|
||||
info["groups"].append("domain_"+asset.domain.name)
|
||||
return info
|
||||
|
||||
def get_run_user_info(self, host):
|
||||
from assets.backends.multi import AssetUserManager
|
||||
|
||||
|
@ -89,24 +115,38 @@ class JMSInventory(BaseInventory):
|
|||
else:
|
||||
return run_user._to_secret_json()
|
||||
|
||||
@staticmethod
|
||||
def make_proxy_command(asset):
|
||||
gateway = asset.domain.random_gateway()
|
||||
proxy_command_list = [
|
||||
"ssh", "-p", str(gateway.port),
|
||||
"-o", "StrictHostKeyChecking=no",
|
||||
"{}@{}".format(gateway.username, gateway.ip),
|
||||
"-W", "%h:%p", "-q",
|
||||
]
|
||||
|
||||
if gateway.password:
|
||||
proxy_command_list.insert(
|
||||
0, "sshpass -p '{}'".format(gateway.password)
|
||||
)
|
||||
if gateway.private_key:
|
||||
proxy_command_list.append("-i {}".format(gateway.private_key_file))
|
||||
class JMSCustomInventory(JMSBaseInventory):
|
||||
"""
|
||||
JMS Custom Inventory is the manager with jumpserver assets,
|
||||
user_info is obtained from custom parameter
|
||||
"""
|
||||
|
||||
proxy_command = "'-o ProxyCommand={}'".format(
|
||||
" ".join(proxy_command_list)
|
||||
)
|
||||
return {"ansible_ssh_common_args": proxy_command}
|
||||
def __init__(self, assets, username, password=None, public_key=None, private_key=None):
|
||||
"""
|
||||
"""
|
||||
self.assets = assets
|
||||
self.username = username
|
||||
self.password = password
|
||||
self.public_key = public_key
|
||||
self.private_key = private_key
|
||||
|
||||
host_list = []
|
||||
|
||||
for asset in assets:
|
||||
info = self.convert_to_ansible(asset)
|
||||
host_list.append(info)
|
||||
|
||||
for host in host_list:
|
||||
run_user_info = self.get_run_user_info()
|
||||
host.update(run_user_info)
|
||||
|
||||
super().__init__(host_list=host_list)
|
||||
|
||||
def get_run_user_info(self):
|
||||
return {
|
||||
'username': self.username,
|
||||
'password': self.password,
|
||||
'public_key': self.public_key,
|
||||
'private_key': self.private_key
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue