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
0f29745b
Commit
0f29745b
authored
9 years ago
by
wangyong
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
asset add batch
parent
ec7b543b
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
276 additions
and
178 deletions
+276
-178
ansible_api.py
jasset/ansible_api.py
+0
-0
asset_api.py
jasset/asset_api.py
+67
-10
models.py
jasset/models.py
+1
-1
models_bak.py
jasset/models_bak.py
+0
-151
urls.py
jasset/urls.py
+4
-3
views.py
jasset/views.py
+85
-8
mytags.py
jumpserver/templatetags/mytags.py
+17
-0
asset_add.html
templates/jasset/asset_add.html
+1
-1
asset_add_batch.html
templates/jasset/asset_add_batch.html
+66
-0
asset_detail.html
templates/jasset/asset_detail.html
+30
-2
asset_list.html
templates/jasset/asset_list.html
+5
-2
No files found.
jasset/ansible_api.py
0 → 100644
View file @
0f29745b
This diff is collapsed.
Click to expand it.
jasset/asset_api.py
View file @
0f29745b
# coding: utf-8
# coding: utf-8
import
ast
import
xlrd
import
xlsxwriter
import
xlsxwriter
from
django.db.models
import
AutoField
from
django.db.models
import
AutoField
from
jumpserver.api
import
*
from
jumpserver.api
import
*
...
@@ -226,7 +226,7 @@ def asset_diff(before, after):
...
@@ -226,7 +226,7 @@ def asset_diff(before, after):
def
asset_diff_one
(
before
,
after
):
def
asset_diff_one
(
before
,
after
):
print
before
.
__dict__
,
after
.
__dict__
print
before
.
__dict__
,
after
.
__dict__
fields
=
Asset
.
_meta
.
get_all_field_names
()
fields
=
Asset
.
_meta
.
get_all_field_names
()
for
field
in
fields
:
for
field
in
fields
:
print
before
.
field
,
after
.
field
print
before
.
field
,
after
.
field
...
@@ -270,7 +270,7 @@ def db_asset_alert(asset, username, alert_dic):
...
@@ -270,7 +270,7 @@ def db_asset_alert(asset, username, alert_dic):
else
:
else
:
name
=
asset
.
username
name
=
asset
.
username
alert_info
=
[
field_name
,
u'默认'
,
name
]
if
unicode
(
value
[
0
])
==
'True'
else
\
alert_info
=
[
field_name
,
u'默认'
,
name
]
if
unicode
(
value
[
0
])
==
'True'
else
\
[
field_name
,
name
,
u'默认'
]
[
field_name
,
name
,
u'默认'
]
elif
field
in
[
'username'
,
'password'
]:
elif
field
in
[
'username'
,
'password'
]:
continue
continue
...
@@ -281,7 +281,7 @@ def db_asset_alert(asset, username, alert_dic):
...
@@ -281,7 +281,7 @@ def db_asset_alert(asset, username, alert_dic):
continue
continue
else
:
else
:
alert_info
=
[
u'是否激活'
,
u'激活'
,
u'禁用'
]
if
unicode
(
value
[
0
])
==
'True'
else
\
alert_info
=
[
u'是否激活'
,
u'激活'
,
u'禁用'
]
if
unicode
(
value
[
0
])
==
'True'
else
\
[
u'是否激活'
,
u'禁用'
,
u'激活'
]
[
u'是否激活'
,
u'禁用'
,
u'激活'
]
else
:
else
:
alert_info
=
[
field_name
,
unicode
(
value
[
0
]),
unicode
(
value
[
1
])]
alert_info
=
[
field_name
,
unicode
(
value
[
0
]),
unicode
(
value
[
1
])]
...
@@ -310,8 +310,10 @@ def write_excel(asset_all):
...
@@ -310,8 +310,10 @@ def write_excel(asset_all):
group_all
=
'/'
.
join
(
group_list
)
group_all
=
'/'
.
join
(
group_list
)
status
=
asset
.
get_status_display
()
status
=
asset
.
get_status_display
()
alter_dic
=
[
asset
.
hostname
,
asset
.
ip
,
asset
.
idc
.
name
,
asset
.
mac
,
asset
.
remote_ip
,
asset
.
cpu
,
asset
.
memory
,
idc_name
=
asset
.
idc
.
name
if
asset
.
idc
else
u''
asset
.
disk
,
asset
.
system_type
,
asset
.
cabinet
,
group_all
,
status
,
asset
.
comment
]
alter_dic
=
[
asset
.
hostname
,
asset
.
ip
,
idc_name
,
asset
.
mac
,
asset
.
remote_ip
,
asset
.
cpu
,
asset
.
memory
,
asset
.
disk
,
(
asset
.
system_type
+
asset
.
system_version
),
asset
.
cabinet
,
group_all
,
status
,
asset
.
comment
]
data
.
append
(
alter_dic
)
data
.
append
(
alter_dic
)
format
=
workbook
.
add_format
()
format
=
workbook
.
add_format
()
format
.
set_border
(
1
)
format
.
set_border
(
1
)
...
@@ -342,6 +344,62 @@ def write_excel(asset_all):
...
@@ -342,6 +344,62 @@ def write_excel(asset_all):
def
copy_model_instance
(
obj
):
def
copy_model_instance
(
obj
):
initial
=
dict
([(
f
.
name
,
getattr
(
obj
,
f
.
name
))
initial
=
dict
([(
f
.
name
,
getattr
(
obj
,
f
.
name
))
for
f
in
obj
.
_meta
.
fields
for
f
in
obj
.
_meta
.
fields
if
not
isinstance
(
f
,
AutoField
)
and
\
if
not
isinstance
(
f
,
AutoField
)
and
\
not
f
in
obj
.
_meta
.
parents
.
values
()])
not
f
in
obj
.
_meta
.
parents
.
values
()])
return
obj
.
__class__
(
**
initial
)
return
obj
.
__class__
(
**
initial
)
\ No newline at end of file
def
ansible_record
(
asset
,
ansible_dic
,
username
):
alert_dic
=
{}
asset_dic
=
asset
.
__dict__
for
field
,
value
in
ansible_dic
.
items
():
old
=
asset_dic
.
get
(
field
)
new
=
ansible_dic
.
get
(
field
)
if
unicode
(
old
)
!=
unicode
(
new
):
print
old
,
new
,
type
(
old
),
type
(
new
)
setattr
(
asset
,
field
,
value
)
asset
.
save
()
alert_dic
[
field
]
=
[
old
,
new
]
db_asset_alert
(
asset
,
username
,
alert_dic
)
def
excel_to_db
(
excel_file
):
"""
Asset add batch function
"""
try
:
data
=
xlrd
.
open_workbook
(
filename
=
None
,
file_contents
=
excel_file
.
read
())
except
Exception
,
e
:
return
False
else
:
table
=
data
.
sheets
()[
0
]
rows
=
table
.
nrows
group_instance
=
[]
for
row_num
in
range
(
1
,
rows
):
row
=
table
.
row_values
(
row_num
)
if
row
:
ip
,
port
,
hostname
,
use_default_auth
,
username
,
password
,
group
=
row
print
ip
use_default_auth
=
1
if
use_default_auth
==
u'默认'
else
0
if
get_object
(
Asset
,
ip
=
ip
):
continue
if
ip
and
port
:
asset
=
Asset
(
ip
=
ip
,
port
=
port
,
use_default_auth
=
use_default_auth
,
username
=
username
,
password
=
password
)
asset
.
save
()
group_list
=
group
.
split
(
'/'
)
for
group_name
in
group_list
:
group
=
get_object
(
AssetGroup
,
name
=
group_name
)
if
group
:
group_instance
.
append
(
group
)
if
group_instance
:
print
group_instance
asset
.
group
=
group_instance
asset
.
save
()
return
True
This diff is collapsed.
Click to expand it.
jasset/models.py
View file @
0f29745b
...
@@ -80,7 +80,7 @@ class Asset(models.Model):
...
@@ -80,7 +80,7 @@ class Asset(models.Model):
status
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_STATUS
,
blank
=
True
,
null
=
True
,
default
=
1
,
verbose_name
=
u"机器状态"
)
status
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_STATUS
,
blank
=
True
,
null
=
True
,
default
=
1
,
verbose_name
=
u"机器状态"
)
asset_type
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_TYPE
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"主机类型"
)
asset_type
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_TYPE
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"主机类型"
)
env
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_ENV
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"运行环境"
)
env
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_ENV
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"运行环境"
)
sn
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"SN编号"
)
sn
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"SN编号"
)
date_added
=
models
.
DateTimeField
(
auto_now
=
True
,
default
=
datetime
.
datetime
.
now
(),
null
=
True
)
date_added
=
models
.
DateTimeField
(
auto_now
=
True
,
default
=
datetime
.
datetime
.
now
(),
null
=
True
)
is_active
=
models
.
BooleanField
(
default
=
True
,
verbose_name
=
u"是否激活"
)
is_active
=
models
.
BooleanField
(
default
=
True
,
verbose_name
=
u"是否激活"
)
comment
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"备注"
)
comment
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
null
=
True
,
verbose_name
=
u"备注"
)
...
...
This diff is collapsed.
Click to expand it.
jasset/models_bak.py
deleted
100644 → 0
View file @
ec7b543b
# coding: utf-8
import
datetime
from
django.db
import
models
from
juser.models
import
User
,
UserGroup
class
AssetGroup
(
models
.
Model
):
GROUP_TYPE
=
(
(
'P'
,
'PRIVATE'
),
(
'A'
,
'ASSET'
),
)
name
=
models
.
CharField
(
max_length
=
80
,
unique
=
True
)
comment
=
models
.
CharField
(
max_length
=
160
,
blank
=
True
,
null
=
True
)
def
__unicode__
(
self
):
return
self
.
name
def
get_asset
(
self
):
return
self
.
asset_set
.
all
()
def
get_asset_info
(
self
,
printable
=
False
):
assets
=
self
.
get_asset
()
ip_comment
=
{}
for
asset
in
assets
:
ip_comment
[
asset
.
ip
]
=
asset
.
comment
for
ip
in
sorted
(
ip_comment
):
if
ip_comment
[
ip
]:
print
'
%-15
s --
%
s'
%
(
ip
,
ip_comment
[
ip
])
else
:
print
'
%-15
s'
%
ip
print
''
def
get_asset_num
(
self
):
return
len
(
self
.
get_asset
())
def
get_user_group
(
self
):
perm_list
=
self
.
perm_set
.
all
()
user_group_list
=
[]
for
perm
in
perm_list
:
user_group_list
.
append
(
perm
.
user_group
)
return
user_group_list
def
get_user
(
self
):
user_list
=
[]
user_group_list
=
self
.
get_user_group
()
for
user_group
in
user_group_list
:
user_list
.
extend
(
user_group
.
user_set
.
all
())
return
user_list
def
is_permed
(
self
,
user
=
None
,
user_group
=
None
):
if
user
:
if
user
in
self
.
get_user
():
return
True
if
user_group
:
if
user_group
in
self
.
get_user_group
():
return
True
return
False
class
IDC
(
models
.
Model
):
name
=
models
.
CharField
(
max_length
=
32
,
unique
=
True
)
bandwidth
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
)
linkman
=
models
.
CharField
(
max_length
=
16
,
blank
=
True
,
null
=
True
)
phone
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
)
address
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
null
=
True
)
network
=
models
.
TextField
(
blank
=
True
,
null
=
True
)
date_added
=
models
.
DateField
(
auto_now
=
True
,
default
=
datetime
.
datetime
.
now
())
operator
=
models
.
IntegerField
(
max_length
=
32
,
blank
=
True
,
null
=
True
)
comment
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
null
=
True
)
def
__unicode__
(
self
):
return
self
.
name
class
Asset
(
models
.
Model
):
"""
asset modle
"""
ENVIRONMENT
=
(
(
0
,
U'生产环境'
),
(
1
,
U'测试环境'
)
)
SERVER_STATUS
=
(
(
0
,
u"已使用"
),
(
1
,
u"未使用"
),
(
2
,
u"报废"
)
)
ASSET_TYPE
=
(
(
0
,
u"服务器"
),
(
2
,
u"网络设备"
),
(
3
,
u"其他"
)
)
ip
=
models
.
IPAddressField
(
unique
=
True
)
second_ip
=
models
.
CharField
(
max_length
=
255
,
blank
=
True
,
null
=
True
)
hostname
=
models
.
CharField
(
max_length
=
64
,
blank
=
True
,
null
=
True
)
port
=
models
.
IntegerField
(
max_length
=
6
)
group
=
models
.
ManyToManyField
(
AssetGroup
,
blank
=
True
,
null
=
True
)
username
=
models
.
CharField
(
max_length
=
16
,
blank
=
True
,
null
=
True
)
password
=
models
.
CharField
(
max_length
=
64
,
blank
=
True
,
null
=
True
)
use_default_auth
=
models
.
BooleanField
(
default
=
True
)
idc
=
models
.
ForeignKey
(
IDC
,
blank
=
True
,
null
=
True
,
on_delete
=
models
.
SET_NULL
)
mac
=
models
.
CharField
(
max_length
=
20
,
blank
=
True
,
null
=
True
)
remote_ip
=
models
.
IPAddressField
(
unique
=
True
,
blank
=
True
,
null
=
True
)
brand
=
models
.
CharField
(
max_length
=
64
,
blank
=
True
,
null
=
True
)
cpu
=
models
.
CharField
(
max_length
=
64
,
blank
=
True
,
null
=
True
)
memory
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
null
=
True
)
disk
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
null
=
True
)
system_type
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
)
system_version
=
models
.
CharField
(
max_length
=
8
,
blank
=
True
,
null
=
True
)
cabinet
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
)
position
=
models
.
IntegerField
(
max_length
=
2
,
blank
=
True
,
null
=
True
)
number
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
)
status
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
SERVER_STATUS
,
default
=
1
)
asset_type
=
models
.
IntegerField
(
max_length
=
2
,
choices
=
ASSET_TYPE
,
blank
=
True
,
null
=
True
)
env
=
models
.
CharField
(
max_length
=
32
,
choices
=
ENVIRONMENT
,
blank
=
True
,
null
=
True
)
sn
=
models
.
CharField
(
max_length
=
32
,
blank
=
True
,
null
=
True
)
date_added
=
models
.
DateTimeField
(
auto_now
=
True
,
default
=
datetime
.
datetime
.
now
())
is_active
=
models
.
BooleanField
(
default
=
True
)
comment
=
models
.
CharField
(
max_length
=
128
,
blank
=
True
,
null
=
True
)
def
__unicode__
(
self
):
return
self
.
ip
def
get_user
(
self
):
perm_list
=
[]
asset_group_all
=
self
.
bis_group
.
all
()
for
asset_group
in
asset_group_all
:
perm_list
.
extend
(
asset_group
.
perm_set
.
all
())
user_group_list
=
[]
for
perm
in
perm_list
:
user_group_list
.
append
(
perm
.
user_group
)
user_permed_list
=
[]
for
user_group
in
user_group_list
:
user_permed_list
.
extend
(
user_group
.
user_set
.
all
())
user_permed_list
=
list
(
set
(
user_permed_list
))
return
user_permed_list
class
AssetAlias
(
models
.
Model
):
user
=
models
.
ForeignKey
(
User
)
asset
=
models
.
ForeignKey
(
Asset
)
alias
=
models
.
CharField
(
max_length
=
100
,
null
=
True
)
def
__unicode__
(
self
):
return
self
.
alias
This diff is collapsed.
Click to expand it.
jasset/urls.py
View file @
0f29745b
...
@@ -4,15 +4,14 @@ from jasset.views import *
...
@@ -4,15 +4,14 @@ from jasset.views import *
urlpatterns
=
patterns
(
''
,
urlpatterns
=
patterns
(
''
,
url
(
r'^asset_add/$'
,
asset_add
),
url
(
r'^asset_add/$'
,
asset_add
),
# url(r"^host_add_multi/$", hos
t_add_batch),
url
(
r"^asset_add_batch/$"
,
asse
t_add_batch
),
url
(
r'^group_del/$'
,
group_del
),
url
(
r'^group_del/$'
,
group_del
),
url
(
r'^asset_list/$'
,
asset_list
),
url
(
r'^asset_list/$'
,
asset_list
),
url
(
r'^asset_del/$'
,
asset_del
),
url
(
r'^asset_del/$'
,
asset_del
),
url
(
r"^asset_detail/$"
,
asset_detail
),
url
(
r"^asset_detail/$"
,
asset_detail
),
url
(
r'^asset_edit/$'
,
asset_edit
),
url
(
r'^asset_edit/$'
,
asset_edit
),
url
(
r'^asset_update/$'
,
asset_update
),
# url(r'^search/$', host_search),
# url(r'^search/$', host_search),
# url(r"^host_detail/$", host_detail),
# url(r"^dept_host_ajax/$", dept_host_ajax),
# url(r"^show_all_ajax/$", show_all_ajax),
# url(r"^show_all_ajax/$", show_all_ajax),
url
(
r'^group_add/$'
,
group_add
),
url
(
r'^group_add/$'
,
group_add
),
url
(
r'^group_list/$'
,
group_list
),
url
(
r'^group_list/$'
,
group_list
),
...
@@ -27,4 +26,5 @@ urlpatterns = patterns('',
...
@@ -27,4 +26,5 @@ urlpatterns = patterns('',
url
(
r'^idc_detail/$'
,
idc_detail
),
url
(
r'^idc_detail/$'
,
idc_detail
),
url
(
r'^idc_edit/$'
,
idc_edit
),
url
(
r'^idc_edit/$'
,
idc_edit
),
url
(
r'^idc_del/$'
,
idc_del
),
url
(
r'^idc_del/$'
,
idc_del
),
url
(
r'^upload/$'
,
asset_upload
),
)
)
\ No newline at end of file
This diff is collapsed.
Click to expand it.
jasset/views.py
View file @
0f29745b
# coding:utf-8
# coding:utf-8
import
ast
import
ast
from
django.db.models
import
Q
from
django.db.models
import
Q
from
django.shortcuts
import
get_object_or_404
from
django.shortcuts
import
get_object_or_404
from
jasset.asset_api
import
*
from
jasset.asset_api
import
*
from
jumpserver.api
import
*
from
jumpserver.api
import
*
from
jasset.forms
import
AssetForm
,
IdcForm
from
jasset.forms
import
AssetForm
,
IdcForm
from
jasset.models
import
Asset
,
IDC
,
AssetGroup
,
ASSET_TYPE
,
ASSET_STATUS
from
jasset.models
import
Asset
,
IDC
,
AssetGroup
,
ASSET_TYPE
,
ASSET_STATUS
from
ansible_api
import
Tasks
@require_role
(
'admin'
)
@require_role
(
'admin'
)
...
@@ -175,6 +174,12 @@ def asset_add(request):
...
@@ -175,6 +174,12 @@ def asset_add(request):
return
my_render
(
'jasset/asset_add.html'
,
locals
(),
request
)
return
my_render
(
'jasset/asset_add.html'
,
locals
(),
request
)
@require_role
(
'admin'
)
def
asset_add_batch
(
request
):
header_title
,
path1
,
path2
=
u'添加资产'
,
u'资产管理'
,
u'批量添加'
return
my_render
(
'jasset/asset_add_batch.html'
,
locals
(),
request
)
@require_role
(
'admin'
)
@require_role
(
'admin'
)
def
asset_del
(
request
):
def
asset_del
(
request
):
"""
"""
...
@@ -207,8 +212,6 @@ def asset_edit(request):
...
@@ -207,8 +212,6 @@ def asset_edit(request):
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
username
=
request
.
session
.
get
(
'username'
,
'admin'
)
username
=
request
.
session
.
get
(
'username'
,
'admin'
)
# if not asset_id:
# return HttpResponse('没有该主机')
asset
=
get_object
(
Asset
,
id
=
asset_id
)
asset
=
get_object
(
Asset
,
id
=
asset_id
)
asset_old
=
copy_model_instance
(
asset
)
asset_old
=
copy_model_instance
(
asset
)
af
=
AssetForm
(
instance
=
asset
)
af
=
AssetForm
(
instance
=
asset
)
...
@@ -231,8 +234,8 @@ def asset_edit(request):
...
@@ -231,8 +234,8 @@ def asset_edit(request):
af_save
.
password
=
''
af_save
.
password
=
''
af_save
.
save
()
af_save
.
save
()
af_post
.
save_m2m
()
af_post
.
save_m2m
()
asset_new
=
get_object
(
Asset
,
id
=
asset_id
)
#
asset_new = get_object(Asset, id=asset_id)
asset_diff_one
(
asset_old
,
asset_new
)
#
asset_diff_one(asset_old, asset_new)
info
=
asset_diff
(
af_post
.
__dict__
.
get
(
'initial'
),
request
.
POST
)
info
=
asset_diff
(
af_post
.
__dict__
.
get
(
'initial'
),
request
.
POST
)
db_asset_alert
(
asset
,
username
,
info
)
db_asset_alert
(
asset
,
username
,
info
)
...
@@ -306,7 +309,7 @@ def asset_edit_batch(request):
...
@@ -306,7 +309,7 @@ def asset_edit_batch(request):
@require_role
(
'admin'
)
@require_role
(
'admin'
)
def
asset_detail
(
request
):
def
asset_detail
(
request
):
"""
"""
主机详情
Asset detail view
"""
"""
header_title
,
path1
,
path2
=
u'主机详细信息'
,
u'资产管理'
,
u'主机详情'
header_title
,
path1
,
path2
=
u'主机详细信息'
,
u'资产管理'
,
u'主机详情'
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
...
@@ -316,6 +319,53 @@ def asset_detail(request):
...
@@ -316,6 +319,53 @@ def asset_detail(request):
return
my_render
(
'jasset/asset_detail.html'
,
locals
(),
request
)
return
my_render
(
'jasset/asset_detail.html'
,
locals
(),
request
)
@require_role
(
'admin'
)
def
asset_update
(
request
):
"""
Asset update host info via ansible view
"""
asset_id
=
request
.
GET
.
get
(
'id'
,
''
)
asset
=
get_object
(
Asset
,
id
=
asset_id
)
if
not
asset
:
return
HttpResponseRedirect
(
'/jasset/asset_detail/?id=
%
s'
%
asset_id
)
name
=
request
.
session
.
get
(
'username'
,
'admin'
)
if
asset
.
use_default_auth
:
username
=
'root'
password
=
'123456'
else
:
username
=
asset
.
username
password
=
asset
.
password
resource
=
[{
"hostname"
:
asset
.
ip
,
"port"
:
asset
.
port
,
"username"
:
username
,
"password"
:
password
}]
ansible_instance
=
Tasks
(
resource
)
ansible_asset_info
=
ansible_instance
.
get_host_info
()
if
ansible_asset_info
[
'status'
]
==
'ok'
:
asset_info
=
ansible_asset_info
[
'result'
][
asset
.
ip
]
if
asset_info
:
hostname
=
asset_info
.
get
(
'hostname'
)
other_ip
=
','
.
join
(
asset_info
.
get
(
'other_ip'
))
cpu_type
=
asset_info
.
get
(
'cpu_type'
)[
1
]
cpu_cores
=
asset_info
.
get
(
'cpu_cores'
)
cpu
=
cpu_type
+
' * '
+
unicode
(
cpu_cores
)
memory
=
asset_info
.
get
(
'memory'
)
disk
=
asset_info
.
get
(
'disk'
)
sn
=
asset_info
.
get
(
'sn'
)
brand
=
asset_info
.
get
(
'brand'
)
system_type
=
asset_info
.
get
(
'system_type'
)
system_version
=
asset_info
.
get
(
'system_version'
)
asset_dic
=
{
"hostname"
:
hostname
,
"other_ip"
:
other_ip
,
"cpu"
:
cpu
,
"memory"
:
memory
,
"disk"
:
disk
,
"system_type"
:
system_type
,
"system_version"
:
system_version
,
"brand"
:
brand
,
"sn"
:
sn
}
ansible_record
(
asset
,
asset_dic
,
name
)
return
HttpResponseRedirect
(
'/jasset/asset_detail/?id=
%
s'
%
asset_id
)
@require_role
(
'admin'
)
@require_role
(
'admin'
)
def
idc_add
(
request
):
def
idc_add
(
request
):
"""
"""
...
@@ -343,6 +393,9 @@ def idc_add(request):
...
@@ -343,6 +393,9 @@ def idc_add(request):
@require_role
(
'admin'
)
@require_role
(
'admin'
)
def
idc_list
(
request
):
def
idc_list
(
request
):
"""
IDC list view
"""
header_title
,
path1
,
path2
=
u'查看IDC'
,
u'资产管理'
,
u'查看IDC'
header_title
,
path1
,
path2
=
u'查看IDC'
,
u'资产管理'
,
u'查看IDC'
posts
=
IDC
.
objects
.
all
()
posts
=
IDC
.
objects
.
all
()
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
keyword
=
request
.
GET
.
get
(
'keyword'
,
''
)
...
@@ -358,6 +411,10 @@ def idc_list(request):
...
@@ -358,6 +411,10 @@ def idc_list(request):
@require_role
(
'admin'
)
@require_role
(
'admin'
)
def
idc_edit
(
request
):
def
idc_edit
(
request
):
"""
IDC edit view
"""
header_title
,
path1
,
path2
=
u'编辑IDC'
,
u'资产管理'
,
u'编辑IDC'
idc_id
=
request
.
GET
.
get
(
'id'
,
''
)
idc_id
=
request
.
GET
.
get
(
'id'
,
''
)
idc
=
get_object
(
IDC
,
id
=
idc_id
)
idc
=
get_object
(
IDC
,
id
=
idc_id
)
if
request
.
method
==
'POST'
:
if
request
.
method
==
'POST'
:
...
@@ -372,7 +429,9 @@ def idc_edit(request):
...
@@ -372,7 +429,9 @@ def idc_edit(request):
@require_role
(
'admin'
)
@require_role
(
'admin'
)
def
idc_detail
(
request
):
def
idc_detail
(
request
):
""" IDC详情 """
"""
IDC detail view
"""
header_title
,
path1
,
path2
=
u'IDC详情'
,
u'资产管理'
,
u'IDC详情'
header_title
,
path1
,
path2
=
u'IDC详情'
,
u'资产管理'
,
u'IDC详情'
idc_id
=
request
.
GET
.
get
(
'id'
,
''
)
idc_id
=
request
.
GET
.
get
(
'id'
,
''
)
idc
=
get_object
(
IDC
,
id
=
idc_id
)
idc
=
get_object
(
IDC
,
id
=
idc_id
)
...
@@ -384,7 +443,25 @@ def idc_detail(request):
...
@@ -384,7 +443,25 @@ def idc_detail(request):
@require_role
(
'admin'
)
@require_role
(
'admin'
)
def
idc_del
(
request
):
def
idc_del
(
request
):
"""
IDC delete view
"""
uuid
=
request
.
GET
.
get
(
'uuid'
,
''
)
uuid
=
request
.
GET
.
get
(
'uuid'
,
''
)
idc
=
get_object_or_404
(
IDC
,
uuid
=
uuid
)
idc
=
get_object_or_404
(
IDC
,
uuid
=
uuid
)
idc
.
delete
()
idc
.
delete
()
return
HttpResponseRedirect
(
'/jasset/idc_list/'
)
return
HttpResponseRedirect
(
'/jasset/idc_list/'
)
@require_role
(
'admin'
)
def
asset_upload
(
request
):
"""
Upload file view
"""
if
request
.
method
==
'POST'
:
excel_file
=
request
.
FILES
.
get
(
'file_name'
,
''
)
ret
=
excel_to_db
(
excel_file
)
if
ret
:
smg
=
u'批量添加成功'
else
:
emg
=
u'批量添加失败,请检查格式.'
return
my_render
(
'jasset/asset_add_batch.html'
,
locals
(),
request
)
This diff is collapsed.
Click to expand it.
jumpserver/templatetags/mytags.py
View file @
0f29745b
...
@@ -415,12 +415,29 @@ def str_to_list(info):
...
@@ -415,12 +415,29 @@ def str_to_list(info):
"""
"""
str to list
str to list
"""
"""
print
ast
.
literal_eval
(
info
),
type
(
ast
.
literal_eval
(
info
))
return
ast
.
literal_eval
(
info
)
return
ast
.
literal_eval
(
info
)
@register.filter
(
name
=
'str_to_dic'
)
def
str_to_dic
(
info
):
"""
str to list
"""
return
ast
.
literal_eval
(
info
)
.
iteritems
()
@register.filter
(
name
=
'str_to_code'
)
@register.filter
(
name
=
'str_to_code'
)
def
str_to_code
(
char_str
):
def
str_to_code
(
char_str
):
if
char_str
:
if
char_str
:
return
char_str
return
char_str
else
:
else
:
return
u'空'
return
u'空'
@register.filter
(
name
=
'ip_str_to_list'
)
def
ip_str_to_list
(
ip_str
):
"""
ip str to list
"""
return
ip_str
.
split
(
','
)
This diff is collapsed.
Click to expand it.
templates/jasset/asset_add.html
View file @
0f29745b
...
@@ -27,7 +27,7 @@
...
@@ -27,7 +27,7 @@
<div
class=
"panel-options"
>
<div
class=
"panel-options"
>
<ul
class=
"nav nav-tabs"
>
<ul
class=
"nav nav-tabs"
>
<li
class=
"active"
><a
href=
"/jasset/asset_add/"
class=
"text-center"
><i
class=
"fa fa-laptop"
></i>
单台添加
</a></li>
<li
class=
"active"
><a
href=
"/jasset/asset_add/"
class=
"text-center"
><i
class=
"fa fa-laptop"
></i>
单台添加
</a></li>
<li><a
href=
"/jasset/
host_add_multi
"
class=
"text-center"
><i
class=
"fa fa-bar-chart-o"
></i>
批量添加
</a></li>
<li><a
href=
"/jasset/
asset_add_batch
"
class=
"text-center"
><i
class=
"fa fa-bar-chart-o"
></i>
批量添加
</a></li>
</ul>
</ul>
</div>
</div>
<div
class=
"panel-body"
>
<div
class=
"panel-body"
>
...
...
This diff is collapsed.
Click to expand it.
templates/jasset/asset_add_batch.html
0 → 100644
View file @
0f29745b
{% extends 'base.html' %}
{% block content %}
{% include 'nav_cat_bar.html' %}
<style>
.file-box
{
position
:
relative
;
width
:
340px
}
.txt
{
height
:
22px
;
border
:
1px
solid
#cdcdcd
;
width
:
180px
;}
.file
{
position
:
absolute
;
top
:
0
;
right
:
80px
;
height
:
24px
;
filter
:
alpha
(
opacity
:
0
);
opacity
:
0
;
width
:
260px
}
</style>
<div
class=
"wrapper wrapper-content animated fadeInRight"
>
<div
class=
"row"
>
<div
class=
"col-lg-10"
>
<div
class=
"ibox float-e-margins"
>
<div
id=
"ibox-content"
class=
"ibox-title"
>
<h5>
填写主机基本信息
</h5>
<div
class=
"ibox-tools"
>
<a
class=
"collapse-link"
>
<i
class=
"fa fa-chevron-up"
></i>
</a>
<a
class=
"dropdown-toggle"
data-toggle=
"dropdown"
href=
"#"
>
<i
class=
"fa fa-wrench"
></i>
</a>
<ul
class=
"dropdown-menu dropdown-user"
>
</ul>
<a
class=
"close-link"
>
<i
class=
"fa fa-times"
></i>
</a>
</div>
</div>
<div
class=
"ibox-content"
>
<div
class=
"panel blank-panel"
>
<div
class=
"panel-options"
>
<ul
class=
"nav nav-tabs"
>
<li><a
href=
"/jasset/asset_add/"
class=
"text-center"
><i
class=
"fa fa-laptop"
></i>
单台添加
</a></li>
<li
class=
"active"
><a
href=
"/jasset/asset_add_batch/"
class=
"text-center"
><i
class=
"fa fa-bar-chart-o"
></i>
批量添加
</a></li>
</ul>
</div>
<div
class=
"panel-body"
>
<div
id=
"tab-2"
class=
"ibox float-e-margins tab-pane active"
>
{% if emg %}
<div
class=
"alert alert-warning text-center"
>
{{ emg }}
</div>
{% endif %}
{% if smg %}
<div
class=
"alert alert-success text-center"
>
{{ smg }}
</div>
{% endif %}
<p>
请下载Excel文件, 按照格式填写主机信息, 上传导入.
<a
href=
"/static/files/excels/asset.xlsx"
>
点击下载模板
</a></p>
<form
action=
"/jasset/upload/"
method=
"POST"
enctype=
"multipart/form-data"
>
<div
class=
"file-box"
>
<input
id=
'textfield'
/>
<input
type=
"button"
class=
"btn btn-info btn-sm"
name=
"file_name"
value=
"点击选择文件"
>
<input
type=
"file"
name=
"file_name"
class=
"file"
id=
"fileField"
size=
"28"
onchange=
"document.getElementById('textfield').value=this.value"
/>
<button
class=
"btn btn-primary btn-sm"
type=
"submit"
>
上传文件
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
\ No newline at end of file
This diff is collapsed.
Click to expand it.
templates/jasset/asset_detail.html
View file @
0f29745b
...
@@ -37,6 +37,20 @@
...
@@ -37,6 +37,20 @@
<td
class=
"text-navy"
>
主机名
</td>
<td
class=
"text-navy"
>
主机名
</td>
<td>
{{ asset.hostname }}
</td>
<td>
{{ asset.hostname }}
</td>
</tr>
</tr>
<tr>
<td
class=
"text-navy"
>
其他IP
</td>
<td>
<table
class=
"table"
>
{% if asset.other_ip %}
{% for ip in asset.other_ip|ip_str_to_list %}
<tr>
<td>
{{ ip }}
</td>
</tr>
{% endfor %}
{% endif %}
</table>
</td>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
远控IP
</td>
<td
class=
"text-navy"
>
远控IP
</td>
<td>
{{ asset.remote_ip }}
</td>
<td>
{{ asset.remote_ip }}
</td>
...
@@ -77,11 +91,21 @@
...
@@ -77,11 +91,21 @@
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
内存
</td>
<td
class=
"text-navy"
>
内存
</td>
<td>
{{ asset.memory }}
</td>
<td>
{{ asset.memory }}
M
</td>
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
硬盘
</td>
<td
class=
"text-navy"
>
硬盘
</td>
<td>
{{ asset.disk }}
</td>
<td>
<table
class=
"table"
>
{% if asset.disk %}
{% for disk, value in asset.disk|str_to_dic %}
<tr>
<td><span
class=
"text-navy"
>
{{ disk }}
</span>
&
nbsp
&
nbsp
&
nbsp {{ value }}
</td>
</tr>
{% endfor %}
{% endif %}
</table>
</td>
</tr>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
资产编号
</td>
<td
class=
"text-navy"
>
资产编号
</td>
...
@@ -95,6 +119,10 @@
...
@@ -95,6 +119,10 @@
<td
class=
"text-navy"
>
主机类型
</td>
<td
class=
"text-navy"
>
主机类型
</td>
<td>
{{ asset.get_asset_type_display }}
</td>
<td>
{{ asset.get_asset_type_display }}
</td>
</tr>
</tr>
<tr>
<td
class=
"text-navy"
>
系统版本
</td>
<td>
{{ asset.system_type }} {{ asset.system_version }}
</td>
</tr>
<tr>
<tr>
<td
class=
"text-navy"
>
运行环境
</td>
<td
class=
"text-navy"
>
运行环境
</td>
<td>
{{ asset.get_env_display }}
</td>
<td>
{{ asset.get_env_display }}
</td>
...
...
This diff is collapsed.
Click to expand it.
templates/jasset/asset_list.html
View file @
0f29745b
...
@@ -107,7 +107,8 @@
...
@@ -107,7 +107,8 @@
<th
class=
"text-center"
>
主机名
</th>
<th
class=
"text-center"
>
主机名
</th>
<th
class=
"text-center"
>
IDC
</th>
<th
class=
"text-center"
>
IDC
</th>
<th
class=
"text-center"
>
所属主机组
</th>
<th
class=
"text-center"
>
所属主机组
</th>
<th
class=
"text-center"
>
配置信息
</th>
{#
<th
class=
"text-center"
>
配置信息
</th>
#}
<th
class=
"text-center"
>
操作系统
</th>
<th
class=
"text-center"
>
使用默认管理
</th>
<th
class=
"text-center"
>
使用默认管理
</th>
<th
class=
"text-center"
>
操作
</th>
<th
class=
"text-center"
>
操作
</th>
</tr>
</tr>
...
@@ -122,12 +123,14 @@
...
@@ -122,12 +123,14 @@
<td
class=
"text-center"
>
{{ asset.hostname }}
</td>
<td
class=
"text-center"
>
{{ asset.hostname }}
</td>
<td
class=
"text-center"
>
{{ asset.idc.name }}
</td>
<td
class=
"text-center"
>
{{ asset.idc.name }}
</td>
<td
class=
"text-center"
>
{{ asset.group.all|group_str2 }}
</td>
<td
class=
"text-center"
>
{{ asset.group.all|group_str2 }}
</td>
<td
class=
"text-center"
>
{{ asset.cpu }}|{{ asset.memory }}|{{ asset.disk }}
</td>
{#
<td
class=
"text-center"
>
{{ asset.cpu }}|{{ asset.memory }}|{{ asset.disk }}
</td>
#}
<td
class=
"text-center"
>
{{ asset.system_type }}{{ asset.system_version }}
</td>
<td
class=
"text-center"
>
{{ asset.use_default_auth|bool2str }}
</td>
<td
class=
"text-center"
>
{{ asset.use_default_auth|bool2str }}
</td>
<td
class=
"text-center"
data-editable=
'false'
>
<td
class=
"text-center"
data-editable=
'false'
>
<a
href=
"/jasset/asset_detail/?id={{ asset.id }}"
class=
"btn btn-xs btn-primary"
>
详情
</a>
<a
href=
"/jasset/asset_detail/?id={{ asset.id }}"
class=
"btn btn-xs btn-primary"
>
详情
</a>
{% ifnotequal session_role_id 0 %}
{% ifnotequal session_role_id 0 %}
<a
href=
"/jasset/asset_edit/?id={{ asset.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/asset_edit/?id={{ asset.id }}"
class=
"btn btn-xs btn-info"
>
编辑
</a>
<a
href=
"/jasset/asset_update/?id={{ asset.id }}"
class=
"btn btn-xs btn-info"
>
更新
</a>
<a
value=
"/jasset/asset_del/?id={{ asset.id }}"
class=
"btn btn-xs btn-danger asset_del"
>
删除
</a>
<a
value=
"/jasset/asset_del/?id={{ asset.id }}"
class=
"btn btn-xs btn-danger asset_del"
>
删除
</a>
{% endifnotequal %}
{% endifnotequal %}
</td>
</td>
...
...
This diff is collapsed.
Click to expand it.
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