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
 | 
			
		||||
from __future__ import division
 | 
			
		||||
import xlrd
 | 
			
		||||
import xlsxwriter
 | 
			
		||||
from django.db.models import AutoField
 | 
			
		||||
| 
						 | 
				
			
			@ -75,83 +76,6 @@ def db_asset_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):
 | 
			
		||||
    """ ip地址排序 """
 | 
			
		||||
    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():
 | 
			
		||||
        if disk_name.startswith('sd') or disk_name.startswith('hd') or disk_name.startswith('vd'):
 | 
			
		||||
            disk_need[disk_name] = disk_info.get("size")
 | 
			
		||||
 | 
			
		||||
    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 = ','.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 = cpu_type + ' * ' + unicode(cpu_cores)
 | 
			
		||||
    memory = setup_info.get("ansible_memtotal_mb")
 | 
			
		||||
    try:
 | 
			
		||||
        memory_format = round((int(memory) / 1000), 1)
 | 
			
		||||
    except Exception:
 | 
			
		||||
        memory_format = memory
 | 
			
		||||
    disk = disk_need
 | 
			
		||||
    system_type = setup_info.get("ansible_distribution")
 | 
			
		||||
    system_version = setup_info.get("ansible_distribution_version")
 | 
			
		||||
    system_arch = setup_info.get("ansible_architecture")
 | 
			
		||||
    # asset_type = setup_info.get("ansible_system")
 | 
			
		||||
    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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -422,7 +350,7 @@ def asset_ansible_update(obj_list, name=''):
 | 
			
		|||
            continue
 | 
			
		||||
        else:
 | 
			
		||||
            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,
 | 
			
		||||
                         "mac": mac,
 | 
			
		||||
                         "cpu": cpu,
 | 
			
		||||
| 
						 | 
				
			
			@ -431,6 +359,7 @@ def asset_ansible_update(obj_list, name=''):
 | 
			
		|||
                         "sn": sn,
 | 
			
		||||
                         "system_type": system_type,
 | 
			
		||||
                         "system_version": system_version,
 | 
			
		||||
                         "system_arch": system_arch,
 | 
			
		||||
                         "brand": brand
 | 
			
		||||
                         }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,7 +12,8 @@ class AssetForm(forms.ModelForm):
 | 
			
		|||
        fields = [
 | 
			
		||||
            "ip", "other_ip", "hostname", "port", "group", "username", "password", "use_default_auth",
 | 
			
		||||
            "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'硬盘')
 | 
			
		||||
    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_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'机柜号')
 | 
			
		||||
    position = models.IntegerField(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()]
 | 
			
		||||
    else:
 | 
			
		||||
        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>
 | 
			
		||||
                                        <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>
 | 
			
		||||
                                        <td class="text-navy">硬盘</td>
 | 
			
		||||
| 
						 | 
				
			
			@ -129,6 +129,10 @@
 | 
			
		|||
                                        <td class="text-navy">系统版本</td>
 | 
			
		||||
                                        <td>{{ asset.system_type|default_if_none:"" }} {{ asset.system_version|default_if_none:"" }}</td>
 | 
			
		||||
                                    </tr>
 | 
			
		||||
                                    <tr>
 | 
			
		||||
                                        <td class="text-navy">系统平台</td>
 | 
			
		||||
                                        <td>{{ asset.system_arch|default_if_none:"" }}</td>
 | 
			
		||||
                                    </tr>
 | 
			
		||||
                                    <tr>
 | 
			
		||||
                                        <td class="text-navy">运行环境</td>
 | 
			
		||||
                                        <td>{{ asset.get_env_display|default_if_none:"" }}</td>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -105,6 +105,9 @@
 | 
			
		|||
                                        <div class="hr-line-dashed"></div>
 | 
			
		||||
                                        {{ af.system_version|bootstrap_horizontal }}
 | 
			
		||||
 | 
			
		||||
                                        <div class="hr-line-dashed"></div>
 | 
			
		||||
                                        {{ af.system_arch|bootstrap_horizontal }}
 | 
			
		||||
 | 
			
		||||
                                        <div class="hr-line-dashed"></div>
 | 
			
		||||
                                        {{ af.number|bootstrap_horizontal }}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -96,31 +96,6 @@
 | 
			
		|||
                                </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>
 | 
			
		||||
                        <table class="table table-striped table-bordered table-hover " id="editable" name="editable">
 | 
			
		||||
                            <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"> cpu核数 </th>
 | 
			
		||||
                                    <th class="text-center"> 内存 </th>
 | 
			
		||||
                                    <th class="text-center"> 硬盘 </th>
 | 
			
		||||
                                    <th class="text-center"> 操作 </th>
 | 
			
		||||
                                </tr>
 | 
			
		||||
                            </thead>
 | 
			
		||||
| 
						 | 
				
			
			@ -150,7 +127,9 @@
 | 
			
		|||
                                    <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.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'>
 | 
			
		||||
                                        <a href="/jasset/asset_detail/?id={{ asset.id }}" class="btn btn-xs btn-primary">详情</a>
 | 
			
		||||
                                        {% ifnotequal session_role_id 0 %}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue