mirror of https://github.com/jumpserver/jumpserver
Merge branch 'dev' of git.coding.net:jumpserver/jumpserver into dev
commit
104ee779e7
|
@ -1,4 +1,5 @@
|
||||||
# coding: utf-8
|
# coding: utf-8
|
||||||
|
from __future__ import division
|
||||||
import xlrd
|
import xlrd
|
||||||
import xlsxwriter
|
import xlsxwriter
|
||||||
from django.db.models import AutoField
|
from django.db.models import AutoField
|
||||||
|
@ -75,83 +76,6 @@ def db_asset_update(**kwargs):
|
||||||
Asset.objects.filter(id=asset_id).update(**kwargs)
|
Asset.objects.filter(id=asset_id).update(**kwargs)
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# def batch_host_edit(host_alter_dic, j_user='', j_password=''):
|
|
||||||
# """ 批量修改主机函数 """
|
|
||||||
# j_id, j_ip, j_idc, j_port, j_type, j_group, j_dept, j_active, j_comment = host_alter_dic
|
|
||||||
# groups, depts = [], []
|
|
||||||
# is_active = {u'是': '1', u'否': '2'}
|
|
||||||
# login_types = {'LDAP': 'L', 'MAP': 'M'}
|
|
||||||
# a = Asset.objects.get(id=j_id)
|
|
||||||
# if '...' in j_group[0].split():
|
|
||||||
# groups = a.bis_group.all()
|
|
||||||
# else:
|
|
||||||
# for group in j_group[0].split():
|
|
||||||
# c = BisGroup.objects.get(name=group.strip())
|
|
||||||
# groups.append(c)
|
|
||||||
#
|
|
||||||
# if '...' in j_dept[0].split():
|
|
||||||
# depts = a.dept.all()
|
|
||||||
# else:
|
|
||||||
# for d in j_dept[0].split():
|
|
||||||
# p = DEPT.objects.get(name=d.strip())
|
|
||||||
# depts.append(p)
|
|
||||||
#
|
|
||||||
# j_type = login_types[j_type]
|
|
||||||
# j_idc = IDC.objects.get(name=j_idc)
|
|
||||||
# if j_type == 'M':
|
|
||||||
# if a.password != j_password:
|
|
||||||
# j_password = cryptor.decrypt(j_password)
|
|
||||||
# a.ip = j_ip
|
|
||||||
# a.port = j_port
|
|
||||||
# a.login_type = j_type
|
|
||||||
# a.idc = j_idc
|
|
||||||
# a.is_active = j_active
|
|
||||||
# a.comment = j_comment
|
|
||||||
# a.username = j_user
|
|
||||||
# a.password = j_password
|
|
||||||
# else:
|
|
||||||
# a.ip = j_ip
|
|
||||||
# a.port = j_port
|
|
||||||
# a.idc = j_idc
|
|
||||||
# a.login_type = j_type
|
|
||||||
# a.is_active = is_active[j_active]
|
|
||||||
# a.comment = j_comment
|
|
||||||
# a.save()
|
|
||||||
# a.bis_group = groups
|
|
||||||
# a.dept = depts
|
|
||||||
# a.save()
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# def db_host_delete(request, host_id):
|
|
||||||
# """ 删除主机操作 """
|
|
||||||
# if is_group_admin(request) and not validate(request, asset=[host_id]):
|
|
||||||
# return httperror(request, '删除失败, 您无权删除!')
|
|
||||||
#
|
|
||||||
# asset = Asset.objects.filter(id=host_id)
|
|
||||||
# if asset:
|
|
||||||
# asset.delete()
|
|
||||||
# else:
|
|
||||||
# return httperror(request, '删除失败, 没有此主机!')
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# def db_idc_delete(request, idc_id):
|
|
||||||
# """ 删除IDC操作 """
|
|
||||||
# if idc_id == 1:
|
|
||||||
# return httperror(request, '删除失败, 默认IDC不能删除!')
|
|
||||||
#
|
|
||||||
# default_idc = IDC.objects.get(id=1)
|
|
||||||
#
|
|
||||||
# idc = IDC.objects.filter(id=idc_id)
|
|
||||||
# if idc:
|
|
||||||
# idc_class = idc[0]
|
|
||||||
# idc_class.asset_set.update(idc=default_idc)
|
|
||||||
# idc.delete()
|
|
||||||
# else:
|
|
||||||
# return httperror(request, '删除失败, 没有这个IDC!')
|
|
||||||
|
|
||||||
|
|
||||||
def sort_ip_list(ip_list):
|
def sort_ip_list(ip_list):
|
||||||
""" ip地址排序 """
|
""" ip地址排序 """
|
||||||
ip_list.sort(key=lambda s: map(int, s.split('.')))
|
ip_list.sort(key=lambda s: map(int, s.split('.')))
|
||||||
|
@ -389,7 +313,6 @@ def get_ansible_asset_info(asset_ip, setup_info):
|
||||||
for disk_name, disk_info in disk_all.iteritems():
|
for disk_name, disk_info in disk_all.iteritems():
|
||||||
if disk_name.startswith('sd') or disk_name.startswith('hd') or disk_name.startswith('vd'):
|
if disk_name.startswith('sd') or disk_name.startswith('hd') or disk_name.startswith('vd'):
|
||||||
disk_need[disk_name] = disk_info.get("size")
|
disk_need[disk_name] = disk_info.get("size")
|
||||||
|
|
||||||
all_ip = setup_info.get("ansible_all_ipv4_addresses")
|
all_ip = setup_info.get("ansible_all_ipv4_addresses")
|
||||||
other_ip_list = all_ip.remove(asset_ip) if asset_ip in all_ip else []
|
other_ip_list = all_ip.remove(asset_ip) if asset_ip in all_ip else []
|
||||||
other_ip = ','.join(other_ip_list) if other_ip_list else ''
|
other_ip = ','.join(other_ip_list) if other_ip_list else ''
|
||||||
|
@ -401,12 +324,17 @@ def get_ansible_asset_info(asset_ip, setup_info):
|
||||||
cpu_cores = setup_info.get("ansible_processor_count")
|
cpu_cores = setup_info.get("ansible_processor_count")
|
||||||
cpu = cpu_type + ' * ' + unicode(cpu_cores)
|
cpu = cpu_type + ' * ' + unicode(cpu_cores)
|
||||||
memory = setup_info.get("ansible_memtotal_mb")
|
memory = setup_info.get("ansible_memtotal_mb")
|
||||||
|
try:
|
||||||
|
memory_format = round((int(memory) / 1000), 1)
|
||||||
|
except Exception:
|
||||||
|
memory_format = memory
|
||||||
disk = disk_need
|
disk = disk_need
|
||||||
system_type = setup_info.get("ansible_distribution")
|
system_type = setup_info.get("ansible_distribution")
|
||||||
system_version = setup_info.get("ansible_distribution_version")
|
system_version = setup_info.get("ansible_distribution_version")
|
||||||
|
system_arch = setup_info.get("ansible_architecture")
|
||||||
# asset_type = setup_info.get("ansible_system")
|
# asset_type = setup_info.get("ansible_system")
|
||||||
sn = setup_info.get("ansible_product_serial")
|
sn = setup_info.get("ansible_product_serial")
|
||||||
asset_info = [other_ip, mac, cpu, memory, disk, sn, system_type, system_version, brand]
|
asset_info = [other_ip, mac, cpu, memory_format, disk, sn, system_type, system_version, brand, system_arch]
|
||||||
|
|
||||||
return asset_info
|
return asset_info
|
||||||
|
|
||||||
|
@ -422,7 +350,7 @@ def asset_ansible_update(obj_list, name=''):
|
||||||
continue
|
continue
|
||||||
else:
|
else:
|
||||||
asset_info = get_ansible_asset_info(asset.ip, setup_info)
|
asset_info = get_ansible_asset_info(asset.ip, setup_info)
|
||||||
other_ip, mac, cpu, memory, disk, sn, system_type, system_version, brand = asset_info
|
other_ip, mac, cpu, memory, disk, sn, system_type, system_version, brand, system_arch = asset_info
|
||||||
asset_dic = {"other_ip": other_ip,
|
asset_dic = {"other_ip": other_ip,
|
||||||
"mac": mac,
|
"mac": mac,
|
||||||
"cpu": cpu,
|
"cpu": cpu,
|
||||||
|
@ -431,6 +359,7 @@ def asset_ansible_update(obj_list, name=''):
|
||||||
"sn": sn,
|
"sn": sn,
|
||||||
"system_type": system_type,
|
"system_type": system_type,
|
||||||
"system_version": system_version,
|
"system_version": system_version,
|
||||||
|
"system_arch": system_arch,
|
||||||
"brand": brand
|
"brand": brand
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,8 @@ class AssetForm(forms.ModelForm):
|
||||||
fields = [
|
fields = [
|
||||||
"ip", "other_ip", "hostname", "port", "group", "username", "password", "use_default_auth",
|
"ip", "other_ip", "hostname", "port", "group", "username", "password", "use_default_auth",
|
||||||
"idc", "mac", "remote_ip", "brand", "cpu", "memory", "disk", "system_type", "system_version",
|
"idc", "mac", "remote_ip", "brand", "cpu", "memory", "disk", "system_type", "system_version",
|
||||||
"cabinet", "position", "number", "status", "asset_type", "env", "sn", "is_active", "comment"
|
"cabinet", "position", "number", "status", "asset_type", "env", "sn", "is_active", "comment",
|
||||||
|
"system_arch"
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -78,6 +78,7 @@ class Asset(models.Model):
|
||||||
disk = models.CharField(max_length=128, blank=True, null=True, verbose_name=u'硬盘')
|
disk = models.CharField(max_length=128, blank=True, null=True, verbose_name=u'硬盘')
|
||||||
system_type = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"系统类型")
|
system_type = models.CharField(max_length=32, blank=True, null=True, verbose_name=u"系统类型")
|
||||||
system_version = models.CharField(max_length=8, blank=True, null=True, verbose_name=u"系统版本号")
|
system_version = models.CharField(max_length=8, blank=True, null=True, verbose_name=u"系统版本号")
|
||||||
|
system_arch = models.CharField(max_length=16, blank=True, null=True, verbose_name=u"系统平台")
|
||||||
cabinet = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'机柜号')
|
cabinet = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'机柜号')
|
||||||
position = models.IntegerField(blank=True, null=True, verbose_name=u'机器位置')
|
position = models.IntegerField(blank=True, null=True, verbose_name=u'机器位置')
|
||||||
number = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'资产编号')
|
number = models.CharField(max_length=32, blank=True, null=True, verbose_name=u'资产编号')
|
||||||
|
|
|
@ -272,3 +272,8 @@ def get_push_info(push_id, arg):
|
||||||
return [role.name for role in push.role.all()]
|
return [role.name for role in push.role.all()]
|
||||||
else:
|
else:
|
||||||
return []
|
return []
|
||||||
|
|
||||||
|
|
||||||
|
@register.filter(name='get_cpu_core')
|
||||||
|
def get_cpu_core(cpu_info):
|
||||||
|
return cpu_info.split('* ')[1] if cpu_info else ''
|
||||||
|
|
Binary file not shown.
|
@ -97,7 +97,7 @@
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-navy">内存</td>
|
<td class="text-navy">内存</td>
|
||||||
<td>{{ asset.memory|default_if_none:"" }}{% if asset.memory %}M{% endif %}</td>
|
<td>{{ asset.memory|default_if_none:"" }}{% if asset.memory %}G{% endif %}</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-navy">硬盘</td>
|
<td class="text-navy">硬盘</td>
|
||||||
|
@ -129,6 +129,10 @@
|
||||||
<td class="text-navy">系统版本</td>
|
<td class="text-navy">系统版本</td>
|
||||||
<td>{{ asset.system_type|default_if_none:"" }} {{ asset.system_version|default_if_none:"" }}</td>
|
<td>{{ asset.system_type|default_if_none:"" }} {{ asset.system_version|default_if_none:"" }}</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="text-navy">系统平台</td>
|
||||||
|
<td>{{ asset.system_arch|default_if_none:"" }}</td>
|
||||||
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td class="text-navy">运行环境</td>
|
<td class="text-navy">运行环境</td>
|
||||||
<td>{{ asset.get_env_display|default_if_none:"" }}</td>
|
<td>{{ asset.get_env_display|default_if_none:"" }}</td>
|
||||||
|
|
|
@ -105,6 +105,9 @@
|
||||||
<div class="hr-line-dashed"></div>
|
<div class="hr-line-dashed"></div>
|
||||||
{{ af.system_version|bootstrap_horizontal }}
|
{{ af.system_version|bootstrap_horizontal }}
|
||||||
|
|
||||||
|
<div class="hr-line-dashed"></div>
|
||||||
|
{{ af.system_arch|bootstrap_horizontal }}
|
||||||
|
|
||||||
<div class="hr-line-dashed"></div>
|
<div class="hr-line-dashed"></div>
|
||||||
{{ af.number|bootstrap_horizontal }}
|
{{ af.number|bootstrap_horizontal }}
|
||||||
|
|
||||||
|
|
|
@ -96,31 +96,6 @@
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{# <div class="col-sm-2">#}
|
|
||||||
|
|
||||||
{# </div>#}
|
|
||||||
{##}
|
|
||||||
{# <div class="col-sm-2">#}
|
|
||||||
|
|
||||||
{# </div>#}
|
|
||||||
{# <div class="col-sm-2">#}
|
|
||||||
|
|
||||||
{# </div>#}
|
|
||||||
{# <div class="col-sm-4">#}
|
|
||||||
{# <div class="input-group">#}
|
|
||||||
{# <input type="text" class="form-control m-b" id="search_input" name="keyword" value="{{ keyword }}" placeholder="Search">#}
|
|
||||||
{# <input type="text" style="display: none">#}
|
|
||||||
{# <div class="input-group-btn">#}
|
|
||||||
{# <button id='search_btn' href="/jasset/asset_list/?search=true" type="button" class="btn btn-xm btn-primary search-btn" onclick="change_info()">#}
|
|
||||||
{# - 搜索 -#}
|
|
||||||
{# </button>#}
|
|
||||||
{# <button type="button" href="/jasset/asset_list/?export=true" name="export" class="btn btn-xm btn-success search-btn-excel" onclick="return false">#}
|
|
||||||
{# - 导出 -#}
|
|
||||||
{# </button>#}
|
|
||||||
{# </div>#}
|
|
||||||
{# </div>#}
|
|
||||||
{# </div>#}
|
|
||||||
|
|
||||||
<div id="export"></div>
|
<div id="export"></div>
|
||||||
<table class="table table-striped table-bordered table-hover " id="editable" name="editable">
|
<table class="table table-striped table-bordered table-hover " id="editable" name="editable">
|
||||||
<thead>
|
<thead>
|
||||||
|
@ -134,7 +109,9 @@
|
||||||
<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"> cpu核数 </th>
|
||||||
|
<th class="text-center"> 内存 </th>
|
||||||
|
<th class="text-center"> 硬盘 </th>
|
||||||
<th class="text-center"> 操作 </th>
|
<th class="text-center"> 操作 </th>
|
||||||
</tr>
|
</tr>
|
||||||
</thead>
|
</thead>
|
||||||
|
@ -150,7 +127,9 @@
|
||||||
<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|default_if_none:"" }}{{ asset.system_version|default_if_none:"" }}</td>
|
<td class="text-center">{{ asset.system_type|default_if_none:"" }}{{ asset.system_version|default_if_none:"" }}</td>
|
||||||
<td class="text-center"> {{ asset.use_default_auth|bool2str }} </td>
|
<td class="text-center"> {{ asset.cpu|get_cpu_core }} </td>
|
||||||
|
<td class="text-center"> {{ asset.memory }}{% if asset.memory %}G{% endif %} </td>
|
||||||
|
<td class="text-center"> {{ asset.disk }} </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 %}
|
||||||
|
|
Loading…
Reference in New Issue