Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
J
jumpserver
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
ops
jumpserver
Commits
89fa0658
Commit
89fa0658
authored
Sep 19, 2019
by
ibuler
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[Update] 修改任务执行
parent
847e37e6
Hide whitespace changes
Inline
Side-by-side
Showing
16 changed files
with
359 additions
and
255 deletions
+359
-255
celery_flower.py
apps/jumpserver/celery_flower.py
+25
-0
conf.py
apps/jumpserver/conf.py
+2
-1
settings.py
apps/jumpserver/settings.py
+1
-0
urls.py
apps/jumpserver/urls.py
+9
-6
views.py
apps/jumpserver/views.py
+3
-0
django.mo
apps/locale/zh/LC_MESSAGES/django.mo
+0
-0
django.po
apps/locale/zh/LC_MESSAGES/django.po
+135
-122
0008_auto_20190919_2100.py
apps/ops/migrations/0008_auto_20190919_2100.py
+28
-0
adhoc.py
apps/ops/models/adhoc.py
+35
-9
serializers.py
apps/ops/serializers.py
+6
-1
tasks.py
apps/ops/tasks.py
+1
-1
task_list.html
apps/ops/templates/ops/task_list.html
+78
-93
adhoc.py
apps/ops/views/adhoc.py
+2
-19
jumpserver.js
apps/static/js/jumpserver.js
+3
-0
_nav.html
apps/templates/_nav.html
+3
-0
jms
jms
+28
-3
No files found.
apps/jumpserver/celery_flower.py
0 → 100644
View file @
89fa0658
# -*- coding: utf-8 -*-
#
from
django.http
import
HttpResponse
from
django.conf
import
settings
from
django.utils.translation
import
ugettext
as
_
from
django.views.decorators.csrf
import
csrf_exempt
from
proxy.views
import
proxy_view
flower_url
=
settings
.
FLOWER_URL
@csrf_exempt
def
celery_flower_view
(
request
,
path
):
if
not
request
.
user
.
is_superuser
:
return
HttpResponse
(
"Forbidden"
)
remote_url
=
'http://{}/{}'
.
format
(
flower_url
,
path
)
try
:
response
=
proxy_view
(
request
,
remote_url
)
except
Exception
as
e
:
msg
=
_
(
"<h1>Flow service unavailable, check it</h1>"
)
+
\
'<br><br> <div>{}</div>'
.
format
(
e
)
response
=
HttpResponse
(
msg
)
return
response
apps/jumpserver/conf.py
View file @
89fa0658
...
@@ -382,7 +382,8 @@ defaults = {
...
@@ -382,7 +382,8 @@ defaults = {
'SYSLOG_ADDR'
:
''
,
# '192.168.0.1:514'
'SYSLOG_ADDR'
:
''
,
# '192.168.0.1:514'
'SYSLOG_FACILITY'
:
'user'
,
'SYSLOG_FACILITY'
:
'user'
,
'PERM_SINGLE_ASSET_TO_UNGROUP_NODE'
:
False
,
'PERM_SINGLE_ASSET_TO_UNGROUP_NODE'
:
False
,
'WINDOWS_SSH_DEFAULT_SHELL'
:
'cmd'
'WINDOWS_SSH_DEFAULT_SHELL'
:
'cmd'
,
'FLOWER_URL'
:
"127.0.0.1:5555"
}
}
...
...
apps/jumpserver/settings.py
View file @
89fa0658
...
@@ -623,3 +623,4 @@ BACKEND_ASSET_USER_AUTH_VAULT = False
...
@@ -623,3 +623,4 @@ BACKEND_ASSET_USER_AUTH_VAULT = False
PERM_SINGLE_ASSET_TO_UNGROUP_NODE
=
CONFIG
.
PERM_SINGLE_ASSET_TO_UNGROUP_NODE
PERM_SINGLE_ASSET_TO_UNGROUP_NODE
=
CONFIG
.
PERM_SINGLE_ASSET_TO_UNGROUP_NODE
WINDOWS_SSH_DEFAULT_SHELL
=
CONFIG
.
WINDOWS_SSH_DEFAULT_SHELL
WINDOWS_SSH_DEFAULT_SHELL
=
CONFIG
.
WINDOWS_SSH_DEFAULT_SHELL
FLOWER_URL
=
CONFIG
.
FLOWER_URL
apps/jumpserver/urls.py
View file @
89fa0658
...
@@ -7,7 +7,9 @@ from django.conf.urls.static import static
...
@@ -7,7 +7,9 @@ from django.conf.urls.static import static
from
django.conf.urls.i18n
import
i18n_patterns
from
django.conf.urls.i18n
import
i18n_patterns
from
django.views.i18n
import
JavaScriptCatalog
from
django.views.i18n
import
JavaScriptCatalog
from
.views
import
IndexView
,
LunaView
,
I18NView
,
HealthCheckView
,
redirect_format_api
# from .views import IndexView, LunaView, I18NView, HealthCheckView, redirect_format_api
from
.
import
views
from
.celery_flower
import
celery_flower_view
from
.swagger
import
get_swagger_view
from
.swagger
import
get_swagger_view
api_v1
=
[
api_v1
=
[
...
@@ -40,6 +42,7 @@ app_view_patterns = [
...
@@ -40,6 +42,7 @@ app_view_patterns = [
path
(
'orgs/'
,
include
(
'orgs.urls.views_urls'
,
namespace
=
'orgs'
)),
path
(
'orgs/'
,
include
(
'orgs.urls.views_urls'
,
namespace
=
'orgs'
)),
path
(
'auth/'
,
include
(
'authentication.urls.view_urls'
),
name
=
'auth'
),
path
(
'auth/'
,
include
(
'authentication.urls.view_urls'
),
name
=
'auth'
),
path
(
'applications/'
,
include
(
'applications.urls.views_urls'
,
namespace
=
'applications'
)),
path
(
'applications/'
,
include
(
'applications.urls.views_urls'
,
namespace
=
'applications'
)),
re_path
(
r'flower/(?P<path>.*)'
,
celery_flower_view
,
name
=
'flower-view'
),
]
]
...
@@ -57,13 +60,13 @@ js_i18n_patterns = i18n_patterns(
...
@@ -57,13 +60,13 @@ js_i18n_patterns = i18n_patterns(
urlpatterns
=
[
urlpatterns
=
[
path
(
''
,
IndexView
.
as_view
(),
name
=
'index'
),
path
(
''
,
views
.
IndexView
.
as_view
(),
name
=
'index'
),
path
(
'api/v1/'
,
include
(
api_v1
)),
path
(
'api/v1/'
,
include
(
api_v1
)),
path
(
'api/v2/'
,
include
(
api_v2
)),
path
(
'api/v2/'
,
include
(
api_v2
)),
re_path
(
'api/(?P<app>
\
w+)/(?P<version>v
\
d)/.*'
,
redirect_format_api
),
re_path
(
'api/(?P<app>
\
w+)/(?P<version>v
\
d)/.*'
,
views
.
redirect_format_api
),
path
(
'api/health/'
,
HealthCheckView
.
as_view
(),
name
=
"health"
),
path
(
'api/health/'
,
views
.
HealthCheckView
.
as_view
(),
name
=
"health"
),
path
(
'luna/'
,
LunaView
.
as_view
(),
name
=
'luna-view'
),
path
(
'luna/'
,
views
.
LunaView
.
as_view
(),
name
=
'luna-view'
),
path
(
'i18n/<str:lang>/'
,
I18NView
.
as_view
(),
name
=
'i18n-switch'
),
path
(
'i18n/<str:lang>/'
,
views
.
I18NView
.
as_view
(),
name
=
'i18n-switch'
),
path
(
'settings/'
,
include
(
'settings.urls.view_urls'
,
namespace
=
'settings'
)),
path
(
'settings/'
,
include
(
'settings.urls.view_urls'
,
namespace
=
'settings'
)),
# External apps url
# External apps url
...
...
apps/jumpserver/views.py
View file @
89fa0658
...
@@ -224,3 +224,6 @@ class HealthCheckView(APIView):
...
@@ -224,3 +224,6 @@ class HealthCheckView(APIView):
def
get
(
self
,
request
):
def
get
(
self
,
request
):
return
JsonResponse
({
"status"
:
1
,
"time"
:
int
(
time
.
time
())})
return
JsonResponse
({
"status"
:
1
,
"time"
:
int
(
time
.
time
())})
apps/locale/zh/LC_MESSAGES/django.mo
View file @
89fa0658
No preview for this file type
apps/locale/zh/LC_MESSAGES/django.po
View file @
89fa0658
...
@@ -8,7 +8,7 @@ msgid ""
...
@@ -8,7 +8,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: 2019-09-19 1
4:43
+0800\n"
"POT-Creation-Date: 2019-09-19 1
9:50
+0800\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\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"
...
@@ -95,15 +95,15 @@ msgstr "运行参数"
...
@@ -95,15 +95,15 @@ msgstr "运行参数"
#: terminal/templates/terminal/command_list.html:66
#: terminal/templates/terminal/command_list.html:66
#: terminal/templates/terminal/session_list.html:28
#: terminal/templates/terminal/session_list.html:28
#: terminal/templates/terminal/session_list.html:72
#: terminal/templates/terminal/session_list.html:72
#: xpack/plugins/change_auth_plan/forms.py:
121
#: xpack/plugins/change_auth_plan/forms.py:
64
#: xpack/plugins/change_auth_plan/models.py:4
09
#: xpack/plugins/change_auth_plan/models.py:4
12
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:46
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:46
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:54
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:54
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:13
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:13
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:14
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:14
#: xpack/plugins/cloud/models.py:307
#: xpack/plugins/cloud/models.py:307
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:63
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_instance.html:63
#: xpack/plugins/orgs/templates/orgs/org_list.html:1
6
#: xpack/plugins/orgs/templates/orgs/org_list.html:1
7
#: xpack/plugins/vault/forms.py:13 xpack/plugins/vault/forms.py:15
#: xpack/plugins/vault/forms.py:13 xpack/plugins/vault/forms.py:15
msgid "Asset"
msgid "Asset"
msgstr "资产"
msgstr "资产"
...
@@ -151,8 +151,8 @@ msgstr "资产"
...
@@ -151,8 +151,8 @@ msgstr "资产"
#: users/templates/users/user_list.html:35
#: users/templates/users/user_list.html:35
#: users/templates/users/user_profile.html:51
#: users/templates/users/user_profile.html:51
#: users/templates/users/user_pubkey_update.html:57
#: users/templates/users/user_pubkey_update.html:57
#: xpack/plugins/change_auth_plan/forms.py:
104
#: xpack/plugins/change_auth_plan/forms.py:
47
#: xpack/plugins/change_auth_plan/models.py:6
0
#: xpack/plugins/change_auth_plan/models.py:6
3
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:61
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:61
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:12
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:12
#: xpack/plugins/cloud/models.py:59 xpack/plugins/cloud/models.py:144
#: xpack/plugins/cloud/models.py:59 xpack/plugins/cloud/models.py:144
...
@@ -199,7 +199,7 @@ msgstr "参数"
...
@@ -199,7 +199,7 @@ msgstr "参数"
#: perms/templates/perms/remote_app_permission_detail.html:90
#: perms/templates/perms/remote_app_permission_detail.html:90
#: users/models/user.py:414 users/serializers/v1.py:141
#: users/models/user.py:414 users/serializers/v1.py:141
#: users/templates/users/user_detail.html:111
#: users/templates/users/user_detail.html:111
#: xpack/plugins/change_auth_plan/models.py:10
5
#: xpack/plugins/change_auth_plan/models.py:10
8
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:113
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:113
#: xpack/plugins/cloud/models.py:80 xpack/plugins/cloud/models.py:179
#: xpack/plugins/cloud/models.py:80 xpack/plugins/cloud/models.py:179
#: xpack/plugins/gathered_user/models.py:46
#: xpack/plugins/gathered_user/models.py:46
...
@@ -261,7 +261,7 @@ msgstr "创建日期"
...
@@ -261,7 +261,7 @@ msgstr "创建日期"
#: users/templates/users/user_group_detail.html:67
#: users/templates/users/user_group_detail.html:67
#: users/templates/users/user_group_list.html:37
#: users/templates/users/user_group_list.html:37
#: users/templates/users/user_profile.html:138
#: users/templates/users/user_profile.html:138
#: xpack/plugins/change_auth_plan/models.py:10
1
#: xpack/plugins/change_auth_plan/models.py:10
4
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:117
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:117
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:19
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:19
#: xpack/plugins/cloud/models.py:77 xpack/plugins/cloud/models.py:173
#: xpack/plugins/cloud/models.py:77 xpack/plugins/cloud/models.py:173
...
@@ -271,7 +271,7 @@ msgstr "创建日期"
...
@@ -271,7 +271,7 @@ msgstr "创建日期"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:18
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:18
#: xpack/plugins/gathered_user/models.py:42
#: xpack/plugins/gathered_user/models.py:42
#: xpack/plugins/orgs/templates/orgs/org_detail.html:64
#: xpack/plugins/orgs/templates/orgs/org_detail.html:64
#: xpack/plugins/orgs/templates/orgs/org_list.html:2
2
#: xpack/plugins/orgs/templates/orgs/org_list.html:2
3
msgid "Comment"
msgid "Comment"
msgstr "备注"
msgstr "备注"
...
@@ -384,7 +384,7 @@ msgstr "提交"
...
@@ -384,7 +384,7 @@ msgstr "提交"
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:20
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:20
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:17
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:17
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:106
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:106
#: xpack/plugins/change_auth_plan/views.py:
88
#: xpack/plugins/change_auth_plan/views.py:
91
msgid "Detail"
msgid "Detail"
msgstr "详情"
msgstr "详情"
...
@@ -432,7 +432,7 @@ msgstr "详情"
...
@@ -432,7 +432,7 @@ msgstr "详情"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:57
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:57
#: xpack/plugins/gathered_user/templates/gathered_user/task_list.html:51
#: xpack/plugins/gathered_user/templates/gathered_user/task_list.html:51
#: xpack/plugins/orgs/templates/orgs/org_detail.html:25
#: xpack/plugins/orgs/templates/orgs/org_detail.html:25
#: xpack/plugins/orgs/templates/orgs/org_list.html:
88
#: xpack/plugins/orgs/templates/orgs/org_list.html:
93
msgid "Update"
msgid "Update"
msgstr "更新"
msgstr "更新"
...
@@ -474,7 +474,7 @@ msgstr "更新"
...
@@ -474,7 +474,7 @@ msgstr "更新"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:58
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:58
#: xpack/plugins/gathered_user/templates/gathered_user/task_list.html:52
#: xpack/plugins/gathered_user/templates/gathered_user/task_list.html:52
#: xpack/plugins/orgs/templates/orgs/org_detail.html:29
#: xpack/plugins/orgs/templates/orgs/org_detail.html:29
#: xpack/plugins/orgs/templates/orgs/org_list.html:9
0
#: xpack/plugins/orgs/templates/orgs/org_list.html:9
5
msgid "Delete"
msgid "Delete"
msgstr "删除"
msgstr "删除"
...
@@ -532,7 +532,7 @@ msgstr "创建远程应用"
...
@@ -532,7 +532,7 @@ msgstr "创建远程应用"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:72
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:72
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:19
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_list.html:19
#: xpack/plugins/gathered_user/templates/gathered_user/task_list.html:20
#: xpack/plugins/gathered_user/templates/gathered_user/task_list.html:20
#: xpack/plugins/orgs/templates/orgs/org_list.html:2
3
#: xpack/plugins/orgs/templates/orgs/org_list.html:2
4
msgid "Action"
msgid "Action"
msgstr "动作"
msgstr "动作"
...
@@ -588,7 +588,7 @@ msgstr "端口"
...
@@ -588,7 +588,7 @@ msgstr "端口"
#: assets/templates/assets/asset_detail.html:198
#: assets/templates/assets/asset_detail.html:198
#: assets/templates/assets/system_user_assets.html:83
#: assets/templates/assets/system_user_assets.html:83
#: perms/models/asset_permission.py:79
#: perms/models/asset_permission.py:79
#: xpack/plugins/change_auth_plan/models.py:7
1
#: xpack/plugins/change_auth_plan/models.py:7
4
#: xpack/plugins/gathered_user/models.py:31
#: xpack/plugins/gathered_user/models.py:31
#: xpack/plugins/gathered_user/templates/gathered_user/task_list.html:17
#: xpack/plugins/gathered_user/templates/gathered_user/task_list.html:17
msgid "Nodes"
msgid "Nodes"
...
@@ -599,7 +599,7 @@ msgstr "节点"
...
@@ -599,7 +599,7 @@ msgstr "节点"
#: assets/models/user.py:68 assets/templates/assets/asset_detail.html:76
#: assets/models/user.py:68 assets/templates/assets/asset_detail.html:76
#: templates/_nav.html:44 xpack/plugins/cloud/models.py:161
#: templates/_nav.html:44 xpack/plugins/cloud/models.py:161
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:68
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:68
#: xpack/plugins/orgs/templates/orgs/org_list.html:1
8
#: xpack/plugins/orgs/templates/orgs/org_list.html:1
9
msgid "Admin user"
msgid "Admin user"
msgstr "管理用户"
msgstr "管理用户"
...
@@ -607,7 +607,7 @@ msgstr "管理用户"
...
@@ -607,7 +607,7 @@ msgstr "管理用户"
#: assets/templates/assets/asset_create.html:48
#: assets/templates/assets/asset_create.html:48
#: assets/templates/assets/asset_create.html:50
#: assets/templates/assets/asset_create.html:50
#: assets/templates/assets/asset_list.html:85
#: assets/templates/assets/asset_list.html:85
#: xpack/plugins/orgs/templates/orgs/org_list.html:2
0
#: xpack/plugins/orgs/templates/orgs/org_list.html:2
1
msgid "Label"
msgid "Label"
msgstr "标签"
msgstr "标签"
...
@@ -615,18 +615,18 @@ msgstr "标签"
...
@@ -615,18 +615,18 @@ msgstr "标签"
#: assets/models/asset.py:144 assets/models/domain.py:26
#: assets/models/asset.py:144 assets/models/domain.py:26
#: assets/models/domain.py:52 assets/templates/assets/asset_detail.html:80
#: assets/models/domain.py:52 assets/templates/assets/asset_detail.html:80
#: assets/templates/assets/user_asset_list.html:53
#: assets/templates/assets/user_asset_list.html:53
#: xpack/plugins/orgs/templates/orgs/org_list.html:1
7
#: xpack/plugins/orgs/templates/orgs/org_list.html:1
8
msgid "Domain"
msgid "Domain"
msgstr "网域"
msgstr "网域"
#: assets/forms/asset.py:68 assets/forms/asset.py:101 assets/forms/asset.py:114
#: assets/forms/asset.py:68 assets/forms/asset.py:101 assets/forms/asset.py:114
#: assets/forms/asset.py:149 assets/models/node.py:40
1
#: assets/forms/asset.py:149 assets/models/node.py:40
2
#: assets/templates/assets/asset_create.html:42
#: assets/templates/assets/asset_create.html:42
#: perms/forms/asset_permission.py:82 perms/forms/asset_permission.py:89
#: perms/forms/asset_permission.py:82 perms/forms/asset_permission.py:89
#: perms/templates/perms/asset_permission_list.html:53
#: perms/templates/perms/asset_permission_list.html:53
#: perms/templates/perms/asset_permission_list.html:74
#: perms/templates/perms/asset_permission_list.html:74
#: perms/templates/perms/asset_permission_list.html:124
#: perms/templates/perms/asset_permission_list.html:124
#: xpack/plugins/change_auth_plan/forms.py:
122
#: xpack/plugins/change_auth_plan/forms.py:
65
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:55
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:55
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:15
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:15
#: xpack/plugins/cloud/models.py:157
#: xpack/plugins/cloud/models.py:157
...
@@ -655,8 +655,8 @@ msgstr "如果有多个的互相隔离的网络,设置资产属于的网域,
...
@@ -655,8 +655,8 @@ msgstr "如果有多个的互相隔离的网络,设置资产属于的网域,
#: assets/forms/asset.py:129 assets/forms/asset.py:133
#: assets/forms/asset.py:129 assets/forms/asset.py:133
#: assets/forms/domain.py:17 assets/forms/label.py:15
#: assets/forms/domain.py:17 assets/forms/label.py:15
#: perms/templates/perms/asset_permission_asset.html:78
#: perms/templates/perms/asset_permission_asset.html:78
#: xpack/plugins/change_auth_plan/forms.py:
112
#: xpack/plugins/change_auth_plan/forms.py:
55
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:
8
4
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:
7
4
msgid "Select assets"
msgid "Select assets"
msgstr "选择资产"
msgstr "选择资产"
...
@@ -693,9 +693,9 @@ msgstr "SSH网关,支持代理SSH,RDP和VNC"
...
@@ -693,9 +693,9 @@ msgstr "SSH网关,支持代理SSH,RDP和VNC"
#: users/templates/users/user_detail.html:67
#: users/templates/users/user_detail.html:67
#: users/templates/users/user_list.html:36
#: users/templates/users/user_list.html:36
#: users/templates/users/user_profile.html:47
#: users/templates/users/user_profile.html:47
#: xpack/plugins/change_auth_plan/forms.py:
106
#: xpack/plugins/change_auth_plan/forms.py:
49
#: xpack/plugins/change_auth_plan/models.py:6
2
#: xpack/plugins/change_auth_plan/models.py:6
5
#: xpack/plugins/change_auth_plan/models.py:40
5
#: xpack/plugins/change_auth_plan/models.py:40
8
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:65
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:65
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:53
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:53
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:12
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:12
...
@@ -722,8 +722,8 @@ msgstr "密码或密钥密码"
...
@@ -722,8 +722,8 @@ msgstr "密码或密钥密码"
#: users/templates/users/user_profile_update.html:41
#: users/templates/users/user_profile_update.html:41
#: users/templates/users/user_pubkey_update.html:41
#: users/templates/users/user_pubkey_update.html:41
#: users/templates/users/user_update.html:20
#: users/templates/users/user_update.html:20
#: xpack/plugins/change_auth_plan/models.py:9
2
#: xpack/plugins/change_auth_plan/models.py:9
5
#: xpack/plugins/change_auth_plan/models.py:26
0
#: xpack/plugins/change_auth_plan/models.py:26
3
msgid "Password"
msgid "Password"
msgstr "密码"
msgstr "密码"
...
@@ -780,7 +780,7 @@ msgstr "使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig"
...
@@ -780,7 +780,7 @@ msgstr "使用逗号分隔多个命令,如: /bin/whoami,/sbin/ifconfig"
#: audits/templates/audits/login_log_list.html:60
#: audits/templates/audits/login_log_list.html:60
#: perms/templates/perms/asset_permission_asset.html:58 settings/forms.py:140
#: perms/templates/perms/asset_permission_asset.html:58 settings/forms.py:140
#: users/templates/users/_granted_assets.html:26
#: users/templates/users/_granted_assets.html:26
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:5
1
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:5
4
#: xpack/plugins/gathered_user/templates/gathered_user/gathered_user_list.html:73
#: xpack/plugins/gathered_user/templates/gathered_user/gathered_user_list.html:73
msgid "IP"
msgid "IP"
msgstr "IP"
msgstr "IP"
...
@@ -797,7 +797,7 @@ msgstr "IP"
...
@@ -797,7 +797,7 @@ msgstr "IP"
#: perms/templates/perms/asset_permission_asset.html:57
#: perms/templates/perms/asset_permission_asset.html:57
#: perms/templates/perms/asset_permission_list.html:73 settings/forms.py:139
#: perms/templates/perms/asset_permission_list.html:73 settings/forms.py:139
#: users/templates/users/_granted_assets.html:25
#: users/templates/users/_granted_assets.html:25
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:5
0
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:5
3
#: xpack/plugins/gathered_user/templates/gathered_user/gathered_user_list.html:72
#: xpack/plugins/gathered_user/templates/gathered_user/gathered_user_list.html:72
msgid "Hostname"
msgid "Hostname"
msgstr "主机名"
msgstr "主机名"
...
@@ -915,13 +915,13 @@ msgstr "版本"
...
@@ -915,13 +915,13 @@ msgstr "版本"
msgid "AuthBook"
msgid "AuthBook"
msgstr ""
msgstr ""
#: assets/models/base.py:31 xpack/plugins/change_auth_plan/models.py:9
6
#: assets/models/base.py:31 xpack/plugins/change_auth_plan/models.py:9
9
#: xpack/plugins/change_auth_plan/models.py:2
67
#: xpack/plugins/change_auth_plan/models.py:2
70
msgid "SSH private key"
msgid "SSH private key"
msgstr "ssh密钥"
msgstr "ssh密钥"
#: assets/models/base.py:32 xpack/plugins/change_auth_plan/models.py:
99
#: assets/models/base.py:32 xpack/plugins/change_auth_plan/models.py:
102
#: xpack/plugins/change_auth_plan/models.py:26
3
#: xpack/plugins/change_auth_plan/models.py:26
6
msgid "SSH public key"
msgid "SSH public key"
msgstr "ssh公钥"
msgstr "ssh公钥"
...
@@ -1099,11 +1099,11 @@ msgstr "默认资产组"
...
@@ -1099,11 +1099,11 @@ msgstr "默认资产组"
#: users/templates/users/user_group_list.html:36 users/views/user.py:250
#: users/templates/users/user_group_list.html:36 users/views/user.py:250
#: xpack/plugins/orgs/forms.py:26
#: xpack/plugins/orgs/forms.py:26
#: xpack/plugins/orgs/templates/orgs/org_detail.html:113
#: xpack/plugins/orgs/templates/orgs/org_detail.html:113
#: xpack/plugins/orgs/templates/orgs/org_list.html:1
4
#: xpack/plugins/orgs/templates/orgs/org_list.html:1
5
msgid "User"
msgid "User"
msgstr "用户"
msgstr "用户"
#: assets/models/label.py:19 assets/models/node.py:39
2
#: assets/models/label.py:19 assets/models/node.py:39
3
#: assets/templates/assets/label_list.html:15 settings/models.py:30
#: assets/templates/assets/label_list.html:15 settings/models.py:30
msgid "Value"
msgid "Value"
msgstr "值"
msgstr "值"
...
@@ -1116,15 +1116,15 @@ msgstr "分类"
...
@@ -1116,15 +1116,15 @@ msgstr "分类"
msgid "New node"
msgid "New node"
msgstr "新节点"
msgstr "新节点"
#: assets/models/node.py:31
6
#: assets/models/node.py:31
7
msgid "ungrouped"
msgid "ungrouped"
msgstr "未分组"
msgstr "未分组"
#: assets/models/node.py:31
8
#: assets/models/node.py:31
9
msgid "empty"
msgid "empty"
msgstr "空"
msgstr "空"
#: assets/models/node.py:39
1
#: assets/models/node.py:39
2
msgid "Key"
msgid "Key"
msgstr "键"
msgstr "键"
...
@@ -1155,7 +1155,7 @@ msgstr "手动登录"
...
@@ -1155,7 +1155,7 @@ msgstr "手动登录"
#: assets/views/label.py:27 assets/views/label.py:45 assets/views/label.py:73
#: assets/views/label.py:27 assets/views/label.py:45 assets/views/label.py:73
#: assets/views/system_user.py:29 assets/views/system_user.py:46
#: assets/views/system_user.py:29 assets/views/system_user.py:46
#: assets/views/system_user.py:63 assets/views/system_user.py:79
#: assets/views/system_user.py:63 assets/views/system_user.py:79
#: templates/_nav.html:39 xpack/plugins/change_auth_plan/models.py:
67
#: templates/_nav.html:39 xpack/plugins/change_auth_plan/models.py:
70
msgid "Assets"
msgid "Assets"
msgstr "资产管理"
msgstr "资产管理"
...
@@ -1194,7 +1194,7 @@ msgstr "登录模式"
...
@@ -1194,7 +1194,7 @@ msgstr "登录模式"
#: terminal/templates/terminal/session_list.html:29
#: terminal/templates/terminal/session_list.html:29
#: terminal/templates/terminal/session_list.html:73
#: terminal/templates/terminal/session_list.html:73
#: users/templates/users/_granted_assets.html:27
#: users/templates/users/_granted_assets.html:27
#: xpack/plugins/orgs/templates/orgs/org_list.html:
19
#: xpack/plugins/orgs/templates/orgs/org_list.html:
20
msgid "System user"
msgid "System user"
msgstr "系统用户"
msgstr "系统用户"
...
@@ -1298,7 +1298,7 @@ msgstr "测试资产可连接性: {}"
...
@@ -1298,7 +1298,7 @@ msgstr "测试资产可连接性: {}"
#: assets/tasks/asset_user_connectivity.py:27
#: assets/tasks/asset_user_connectivity.py:27
#: assets/tasks/push_system_user.py:130
#: assets/tasks/push_system_user.py:130
#: xpack/plugins/change_auth_plan/models.py:5
18
#: xpack/plugins/change_auth_plan/models.py:5
21
msgid "The asset {} system platform {} does not support run Ansible tasks"
msgid "The asset {} system platform {} does not support run Ansible tasks"
msgstr "资产 {} 系统平台 {} 不支持运行 Ansible 任务"
msgstr "资产 {} 系统平台 {} 不支持运行 Ansible 任务"
...
@@ -1408,7 +1408,7 @@ msgid "Import assets"
...
@@ -1408,7 +1408,7 @@ msgid "Import assets"
msgstr "导入资产"
msgstr "导入资产"
#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:38
#: assets/templates/assets/_asset_list_modal.html:7 assets/views/asset.py:38
#: templates/_nav.html:42 xpack/plugins/change_auth_plan/views.py:11
5
#: templates/_nav.html:42 xpack/plugins/change_auth_plan/views.py:11
8
msgid "Asset list"
msgid "Asset list"
msgstr "资产列表"
msgstr "资产列表"
...
@@ -1416,7 +1416,6 @@ msgstr "资产列表"
...
@@ -1416,7 +1416,6 @@ msgstr "资产列表"
#: assets/templates/assets/_node_tree.html:40
#: assets/templates/assets/_node_tree.html:40
#: ops/templates/ops/command_execution_create.html:49
#: ops/templates/ops/command_execution_create.html:49
#: users/templates/users/_granted_assets.html:7
#: users/templates/users/_granted_assets.html:7
#: users/templates/users/_granted_assets.html:83
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_create_update.html:66
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_create_update.html:66
msgid "Loading"
msgid "Loading"
msgstr "加载中"
msgstr "加载中"
...
@@ -1430,7 +1429,7 @@ msgid "Update asset user auth"
...
@@ -1430,7 +1429,7 @@ msgid "Update asset user auth"
msgstr "更新资产用户认证信息"
msgstr "更新资产用户认证信息"
#: assets/templates/assets/_asset_user_auth_update_modal.html:23
#: assets/templates/assets/_asset_user_auth_update_modal.html:23
#: xpack/plugins/change_auth_plan/forms.py:
108
#: xpack/plugins/change_auth_plan/forms.py:
51
msgid "Please input password"
msgid "Please input password"
msgstr "请输入密码"
msgstr "请输入密码"
...
@@ -1616,8 +1615,8 @@ msgstr "替换资产的管理员"
...
@@ -1616,8 +1615,8 @@ msgstr "替换资产的管理员"
#: assets/templates/assets/admin_user_detail.html:91
#: assets/templates/assets/admin_user_detail.html:91
#: perms/templates/perms/asset_permission_asset.html:103
#: perms/templates/perms/asset_permission_asset.html:103
#: xpack/plugins/change_auth_plan/forms.py:
116
#: xpack/plugins/change_auth_plan/forms.py:
59
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:
10
9
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:
9
9
#: xpack/plugins/gathered_user/forms.py:36
#: xpack/plugins/gathered_user/forms.py:36
msgid "Select nodes"
msgid "Select nodes"
msgstr "选择节点"
msgstr "选择节点"
...
@@ -1643,7 +1642,7 @@ msgstr "选择节点"
...
@@ -1643,7 +1642,7 @@ msgstr "选择节点"
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_create_update.html:54
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_create_update.html:54
#: xpack/plugins/gathered_user/templates/gathered_user/task_create_update.html:45
#: xpack/plugins/gathered_user/templates/gathered_user/task_create_update.html:45
#: xpack/plugins/interface/templates/interface/interface.html:103
#: xpack/plugins/interface/templates/interface/interface.html:103
#: xpack/plugins/orgs/templates/orgs/org_create_update.html:3
3
#: xpack/plugins/orgs/templates/orgs/org_create_update.html:3
4
msgid "Confirm"
msgid "Confirm"
msgstr "确认"
msgstr "确认"
...
@@ -1857,7 +1856,7 @@ msgstr "删除选择资产"
...
@@ -1857,7 +1856,7 @@ msgstr "删除选择资产"
#: users/templates/users/user_group_list.html:118
#: users/templates/users/user_group_list.html:118
#: users/templates/users/user_list.html:254
#: users/templates/users/user_list.html:254
#: xpack/plugins/interface/templates/interface/interface.html:101
#: xpack/plugins/interface/templates/interface/interface.html:101
#: xpack/plugins/orgs/templates/orgs/org_create_update.html:3
2
#: xpack/plugins/orgs/templates/orgs/org_create_update.html:3
3
msgid "Cancel"
msgid "Cancel"
msgstr "取消"
msgstr "取消"
...
@@ -2249,7 +2248,7 @@ msgid "MFA"
...
@@ -2249,7 +2248,7 @@ msgid "MFA"
msgstr "MFA"
msgstr "MFA"
#: audits/models.py:86 audits/templates/audits/login_log_list.html:63
#: audits/models.py:86 audits/templates/audits/login_log_list.html:63
#: xpack/plugins/change_auth_plan/models.py:41
3
#: xpack/plugins/change_auth_plan/models.py:41
6
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:15
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:15
#: xpack/plugins/cloud/models.py:278
#: xpack/plugins/cloud/models.py:278
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:69
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_history.html:69
...
@@ -2275,8 +2274,8 @@ msgstr "登录日期"
...
@@ -2275,8 +2274,8 @@ msgstr "登录日期"
#: perms/templates/perms/asset_permission_detail.html:86
#: perms/templates/perms/asset_permission_detail.html:86
#: perms/templates/perms/remote_app_permission_detail.html:78
#: perms/templates/perms/remote_app_permission_detail.html:78
#: terminal/models.py:165 terminal/templates/terminal/session_list.html:34
#: terminal/models.py:165 terminal/templates/terminal/session_list.html:34
#: xpack/plugins/change_auth_plan/models.py:24
6
#: xpack/plugins/change_auth_plan/models.py:24
9
#: xpack/plugins/change_auth_plan/models.py:41
6
#: xpack/plugins/change_auth_plan/models.py:41
9
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:59
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:59
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:17
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:17
#: xpack/plugins/gathered_user/models.py:143
#: xpack/plugins/gathered_user/models.py:143
...
@@ -2328,23 +2327,23 @@ msgid "Date"
...
@@ -2328,23 +2327,23 @@ msgid "Date"
msgstr "日期"
msgstr "日期"
#: audits/views.py:86 audits/views.py:130 audits/views.py:167
#: audits/views.py:86 audits/views.py:130 audits/views.py:167
#: audits/views.py:212 audits/views.py:244 templates/_nav.html:12
6
#: audits/views.py:212 audits/views.py:244 templates/_nav.html:12
9
msgid "Audits"
msgid "Audits"
msgstr "日志审计"
msgstr "日志审计"
#: audits/views.py:87 templates/_nav.html:13
0
#: audits/views.py:87 templates/_nav.html:13
3
msgid "FTP log"
msgid "FTP log"
msgstr "FTP日志"
msgstr "FTP日志"
#: audits/views.py:131 templates/_nav.html:13
1
#: audits/views.py:131 templates/_nav.html:13
4
msgid "Operate log"
msgid "Operate log"
msgstr "操作日志"
msgstr "操作日志"
#: audits/views.py:168 templates/_nav.html:13
2
#: audits/views.py:168 templates/_nav.html:13
5
msgid "Password change log"
msgid "Password change log"
msgstr "改密日志"
msgstr "改密日志"
#: audits/views.py:213 templates/_nav.html:1
29
#: audits/views.py:213 templates/_nav.html:1
32
msgid "Login log"
msgid "Login log"
msgstr "登录日志"
msgstr "登录日志"
...
@@ -2492,6 +2491,7 @@ msgid "Secret"
...
@@ -2492,6 +2491,7 @@ msgid "Secret"
msgstr "密文"
msgstr "密文"
#: authentication/templates/authentication/_access_key_modal.html:48
#: authentication/templates/authentication/_access_key_modal.html:48
#: users/templates/users/_granted_assets.html:75
msgid "Show"
msgid "Show"
msgstr "显示"
msgstr "显示"
...
@@ -2816,8 +2816,8 @@ msgstr "完成时间"
...
@@ -2816,8 +2816,8 @@ msgstr "完成时间"
#: ops/models/adhoc.py:331 ops/templates/ops/adhoc_history.html:57
#: ops/models/adhoc.py:331 ops/templates/ops/adhoc_history.html:57
#: ops/templates/ops/task_history.html:63 ops/templates/ops/task_list.html:33
#: ops/templates/ops/task_history.html:63 ops/templates/ops/task_list.html:33
#: xpack/plugins/change_auth_plan/models.py:2
49
#: xpack/plugins/change_auth_plan/models.py:2
52
#: xpack/plugins/change_auth_plan/models.py:4
19
#: xpack/plugins/change_auth_plan/models.py:4
22
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:58
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:58
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:16
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_subtask_list.html:16
#: xpack/plugins/gathered_user/models.py:146
#: xpack/plugins/gathered_user/models.py:146
...
@@ -3105,7 +3105,7 @@ msgstr "空"
...
@@ -3105,7 +3105,7 @@ msgstr "空"
#: users/models/user.py:379 users/templates/users/_select_user_modal.html:16
#: users/models/user.py:379 users/templates/users/_select_user_modal.html:16
#: users/templates/users/user_detail.html:218
#: users/templates/users/user_detail.html:218
#: users/templates/users/user_list.html:38
#: users/templates/users/user_list.html:38
#: xpack/plugins/orgs/templates/orgs/org_list.html:1
5
#: xpack/plugins/orgs/templates/orgs/org_list.html:1
6
msgid "User group"
msgid "User group"
msgstr "用户组"
msgstr "用户组"
...
@@ -3192,7 +3192,7 @@ msgstr "添加资产"
...
@@ -3192,7 +3192,7 @@ msgstr "添加资产"
#: settings/templates/settings/terminal_setting.html:98
#: settings/templates/settings/terminal_setting.html:98
#: settings/templates/settings/terminal_setting.html:120
#: settings/templates/settings/terminal_setting.html:120
#: users/templates/users/user_group_detail.html:95
#: users/templates/users/user_group_detail.html:95
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:
9
0
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:
8
0
#: xpack/plugins/orgs/templates/orgs/org_detail.html:93
#: xpack/plugins/orgs/templates/orgs/org_detail.html:93
#: xpack/plugins/orgs/templates/orgs/org_detail.html:130
#: xpack/plugins/orgs/templates/orgs/org_detail.html:130
msgid "Add"
msgid "Add"
...
@@ -3204,7 +3204,7 @@ msgstr "添加节点"
...
@@ -3204,7 +3204,7 @@ msgstr "添加节点"
#: perms/templates/perms/asset_permission_asset.html:109
#: perms/templates/perms/asset_permission_asset.html:109
#: users/templates/users/user_detail.html:235
#: users/templates/users/user_detail.html:235
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:1
1
5
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:1
0
5
msgid "Join"
msgid "Join"
msgstr "加入"
msgstr "加入"
...
@@ -3315,7 +3315,7 @@ msgstr "添加用户组"
...
@@ -3315,7 +3315,7 @@ msgstr "添加用户组"
#: perms/views/remote_app_permission.py:81
#: perms/views/remote_app_permission.py:81
#: perms/views/remote_app_permission.py:115
#: perms/views/remote_app_permission.py:115
#: perms/views/remote_app_permission.py:148 templates/_nav.html:69
#: perms/views/remote_app_permission.py:148 templates/_nav.html:69
#: xpack/plugins/orgs/templates/orgs/org_list.html:2
1
#: xpack/plugins/orgs/templates/orgs/org_list.html:2
2
msgid "Perms"
msgid "Perms"
msgstr "权限管理"
msgstr "权限管理"
...
@@ -3910,7 +3910,7 @@ msgstr "用户来源不是LDAP"
...
@@ -3910,7 +3910,7 @@ msgstr "用户来源不是LDAP"
#: settings/views.py:19 settings/views.py:46 settings/views.py:73
#: settings/views.py:19 settings/views.py:46 settings/views.py:73
#: settings/views.py:103 settings/views.py:131 settings/views.py:144
#: settings/views.py:103 settings/views.py:131 settings/views.py:144
#: settings/views.py:158 settings/views.py:185 templates/_nav.html:1
67
#: settings/views.py:158 settings/views.py:185 templates/_nav.html:1
70
msgid "Settings"
msgid "Settings"
msgstr "系统设置"
msgstr "系统设置"
...
@@ -4103,19 +4103,23 @@ msgstr "终端管理"
...
@@ -4103,19 +4103,23 @@ msgstr "终端管理"
msgid "Job Center"
msgid "Job Center"
msgstr "作业中心"
msgstr "作业中心"
#: templates/_nav.html:116 templates/_nav.html:13
3
#: templates/_nav.html:116 templates/_nav.html:13
6
msgid "Batch command"
msgid "Batch command"
msgstr "批量命令"
msgstr "批量命令"
#: templates/_nav.html:143
#: templates/_nav.html:118
msgid "Task monitor"
msgstr "任务监控"
#: templates/_nav.html:146
msgid "XPack"
msgid "XPack"
msgstr ""
msgstr ""
#: templates/_nav.html:15
1
xpack/plugins/cloud/views.py:28
#: templates/_nav.html:15
4
xpack/plugins/cloud/views.py:28
msgid "Account list"
msgid "Account list"
msgstr "账户列表"
msgstr "账户列表"
#: templates/_nav.html:15
2
#: templates/_nav.html:15
5
msgid "Sync instance"
msgid "Sync instance"
msgstr "同步实例"
msgstr "同步实例"
...
@@ -4546,7 +4550,7 @@ msgstr "生成重置密码链接,通过邮件发送给用户"
...
@@ -4546,7 +4550,7 @@ msgstr "生成重置密码链接,通过邮件发送给用户"
msgid "Set password"
msgid "Set password"
msgstr "设置密码"
msgstr "设置密码"
#: users/forms.py:133 xpack/plugins/change_auth_plan/models.py:8
5
#: users/forms.py:133 xpack/plugins/change_auth_plan/models.py:8
8
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:51
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:51
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:69
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:69
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:57
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:57
...
@@ -4628,7 +4632,8 @@ msgstr "管理员"
...
@@ -4628,7 +4632,8 @@ msgstr "管理员"
msgid "Application"
msgid "Application"
msgstr "应用程序"
msgstr "应用程序"
#: users/models/user.py:129
#: users/models/user.py:129 xpack/plugins/orgs/forms.py:38
#: xpack/plugins/orgs/templates/orgs/org_list.html:14
msgid "Auditor"
msgid "Auditor"
msgstr "审计员"
msgstr "审计员"
...
@@ -5445,21 +5450,7 @@ msgstr "MFA 解绑成功,返回登录页面"
...
@@ -5445,21 +5450,7 @@ msgstr "MFA 解绑成功,返回登录页面"
msgid "Password length"
msgid "Password length"
msgstr "密码长度"
msgstr "密码长度"
#: xpack/plugins/change_auth_plan/forms.py:51
#: xpack/plugins/change_auth_plan/forms.py:66
#: xpack/plugins/change_auth_plan/models.py:209
msgid "* For security, do not change {} user's password"
msgstr "* 为了安全,禁止更改 {} 用户的密码"
#: xpack/plugins/change_auth_plan/forms.py:61
msgid "* Please enter custom password"
msgstr "* 请输入自定义密码"
#: xpack/plugins/change_auth_plan/forms.py:70
#: xpack/plugins/cloud/serializers.py:73
msgid "* Please enter a valid crontab expression"
msgstr "* 请输入有效的 crontab 表达式"
#: xpack/plugins/change_auth_plan/forms.py:123
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:60
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_create_update.html:60
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:81
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:81
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:17
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_list.html:17
...
@@ -5473,7 +5464,7 @@ msgstr "* 请输入有效的 crontab 表达式"
...
@@ -5473,7 +5464,7 @@ msgstr "* 请输入有效的 crontab 表达式"
msgid "Periodic perform"
msgid "Periodic perform"
msgstr "定时执行"
msgstr "定时执行"
#: xpack/plugins/change_auth_plan/forms.py:
127
#: xpack/plugins/change_auth_plan/forms.py:
70
msgid ""
msgid ""
"Tips: The username of the user on the asset to be modified. if the user "
"Tips: The username of the user on the asset to be modified. if the user "
"exists, change the password; If the user does not exist, create the user."
"exists, change the password; If the user does not exist, create the user."
...
@@ -5481,12 +5472,12 @@ msgstr ""
...
@@ -5481,12 +5472,12 @@ msgstr ""
"提示:用户名为将要修改的资产上的用户的用户名。如果用户存在,则修改密码;如果"
"提示:用户名为将要修改的资产上的用户的用户名。如果用户存在,则修改密码;如果"
"用户不存在,则创建用户。"
"用户不存在,则创建用户。"
#: xpack/plugins/change_auth_plan/forms.py:
131
xpack/plugins/cloud/forms.py:90
#: xpack/plugins/change_auth_plan/forms.py:
74
xpack/plugins/cloud/forms.py:90
#: xpack/plugins/gathered_user/forms.py:44
#: xpack/plugins/gathered_user/forms.py:44
msgid "Tips: (Units: hour)"
msgid "Tips: (Units: hour)"
msgstr "提示:(单位: 时)"
msgstr "提示:(单位: 时)"
#: xpack/plugins/change_auth_plan/forms.py:
132
xpack/plugins/cloud/forms.py:91
#: xpack/plugins/change_auth_plan/forms.py:
75
xpack/plugins/cloud/forms.py:91
#: xpack/plugins/gathered_user/forms.py:45
#: xpack/plugins/gathered_user/forms.py:45
msgid ""
msgid ""
"eg: Every Sunday 03:05 run <5 3 * * 0> <br> Tips: Using 5 digits linux "
"eg: Every Sunday 03:05 run <5 3 * * 0> <br> Tips: Using 5 digits linux "
...
@@ -5499,32 +5490,32 @@ msgstr ""
...
@@ -5499,32 +5490,32 @@ msgstr ""
"具</a>) <br>注意: 如果同时设置了定期执行和周期执行,优先使用定期执行"
"具</a>) <br>注意: 如果同时设置了定期执行和周期执行,优先使用定期执行"
#: xpack/plugins/change_auth_plan/meta.py:9
#: xpack/plugins/change_auth_plan/meta.py:9
#: xpack/plugins/change_auth_plan/models.py:11
3
#: xpack/plugins/change_auth_plan/models.py:11
6
#: xpack/plugins/change_auth_plan/models.py:25
3
#: xpack/plugins/change_auth_plan/models.py:25
6
#: xpack/plugins/change_auth_plan/views.py:33
#: xpack/plugins/change_auth_plan/views.py:33
#: xpack/plugins/change_auth_plan/views.py:50
#: xpack/plugins/change_auth_plan/views.py:50
#: xpack/plugins/change_auth_plan/views.py:7
2
#: xpack/plugins/change_auth_plan/views.py:7
4
#: xpack/plugins/change_auth_plan/views.py:
87
#: xpack/plugins/change_auth_plan/views.py:
90
#: xpack/plugins/change_auth_plan/views.py:11
4
#: xpack/plugins/change_auth_plan/views.py:11
7
#: xpack/plugins/change_auth_plan/views.py:1
29
#: xpack/plugins/change_auth_plan/views.py:1
32
#: xpack/plugins/change_auth_plan/views.py:14
4
#: xpack/plugins/change_auth_plan/views.py:14
7
msgid "Change auth plan"
msgid "Change auth plan"
msgstr "改密计划"
msgstr "改密计划"
#: xpack/plugins/change_auth_plan/models.py:5
4
#: xpack/plugins/change_auth_plan/models.py:5
7
msgid "Custom password"
msgid "Custom password"
msgstr "自定义密码"
msgstr "自定义密码"
#: xpack/plugins/change_auth_plan/models.py:5
5
#: xpack/plugins/change_auth_plan/models.py:5
8
msgid "All assets use the same random password"
msgid "All assets use the same random password"
msgstr "所有资产使用相同的随机密码"
msgstr "所有资产使用相同的随机密码"
#: xpack/plugins/change_auth_plan/models.py:5
6
#: xpack/plugins/change_auth_plan/models.py:5
9
msgid "All assets use different random password"
msgid "All assets use different random password"
msgstr "所有资产使用不同的随机密码"
msgstr "所有资产使用不同的随机密码"
#: xpack/plugins/change_auth_plan/models.py:7
5
#: xpack/plugins/change_auth_plan/models.py:7
8
#: xpack/plugins/change_auth_plan/models.py:14
4
#: xpack/plugins/change_auth_plan/models.py:14
7
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:100
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:100
#: xpack/plugins/cloud/models.py:165 xpack/plugins/cloud/models.py:219
#: xpack/plugins/cloud/models.py:165 xpack/plugins/cloud/models.py:219
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:91
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:91
...
@@ -5533,8 +5524,8 @@ msgstr "所有资产使用不同的随机密码"
...
@@ -5533,8 +5524,8 @@ msgstr "所有资产使用不同的随机密码"
msgid "Cycle perform"
msgid "Cycle perform"
msgstr "周期执行"
msgstr "周期执行"
#: xpack/plugins/change_auth_plan/models.py:8
0
#: xpack/plugins/change_auth_plan/models.py:8
3
#: xpack/plugins/change_auth_plan/models.py:14
2
#: xpack/plugins/change_auth_plan/models.py:14
5
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:92
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:92
#: xpack/plugins/cloud/models.py:170 xpack/plugins/cloud/models.py:217
#: xpack/plugins/cloud/models.py:170 xpack/plugins/cloud/models.py:217
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:83
#: xpack/plugins/cloud/templates/cloud/sync_instance_task_detail.html:83
...
@@ -5543,48 +5534,73 @@ msgstr "周期执行"
...
@@ -5543,48 +5534,73 @@ msgstr "周期执行"
msgid "Regularly perform"
msgid "Regularly perform"
msgstr "定期执行"
msgstr "定期执行"
#: xpack/plugins/change_auth_plan/models.py:
89
#: xpack/plugins/change_auth_plan/models.py:
92
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:74
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:74
msgid "Password rules"
msgid "Password rules"
msgstr "密码规则"
msgstr "密码规则"
#: xpack/plugins/change_auth_plan/models.py:213
#: xpack/plugins/change_auth_plan/models.py:212
msgid "* For security, do not change {} user's password"
msgstr "* 为了安全,禁止更改 {} 用户的密码"
#: xpack/plugins/change_auth_plan/models.py:216
msgid "Assets is empty, please add the asset"
msgid "Assets is empty, please add the asset"
msgstr "资产为空,请添加资产"
msgstr "资产为空,请添加资产"
#: xpack/plugins/change_auth_plan/models.py:2
57
#: xpack/plugins/change_auth_plan/models.py:2
60
msgid "Change auth plan snapshot"
msgid "Change auth plan snapshot"
msgstr "改密计划快照"
msgstr "改密计划快照"
#: xpack/plugins/change_auth_plan/models.py:27
2
#: xpack/plugins/change_auth_plan/models.py:27
5
#: xpack/plugins/change_auth_plan/models.py:42
3
#: xpack/plugins/change_auth_plan/models.py:42
6
msgid "Change auth plan execution"
msgid "Change auth plan execution"
msgstr "改密计划执行"
msgstr "改密计划执行"
#: xpack/plugins/change_auth_plan/models.py:43
2
#: xpack/plugins/change_auth_plan/models.py:43
5
msgid "Change auth plan execution subtask"
msgid "Change auth plan execution subtask"
msgstr "改密计划执行子任务"
msgstr "改密计划执行子任务"
#: xpack/plugins/change_auth_plan/models.py:45
0
#: xpack/plugins/change_auth_plan/models.py:45
3
msgid "Authentication failed"
msgid "Authentication failed"
msgstr "认证失败"
msgstr "认证失败"
#: xpack/plugins/change_auth_plan/models.py:45
2
#: xpack/plugins/change_auth_plan/models.py:45
5
msgid "Connection timeout"
msgid "Connection timeout"
msgstr "连接超时"
msgstr "连接超时"
#: xpack/plugins/change_auth_plan/serializers.py:58
msgid "* For security, do not change {}'s password"
msgstr "* 为了安全,禁止更改 {} 的密码"
#: xpack/plugins/change_auth_plan/serializers.py:68
msgid "* Please enter custom password"
msgstr "* 请输入自定义密码"
#: xpack/plugins/change_auth_plan/serializers.py:78
msgid "* Please enter the correct password length"
msgstr "* 请输入正确的密码长度"
#: xpack/plugins/change_auth_plan/serializers.py:81
msgid "* Password length range 6-30 bits"
msgstr "* 密码长度范围 6-30 位"
#: xpack/plugins/change_auth_plan/serializers.py:97
#: xpack/plugins/cloud/serializers.py:73
msgid "* Please enter a valid crontab expression"
msgstr "* 请输入有效的 crontab 表达式"
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:23
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:23
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:26
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_detail.html:26
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:23
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_execution_list.html:23
#: xpack/plugins/change_auth_plan/views.py:13
0
#: xpack/plugins/change_auth_plan/views.py:13
3
msgid "Plan execution list"
msgid "Plan execution list"
msgstr "执行列表"
msgstr "执行列表"
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:
7
6
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:
6
6
msgid "Add asset to this plan"
msgid "Add asset to this plan"
msgstr "添加资产"
msgstr "添加资产"
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:
10
1
#: xpack/plugins/change_auth_plan/templates/change_auth_plan/plan_asset_list.html:
9
1
msgid "Add node to this plan"
msgid "Add node to this plan"
msgstr "添加节点"
msgstr "添加节点"
...
@@ -5644,11 +5660,11 @@ msgstr "创建计划"
...
@@ -5644,11 +5660,11 @@ msgstr "创建计划"
msgid "Plan list"
msgid "Plan list"
msgstr "计划列表"
msgstr "计划列表"
#: xpack/plugins/change_auth_plan/views.py:7
3
#: xpack/plugins/change_auth_plan/views.py:7
5
msgid "Update plan"
msgid "Update plan"
msgstr "更新计划"
msgstr "更新计划"
#: xpack/plugins/change_auth_plan/views.py:14
5
#: xpack/plugins/change_auth_plan/views.py:14
8
msgid "Plan execution task list"
msgid "Plan execution task list"
msgstr "执行任务列表"
msgstr "执行任务列表"
...
@@ -6110,6 +6126,12 @@ msgstr "无效的许可证"
...
@@ -6110,6 +6126,12 @@ msgstr "无效的许可证"
msgid "Admin"
msgid "Admin"
msgstr "管理员"
msgstr "管理员"
#: xpack/plugins/orgs/forms.py:42
#, fuzzy
#| msgid "Select admins"
msgid "Select auditor"
msgstr "选择管理员"
#: xpack/plugins/orgs/meta.py:8 xpack/plugins/orgs/views.py:26
#: xpack/plugins/orgs/meta.py:8 xpack/plugins/orgs/views.py:26
#: xpack/plugins/orgs/views.py:43 xpack/plugins/orgs/views.py:60
#: xpack/plugins/orgs/views.py:43 xpack/plugins/orgs/views.py:60
#: xpack/plugins/orgs/views.py:77
#: xpack/plugins/orgs/views.py:77
...
@@ -6168,15 +6190,6 @@ msgstr "创建"
...
@@ -6168,15 +6190,6 @@ msgstr "创建"
#~ msgid "%(name)s was %(action)s successfully"
#~ msgid "%(name)s was %(action)s successfully"
#~ msgstr "%(name)s %(action)s成功"
#~ msgstr "%(name)s %(action)s成功"
#~ msgid "* For security, do not change {}'s password"
#~ msgstr "* 为了安全,禁止更改 {} 的密码"
#~ msgid "* Please enter the correct password length"
#~ msgstr "* 请输入正确的密码长度"
#~ msgid "* Password length range 6-30 bits"
#~ msgstr "* 密码长度范围 6-30 位"
#~ msgid "Loading..."
#~ msgid "Loading..."
#~ msgstr "加载中..."
#~ msgstr "加载中..."
...
...
apps/ops/migrations/0008_auto_20190919_2100.py
0 → 100644
View file @
89fa0658
# Generated by Django 2.1.7 on 2019-09-19 13:00
from
django.db
import
migrations
,
models
class
Migration
(
migrations
.
Migration
):
dependencies
=
[
(
'ops'
,
'0007_auto_20190724_2002'
),
]
operations
=
[
migrations
.
AddField
(
model_name
=
'task'
,
name
=
'date_updated'
,
field
=
models
.
DateTimeField
(
auto_now
=
True
,
verbose_name
=
'Date updated'
),
),
migrations
.
AlterField
(
model_name
=
'task'
,
name
=
'date_created'
,
field
=
models
.
DateTimeField
(
auto_now_add
=
True
,
db_index
=
True
,
verbose_name
=
'Date created'
),
),
migrations
.
AlterModelOptions
(
name
=
'task'
,
options
=
{
'get_latest_by'
:
'date_created'
,
'ordering'
:
(
'-date_updated'
,)},
),
]
apps/ops/models/adhoc.py
View file @
89fa0658
...
@@ -13,7 +13,7 @@ from django.utils import timezone
...
@@ -13,7 +13,7 @@ from django.utils import timezone
from
django.utils.translation
import
ugettext_lazy
as
_
from
django.utils.translation
import
ugettext_lazy
as
_
from
django_celery_beat.models
import
PeriodicTask
from
django_celery_beat.models
import
PeriodicTask
from
common.utils
import
get_signer
,
get_logger
from
common.utils
import
get_signer
,
get_logger
,
lazyproperty
from
orgs.utils
import
set_to_root_org
from
orgs.utils
import
set_to_root_org
from
..celery.utils
import
delete_celery_periodic_task
,
\
from
..celery.utils
import
delete_celery_periodic_task
,
\
create_or_update_celery_periodic_tasks
,
\
create_or_update_celery_periodic_tasks
,
\
...
@@ -42,7 +42,8 @@ class Task(models.Model):
...
@@ -42,7 +42,8 @@ class Task(models.Model):
is_deleted
=
models
.
BooleanField
(
default
=
False
)
is_deleted
=
models
.
BooleanField
(
default
=
False
)
comment
=
models
.
TextField
(
blank
=
True
,
verbose_name
=
_
(
"Comment"
))
comment
=
models
.
TextField
(
blank
=
True
,
verbose_name
=
_
(
"Comment"
))
created_by
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
default
=
''
)
created_by
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
default
=
''
)
date_created
=
models
.
DateTimeField
(
auto_now_add
=
True
,
db_index
=
True
)
date_created
=
models
.
DateTimeField
(
auto_now_add
=
True
,
db_index
=
True
,
verbose_name
=
_
(
"Date created"
))
date_updated
=
models
.
DateTimeField
(
auto_now
=
True
,
verbose_name
=
_
(
"Date updated"
))
__latest_adhoc
=
None
__latest_adhoc
=
None
_ignore_auto_created_by
=
True
_ignore_auto_created_by
=
True
...
@@ -51,16 +52,39 @@ class Task(models.Model):
...
@@ -51,16 +52,39 @@ class Task(models.Model):
return
str
(
self
.
id
)
.
split
(
'-'
)[
-
1
]
return
str
(
self
.
id
)
.
split
(
'-'
)[
-
1
]
@property
@property
def
latest_adhoc
(
self
):
def
versions
(
self
):
if
not
self
.
__latest_adhoc
:
return
self
.
adhoc
.
all
()
.
count
()
self
.
__latest_adhoc
=
self
.
get_latest_adhoc
()
return
self
.
__latest_adhoc
@property
def
is_success
(
self
):
if
self
.
latest_history
:
return
self
.
latest_history
.
is_success
else
:
return
False
@latest_adhoc.setter
@property
def
latest_adhoc
(
self
,
item
):
def
timedelta
(
self
):
self
.
__latest_adhoc
=
item
if
self
.
latest_history
:
return
self
.
latest_history
.
timedelta
else
:
return
0
@property
@property
def
date_start
(
self
):
if
self
.
latest_history
:
return
self
.
latest_history
.
date_start
else
:
return
None
@property
def
assets_amount
(
self
):
return
self
.
latest_adhoc
.
hosts
.
count
()
@lazyproperty
def
latest_adhoc
(
self
):
return
self
.
get_latest_adhoc
()
@lazyproperty
def
latest_history
(
self
):
def
latest_history
(
self
):
try
:
try
:
return
self
.
history
.
all
()
.
latest
()
return
self
.
history
.
all
()
.
latest
()
...
@@ -139,6 +163,7 @@ class Task(models.Model):
...
@@ -139,6 +163,7 @@ class Task(models.Model):
class
Meta
:
class
Meta
:
db_table
=
'ops_task'
db_table
=
'ops_task'
unique_together
=
(
'name'
,
'created_by'
)
unique_together
=
(
'name'
,
'created_by'
)
ordering
=
(
'-date_updated'
,)
get_latest_by
=
'date_created'
get_latest_by
=
'date_created'
...
@@ -246,6 +271,7 @@ class AdHoc(models.Model):
...
@@ -246,6 +271,7 @@ class AdHoc(models.Model):
)
)
def
_run_only
(
self
):
def
_run_only
(
self
):
Task
.
objects
.
filter
(
id
=
self
.
task
.
id
)
.
update
(
date_updated
=
timezone
.
now
())
runner
=
AdHocRunner
(
self
.
inventory
,
options
=
self
.
options
)
runner
=
AdHocRunner
(
self
.
inventory
,
options
=
self
.
options
)
try
:
try
:
result
=
runner
.
run
(
result
=
runner
.
run
(
...
...
apps/ops/serializers.py
View file @
89fa0658
...
@@ -19,7 +19,12 @@ class CeleryTaskSerializer(serializers.Serializer):
...
@@ -19,7 +19,12 @@ class CeleryTaskSerializer(serializers.Serializer):
class
TaskSerializer
(
serializers
.
ModelSerializer
):
class
TaskSerializer
(
serializers
.
ModelSerializer
):
class
Meta
:
class
Meta
:
model
=
Task
model
=
Task
fields
=
'__all__'
fields
=
[
'id'
,
'name'
,
'interval'
,
'crontab'
,
'is_periodic'
,
'is_deleted'
,
'comment'
,
'created_by'
,
'date_created'
,
'versions'
,
'is_success'
,
'timedelta'
,
'assets_amount'
,
'date_updated'
,
'history_summary'
,
]
class
AdHocSerializer
(
serializers
.
ModelSerializer
):
class
AdHocSerializer
(
serializers
.
ModelSerializer
):
...
...
apps/ops/tasks.py
View file @
89fa0658
...
@@ -128,7 +128,7 @@ def hello_callback(result):
...
@@ -128,7 +128,7 @@ def hello_callback(result):
@shared_task
@shared_task
def
add
(
a
,
b
):
def
add
(
a
,
b
):
time
.
sleep
(
5
)
time
.
sleep
(
5
)
return
max
(
b
)
return
a
+
b
@shared_task
@shared_task
...
...
apps/ops/templates/ops/task_list.html
View file @
89fa0658
{% extends '_base_list.html' %}
{% extends '_base_list.html' %}
{% load i18n %}
{% load i18n static %}
{% load static %}
{% block table_search %}{% endblock %}
{% block table_container %}
{% block content_left_head %}
<table
class=
"table table-striped table-bordered table-hover "
id=
"task_list_table"
>
{#
<div
class=
"uc pull-left m-r-5"
><a
class=
"btn btn-sm btn-primary btn-create-asset"
>
{% trans "Create task" %}
</a></div>
#}
<thead>
{% endblock %}
<tr>
<th
class=
"text-center"
>
<input
id=
""
type=
"checkbox"
class=
"ipt_check_all"
>
{% block table_search %}
</th>
<form
id=
"search_form"
method=
"get"
action=
""
class=
"pull-right form-inline"
>
<th
class=
"text-left"
>
{% trans 'Name' %}
</th>
<div
class=
"input-group"
>
<th
class=
"text-center"
>
{% trans 'Run times' %}
</th>
<input
type=
"text"
class=
"form-control input-sm"
name=
"keyword"
placeholder=
"{% trans 'Search' %}"
value=
"{{ keyword }}"
>
<th
class=
"text-center"
>
{% trans 'Versions' %}
</th>
</div>
<th
class=
"text-center"
>
{% trans 'Hosts' %}
</th>
<div
class=
"input-group"
>
<th
class=
"text-center"
>
{% trans 'Success' %}
</th>
<div
class=
"input-group-btn"
>
<th
class=
"text-center"
>
{% trans 'Date' %}
</th>
<button
id=
'search_btn'
type=
"submit"
class=
"btn btn-sm btn-primary"
>
<th
class=
"text-center"
>
{% trans 'Time' %}
</th>
{% trans "Search" %}
<th
class=
"text-center"
>
{% trans 'Action' %}
</th>
</button>
</div>
</div>
</form>
{% endblock %}
{% block table_head %}
<th
class=
"text-center"
></th>
<th
class=
"text-center"
>
{% trans 'Name' %}
</th>
<th
class=
"text-center"
>
{% trans 'Run times' %}
</th>
<th
class=
"text-center"
>
{% trans 'Versions' %}
</th>
<th
class=
"text-center"
>
{% trans 'Hosts' %}
</th>
<th
class=
"text-center"
>
{% trans 'Success' %}
</th>
<th
class=
"text-center"
>
{% trans 'Date' %}
</th>
<th
class=
"text-center"
>
{% trans 'Time' %}
</th>
<th
class=
"text-center"
>
{% trans 'Action' %}
</th>
{% endblock %}
{% block table_body %}
{% for object in task_list %}
<tr
class=
"gradeX"
>
<td
class=
"text-center"
><input
type=
"checkbox"
class=
"cbx-term"
>
</td>
<td
class=
"text-left"
><a
href=
"{% url 'ops:task-detail' pk=object.id %}"
>
{{ object.name }}
</a></td>
<td
class=
"text-center"
>
<span
class=
"text-danger"
>
{{ object.history_summary.failed }}
</span>
/
<span
class=
"text-navy"
>
{{ object.history_summary.success}}
</span>
/{{ object.history_summary.total}}
</td>
<td
class=
"text-center"
>
{{ object.adhoc.all | length}}
</td>
<td
class=
"text-center"
>
{{ object.latest_adhoc.hosts | length}}
</td>
<td
class=
"text-center"
>
{% if object.latest_history %}
{% if object.latest_history.is_success %}
<i
class=
"fa fa-check text-navy"
></i>
{% else %}
<i
class=
"fa fa-times text-danger"
></i>
{% endif %}
{% endif %}
</td>
<td
class=
"text-center"
>
{{ object.latest_history.date_start }}
</td>
<td
class=
"text-center"
>
{% if object.latest_history %}
{{ object.latest_history.timedelta|floatformat }} s
{% endif %}
</td>
<td
class=
"text-center"
>
<a
data-uid=
"{{ object.id }}"
class=
"btn btn-xs btn-primary btn-run"
>
{% trans "Run" %}
</a>
<a
data-uid=
"{{ object.id }}"
class=
"btn btn-xs btn-danger btn-del"
>
{% trans "Delete" %}
</a>
</td>
</tr>
</tr>
{% endfor %}
</thead>
</table>
{% endblock %}
{% endblock %}
{% block content_bottom_left %}{% endblock %}
{% block custom_foot_js %}
{% block custom_foot_js %}
<script
src=
"{% static 'js/plugins/datepicker/bootstrap-datepicker.js' %}"
></script>
<script>
<script>
$
(
document
).
ready
(
function
()
{
$
(
document
).
ready
(
function
()
{
$
(
'table'
).
DataTable
({
var
options
=
{
"searching"
:
false
,
ele
:
$
(
'#task_list_table'
),
"paging"
:
false
,
buttons
:
[],
"bInfo"
:
false
,
columnDefs
:
[
"order"
:
[],
{
targets
:
1
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
"columnDefs"
:
[
cellData
=
htmlEscape
(
cellData
);
{
"targets"
:
0
,
"orderable"
:
false
},
var
innerHtml
=
'<a href="{% url "ops:task-detail" pk=DEFAULT_PK %}">'
+
cellData
+
'</a>'
{
"targets"
:
4
,
"orderable"
:
false
},
innerHtml
=
innerHtml
.
replace
(
'{{ DEFAULT_PK }}'
,
rowData
.
id
);
{
"targets"
:
5
,
"orderable"
:
false
},
$
(
td
).
html
(
innerHtml
);
{
"targets"
:
8
,
"orderable"
:
false
}
}},
]
{
targets
:
2
,
createdCell
:
function
(
td
,
cellData
)
{
});
var
innerHtml
=
'<span class="text-danger">failed</span>/<span class="text-navy">success</span>/total'
;
$
(
'.select2'
).
select2
({
if
(
cellData
)
{
dropdownAutoWidth
:
true
,
innerHtml
=
innerHtml
.
replace
(
'failed'
,
cellData
.
failed
)
width
:
'auto'
.
replace
(
'success'
,
cellData
.
success
)
});
.
replace
(
'total'
,
cellData
.
total
);
$
(
'#date .input-daterange'
).
datepicker
({
$
(
td
).
html
(
innerHtml
);
format
:
"yyyy-mm-dd"
,
}
else
{
todayBtn
:
"linked"
,
$
(
td
).
html
(
''
)
keyboardNavigation
:
false
,
}
forceParse
:
false
,
}},
calendarWeeks
:
true
,
{
targets
:
5
,
createdCell
:
function
(
td
,
cellData
)
{
autoclose
:
true
var
successBtn
=
'<i class="fa fa-check text-navy"></i>'
;
});
var
failedBtn
=
'<i class="fa fa-times text-danger"></i>'
;
if
(
cellData
)
{
$
(
td
).
html
(
successBtn
)
}
else
{
$
(
td
).
html
(
failedBtn
)
}
}},
{
targets
:
6
,
createdCell
:
function
(
td
,
cellData
)
{
$
(
td
).
html
(
toSafeLocalDateStr
(
cellData
));
}},
{
targets
:
7
,
createdCell
:
function
(
td
,
cellData
)
{
var
delta
=
readableSecond
(
cellData
);
$
(
td
).
html
(
delta
);
}},
{
targets
:
8
,
createdCell
:
function
(
td
,
cellData
,
rowData
)
{
var
runBtn
=
'<a data-uid="ID" class="btn btn-xs btn-primary btn-run">{% trans "Run" %}</a> '
.
replace
(
'ID'
,
cellData
);
var
delBtn
=
'<a data-uid="ID" class="btn btn-xs btn-danger btn-del">{% trans "Delete" %}</a>'
.
replace
(
'ID'
,
cellData
);
$
(
td
).
html
(
runBtn
+
delBtn
)
}
}
],
ajax_url
:
'{% url "api-ops:task-list" %}'
,
columns
:
[
{
data
:
"id"
},
{
data
:
"name"
,
className
:
"text-left"
},
{
data
:
"history_summary"
,
orderable
:
false
},
{
data
:
"versions"
,
orderable
:
false
},
{
data
:
"assets_amount"
,
orderable
:
false
},
{
data
:
"is_success"
,
orderable
:
false
},
{
data
:
"date_updated"
},
{
data
:
"timedelta"
,
orderable
:
false
},
{
data
:
"id"
,
orderable
:
false
},
],
order
:
[],
op_html
:
$
(
'#actions'
).
html
()
};
jumpserver
.
initServerSideDataTable
(
options
);
}).
on
(
'click'
,
'.btn-del'
,
function
()
{
}).
on
(
'click'
,
'.btn-del'
,
function
()
{
var
$this
=
$
(
this
);
var
$this
=
$
(
this
);
var
name
=
$this
.
closest
(
"tr"
).
find
(
":nth-child(2)"
).
children
(
'a'
).
html
();
var
name
=
$this
.
closest
(
"tr"
).
find
(
":nth-child(2)"
).
children
(
'a'
).
html
();
...
@@ -122,7 +108,6 @@ $(document).ready(function() {
...
@@ -122,7 +108,6 @@ $(document).ready(function() {
success
:
success
,
success
:
success
,
success_message
:
"{% trans 'Task start: ' %}"
+
" "
+
name
success_message
:
"{% trans 'Task start: ' %}"
+
" "
+
name
});
});
})
})
</script>
</script>
{% endblock %}
{% endblock %}
...
...
apps/ops/views/adhoc.py
View file @
89fa0658
...
@@ -2,7 +2,7 @@
...
@@ -2,7 +2,7 @@
from
django.utils.translation
import
ugettext
as
_
from
django.utils.translation
import
ugettext
as
_
from
django.conf
import
settings
from
django.conf
import
settings
from
django.views.generic
import
ListView
,
DetailView
from
django.views.generic
import
ListView
,
DetailView
,
TemplateView
from
common.mixins
import
DatetimeSearchMixin
from
common.mixins
import
DatetimeSearchMixin
from
common.permissions
import
PermissionsMixin
,
IsOrgAdmin
from
common.permissions
import
PermissionsMixin
,
IsOrgAdmin
...
@@ -17,7 +17,7 @@ __all__ = [
...
@@ -17,7 +17,7 @@ __all__ = [
]
]
class
TaskListView
(
PermissionsMixin
,
DatetimeSearchMixin
,
List
View
):
class
TaskListView
(
PermissionsMixin
,
Template
View
):
paginate_by
=
settings
.
DISPLAY_PER_PAGE
paginate_by
=
settings
.
DISPLAY_PER_PAGE
model
=
Task
model
=
Task
ordering
=
(
'-date_created'
,)
ordering
=
(
'-date_created'
,)
...
@@ -26,27 +26,10 @@ class TaskListView(PermissionsMixin, DatetimeSearchMixin, ListView):
...
@@ -26,27 +26,10 @@ class TaskListView(PermissionsMixin, DatetimeSearchMixin, ListView):
keyword
=
''
keyword
=
''
permission_classes
=
[
IsOrgAdmin
]
permission_classes
=
[
IsOrgAdmin
]
def
get_queryset
(
self
):
queryset
=
super
()
.
get_queryset
()
if
current_org
.
is_real
():
queryset
=
queryset
.
filter
(
created_by
=
current_org
.
id
)
else
:
queryset
=
queryset
.
filter
(
created_by
=
''
)
self
.
keyword
=
self
.
request
.
GET
.
get
(
'keyword'
,
''
)
if
self
.
keyword
:
queryset
=
queryset
.
filter
(
name__icontains
=
self
.
keyword
,
)
return
queryset
def
get_context_data
(
self
,
**
kwargs
):
def
get_context_data
(
self
,
**
kwargs
):
context
=
{
context
=
{
'app'
:
_
(
'Ops'
),
'app'
:
_
(
'Ops'
),
'action'
:
_
(
'Task list'
),
'action'
:
_
(
'Task list'
),
'date_from'
:
self
.
date_from
,
'date_to'
:
self
.
date_to
,
'keyword'
:
self
.
keyword
,
}
}
kwargs
.
update
(
context
)
kwargs
.
update
(
context
)
return
super
()
.
get_context_data
(
**
kwargs
)
return
super
()
.
get_context_data
(
**
kwargs
)
...
...
apps/static/js/jumpserver.js
View file @
89fa0658
...
@@ -1139,7 +1139,10 @@ function timeOffset(a, b) {
...
@@ -1139,7 +1139,10 @@ function timeOffset(a, b) {
var
start
=
safeDate
(
a
);
var
start
=
safeDate
(
a
);
var
end
=
safeDate
(
b
);
var
end
=
safeDate
(
b
);
var
offset
=
(
end
-
start
)
/
1000
;
var
offset
=
(
end
-
start
)
/
1000
;
return
readableSecond
(
offset
)
}
function
readableSecond
(
offset
)
{
var
days
=
offset
/
3600
/
24
;
var
days
=
offset
/
3600
/
24
;
var
hours
=
offset
/
3600
;
var
hours
=
offset
/
3600
;
var
minutes
=
offset
/
60
;
var
minutes
=
offset
/
60
;
...
...
apps/templates/_nav.html
View file @
89fa0658
...
@@ -114,6 +114,9 @@
...
@@ -114,6 +114,9 @@
<ul
class=
"nav nav-second-level"
>
<ul
class=
"nav nav-second-level"
>
<li
id=
"task"
><a
href=
"{% url 'ops:task-list' %}"
>
{% trans 'Task list' %}
</a></li>
<li
id=
"task"
><a
href=
"{% url 'ops:task-list' %}"
>
{% trans 'Task list' %}
</a></li>
<li
id=
"command-execution"
><a
href=
"{% url 'ops:command-execution-start' %}"
>
{% trans 'Batch command' %}
</a></li>
<li
id=
"command-execution"
><a
href=
"{% url 'ops:command-execution-start' %}"
>
{% trans 'Batch command' %}
</a></li>
{% if request.user.is_superuser %}
<li><a
href=
"{% url 'flower-view' path='' %}"
target=
"_blank"
>
{% trans 'Task monitor' %}
</a></li>
{% endif %}
</ul>
</ul>
</li>
</li>
{% endif %}
{% endif %}
...
...
jms
View file @
89fa0658
...
@@ -200,9 +200,13 @@ def is_running(s, unlink=True):
...
@@ -200,9 +200,13 @@ def is_running(s, unlink=True):
def
parse_service
(
s
):
def
parse_service
(
s
):
all_services
=
[
'gunicorn'
,
'celery_ansible'
,
'celery_default'
,
'beat'
]
all_services
=
[
'gunicorn'
,
'celery_ansible'
,
'celery_default'
,
'beat'
,
'flower'
]
if
s
==
'all'
:
if
s
==
'all'
:
return
all_services
return
all_services
elif
s
==
'gunicorn'
:
return
[
'gunicorn'
,
'flower'
]
elif
s
==
"celery"
:
elif
s
==
"celery"
:
return
[
"celery_ansible"
,
"celery_default"
]
return
[
"celery_ansible"
,
"celery_default"
]
elif
","
in
s
:
elif
","
in
s
:
...
@@ -240,17 +244,19 @@ def get_start_gunicorn_kwargs():
...
@@ -240,17 +244,19 @@ def get_start_gunicorn_kwargs():
def
get_start_celery_ansible_kwargs
():
def
get_start_celery_ansible_kwargs
():
print
(
"
\n
- Start Celery as Distributed Task Queue"
)
print
(
"
\n
- Start Celery as Distributed Task Queue
: Ansible
"
)
return
get_start_worker_kwargs
(
'ansible'
,
4
)
return
get_start_worker_kwargs
(
'ansible'
,
4
)
def
get_start_celery_default_kwargs
():
def
get_start_celery_default_kwargs
():
print
(
"
\n
- Start Celery as Distributed Task Queue: Celery"
)
return
get_start_worker_kwargs
(
'celery'
,
2
)
return
get_start_worker_kwargs
(
'celery'
,
2
)
def
get_start_worker_kwargs
(
queue
,
num
):
def
get_start_worker_kwargs
(
queue
,
num
):
# Todo: Must set this environment, otherwise not no ansible result return
# Todo: Must set this environment, otherwise not no ansible result return
os
.
environ
.
setdefault
(
'PYTHONOPTIMIZE'
,
'1'
)
os
.
environ
.
setdefault
(
'PYTHONOPTIMIZE'
,
'1'
)
os
.
environ
.
setdefault
(
'ANSIBLE_FORCE_COLOR'
,
'True'
)
if
os
.
getuid
()
==
0
:
if
os
.
getuid
()
==
0
:
os
.
environ
.
setdefault
(
'C_FORCE_ROOT'
,
'1'
)
os
.
environ
.
setdefault
(
'C_FORCE_ROOT'
,
'1'
)
...
@@ -261,6 +267,24 @@ def get_start_worker_kwargs(queue, num):
...
@@ -261,6 +267,24 @@ def get_start_worker_kwargs(queue, num):
'-l'
,
'INFO'
,
'-l'
,
'INFO'
,
'-c'
,
str
(
num
),
'-c'
,
str
(
num
),
'-Q'
,
queue
,
'-Q'
,
queue
,
'-n'
,
'{}@
%
h'
.
format
(
queue
)
]
return
{
"cmd"
:
cmd
,
"cwd"
:
APPS_DIR
}
def
get_start_flower_kwargs
():
print
(
"
\n
- Start Flower as Task Monitor"
)
if
os
.
getuid
()
==
0
:
os
.
environ
.
setdefault
(
'C_FORCE_ROOT'
,
'1'
)
cmd
=
[
'celery'
,
'flower'
,
'-A'
,
'ops'
,
'-l'
,
'INFO'
,
'--url_prefix=flower'
,
'--auto_refresh=False'
,
'--max_tasks=1000'
,
'--tasks_columns=uuid,name,args,state,received,started,runtime,worker'
]
]
return
{
"cmd"
:
cmd
,
"cwd"
:
APPS_DIR
}
return
{
"cmd"
:
cmd
,
"cwd"
:
APPS_DIR
}
...
@@ -333,6 +357,7 @@ def start_service(s):
...
@@ -333,6 +357,7 @@ def start_service(s):
"celery_ansible"
:
get_start_celery_ansible_kwargs
,
"celery_ansible"
:
get_start_celery_ansible_kwargs
,
"celery_default"
:
get_start_celery_default_kwargs
,
"celery_default"
:
get_start_celery_default_kwargs
,
"beat"
:
get_start_beat_kwargs
,
"beat"
:
get_start_beat_kwargs
,
"flower"
:
get_start_flower_kwargs
,
}
}
kwargs
=
services_kwargs
.
get
(
s
)()
kwargs
=
services_kwargs
.
get
(
s
)()
...
@@ -449,7 +474,7 @@ if __name__ == '__main__':
...
@@ -449,7 +474,7 @@ if __name__ == '__main__':
)
)
parser
.
add_argument
(
parser
.
add_argument
(
"service"
,
type
=
str
,
default
=
"all"
,
nargs
=
"?"
,
"service"
,
type
=
str
,
default
=
"all"
,
nargs
=
"?"
,
choices
=
(
"all"
,
"gunicorn"
,
"celery"
,
"beat"
,
"celery,beat"
),
choices
=
(
"all"
,
"gunicorn"
,
"celery"
,
"beat"
,
"celery,beat"
,
"flower"
),
help
=
"The service to start"
,
help
=
"The service to start"
,
)
)
parser
.
add_argument
(
'-d'
,
'--daemon'
,
nargs
=
"?"
,
const
=
1
)
parser
.
add_argument
(
'-d'
,
'--daemon'
,
nargs
=
"?"
,
const
=
1
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment