mirror of https://github.com/jumpserver/jumpserver
				
				
				
			Merge branch 'dev' of git.coding.net:jumpserver/jumpserver into dev
						commit
						532646a431
					
				| 
						 | 
				
			
			@ -7,6 +7,7 @@ from jumpserver.api import *
 | 
			
		|||
from jasset.models import ASSET_STATUS, ASSET_TYPE, ASSET_ENV, IDC, AssetRecord
 | 
			
		||||
from jperm.ansible_api import MyRunner
 | 
			
		||||
from jperm.perm_api import gen_resource
 | 
			
		||||
from jumpserver.templatetags.mytags import get_disk_info
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def group_add_asset(group, asset_id=None, asset_ip=None):
 | 
			
		||||
| 
						 | 
				
			
			@ -156,7 +157,7 @@ def db_asset_alert(asset, username, alert_dic):
 | 
			
		|||
            for group_id in value[1]:
 | 
			
		||||
                group_name = AssetGroup.objects.get(id=int(group_id)).name
 | 
			
		||||
                new.append(group_name)
 | 
			
		||||
            if old == new:
 | 
			
		||||
            if sorted(old) == sorted(new):
 | 
			
		||||
                continue
 | 
			
		||||
            else:
 | 
			
		||||
                alert_info = [field_name, ','.join(old), ','.join(new)]
 | 
			
		||||
| 
						 | 
				
			
			@ -198,14 +199,17 @@ def write_excel(asset_all):
 | 
			
		|||
    workbook = xlsxwriter.Workbook('static/files/excels/%s' % file_name)
 | 
			
		||||
    worksheet = workbook.add_worksheet(u'CMDB数据')
 | 
			
		||||
    worksheet.set_first_sheet()
 | 
			
		||||
    worksheet.set_column('A:Z', 14)
 | 
			
		||||
    title = [u'主机名', u'IP', u'IDC', u'MAC', u'远控IP', u'CPU', u'内存', u'硬盘', u'操作系统', u'机柜位置',
 | 
			
		||||
             u'所属主机组', u'机器状态', u'备注']
 | 
			
		||||
    worksheet.set_column('A:E', 15)
 | 
			
		||||
    worksheet.set_column('F:F', 40)
 | 
			
		||||
    worksheet.set_column('G:Z', 15)
 | 
			
		||||
    title = [u'主机名', u'IP', u'IDC', u'所属主机组', u'操作系统', u'CPU', u'内存(G)', u'硬盘(G)',
 | 
			
		||||
             u'机柜位置', u'MAC', u'远控IP', u'机器状态', u'备注']
 | 
			
		||||
    for asset in asset_all:
 | 
			
		||||
        group_list = []
 | 
			
		||||
        for p in asset.group.all():
 | 
			
		||||
            group_list.append(p.name)
 | 
			
		||||
 | 
			
		||||
        disk = get_disk_info(asset.disk)
 | 
			
		||||
        group_all = '/'.join(group_list)
 | 
			
		||||
        status = asset.get_status_display()
 | 
			
		||||
        idc_name = asset.idc.name if asset.idc else u''
 | 
			
		||||
| 
						 | 
				
			
			@ -213,13 +217,14 @@ def write_excel(asset_all):
 | 
			
		|||
        system_version = asset.system_version if asset.idc else u''
 | 
			
		||||
        system_os = unicode(system_type) + unicode(system_version)
 | 
			
		||||
 | 
			
		||||
        alter_dic = [asset.hostname, asset.ip, idc_name, asset.mac, asset.remote_ip, asset.cpu, asset.memory,
 | 
			
		||||
                     asset.disk, system_os, asset.cabinet, group_all, status,
 | 
			
		||||
                     asset.comment]
 | 
			
		||||
        alter_dic = [asset.hostname, asset.ip, idc_name, group_all, system_os, asset.cpu, asset.memory,
 | 
			
		||||
                     disk, asset.cabinet, asset.mac, asset.remote_ip, status, asset.comment]
 | 
			
		||||
        data.append(alter_dic)
 | 
			
		||||
    format = workbook.add_format()
 | 
			
		||||
    format.set_border(1)
 | 
			
		||||
    format.set_align('center')
 | 
			
		||||
    format.set_align('vcenter')
 | 
			
		||||
    format.set_text_wrap()
 | 
			
		||||
 | 
			
		||||
    format_title = workbook.add_format()
 | 
			
		||||
    format_title.set_border(1)
 | 
			
		||||
| 
						 | 
				
			
			@ -308,18 +313,21 @@ def excel_to_db(excel_file):
 | 
			
		|||
 | 
			
		||||
 | 
			
		||||
def get_ansible_asset_info(asset_ip, setup_info):
 | 
			
		||||
    disk_all = setup_info.get("ansible_devices")
 | 
			
		||||
    print asset_ip
 | 
			
		||||
    disk_need = {}
 | 
			
		||||
    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_size = disk_info.get("size")
 | 
			
		||||
            if 'M' in disk_size:
 | 
			
		||||
                disk_format = round(float(disk_size[:-2]) / 1000, 0)
 | 
			
		||||
            elif 'T' in disk_size:
 | 
			
		||||
                disk_format = round(float(disk_size[:-2]) * 1000, 0)
 | 
			
		||||
            else:
 | 
			
		||||
                disk_format = float(disk_size)
 | 
			
		||||
            disk_need[disk_name] = disk_format
 | 
			
		||||
    disk_all = setup_info.get("ansible_devices")
 | 
			
		||||
    if disk_all:
 | 
			
		||||
        for disk_name, disk_info in disk_all.iteritems():
 | 
			
		||||
            print disk_name, disk_info
 | 
			
		||||
            if disk_name.startswith('sd') or disk_name.startswith('hd') or disk_name.startswith('vd'):
 | 
			
		||||
                disk_size = disk_info.get("size", '')
 | 
			
		||||
                if 'M' in disk_size:
 | 
			
		||||
                    disk_format = round(float(disk_size[:-2]) / 1000, 0)
 | 
			
		||||
                elif 'T' in disk_size:
 | 
			
		||||
                    disk_format = round(float(disk_size[:-2]) * 1000, 0)
 | 
			
		||||
                else:
 | 
			
		||||
                    disk_format = float(disk_size[:-2])
 | 
			
		||||
                disk_need[disk_name] = disk_format
 | 
			
		||||
    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 ''
 | 
			
		||||
| 
						 | 
				
			
			@ -342,7 +350,7 @@ def get_ansible_asset_info(asset_ip, setup_info):
 | 
			
		|||
    # asset_type = setup_info.get("ansible_system")
 | 
			
		||||
    sn = setup_info.get("ansible_product_serial")
 | 
			
		||||
    asset_info = [other_ip, mac, cpu, memory_format, disk, sn, system_type, system_version, brand, system_arch]
 | 
			
		||||
 | 
			
		||||
    print asset_info
 | 
			
		||||
    return asset_info
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -357,6 +365,7 @@ def asset_ansible_update(obj_list, name=''):
 | 
			
		|||
            continue
 | 
			
		||||
        else:
 | 
			
		||||
            asset_info = get_ansible_asset_info(asset.ip, setup_info)
 | 
			
		||||
            print asset
 | 
			
		||||
            other_ip, mac, cpu, memory, disk, sn, system_type, system_version, brand, system_arch = asset_info
 | 
			
		||||
            asset_dic = {"other_ip": other_ip,
 | 
			
		||||
                         "mac": mac,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -419,10 +419,9 @@ def asset_detail(request):
 | 
			
		|||
            if perm == 'user':
 | 
			
		||||
                for user, role_dic in value.items():
 | 
			
		||||
                    user_perm.append([user, role_dic.get('role', '')])
 | 
			
		||||
            elif perm == 'user_group':
 | 
			
		||||
            elif perm == 'user_group' or perm == 'rule':
 | 
			
		||||
                user_group_perm = value
 | 
			
		||||
            elif perm == 'rule':
 | 
			
		||||
                user_rule_perm = value
 | 
			
		||||
    print perm_info
 | 
			
		||||
 | 
			
		||||
    asset_record = AssetRecord.objects.filter(asset=asset).order_by('-alert_time')
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -276,7 +276,9 @@ def get_push_info(push_id, arg):
 | 
			
		|||
 | 
			
		||||
@register.filter(name='get_cpu_core')
 | 
			
		||||
def get_cpu_core(cpu_info):
 | 
			
		||||
    return cpu_info.split('* ')[1] if cpu_info else ''
 | 
			
		||||
    cpu_core = cpu_info.split('* ')[1] if cpu_info and '*' in cpu_info else cpu_info
 | 
			
		||||
    return cpu_core
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@register.filter(name='get_disk_info')
 | 
			
		||||
def get_disk_info(disk_info):
 | 
			
		||||
| 
						 | 
				
			
			@ -287,6 +289,8 @@ def get_disk_info(disk_info):
 | 
			
		|||
            for disk, size in disk_dic.items():
 | 
			
		||||
                disk_size += size
 | 
			
		||||
            disk_size = int(disk_size)
 | 
			
		||||
        else:
 | 
			
		||||
            disk_size = ''
 | 
			
		||||
    except Exception:
 | 
			
		||||
        disk_size = ''
 | 
			
		||||
    return disk_size
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							| 
						 | 
				
			
			@ -193,27 +193,29 @@
 | 
			
		|||
                        <div>
 | 
			
		||||
                            <div class="text-left">
 | 
			
		||||
                                {% if perm_info %}
 | 
			
		||||
                                    <table class="table">
 | 
			
		||||
                                    <p>授权用户信息</p>
 | 
			
		||||
                                    <td class="text-navy">授权用户</td>
 | 
			
		||||
                                    <td class="text-navy">系统角色</td>
 | 
			
		||||
                                    {% for perm in user_perm %}
 | 
			
		||||
                                        <tr>
 | 
			
		||||
                                            <td class="text-navy"><a href="/juser/user_detail/?id={{ perm.0.id }}">{{ perm.0 }}</a></td>
 | 
			
		||||
                                            <td>
 | 
			
		||||
                                                <table class="table">
 | 
			
		||||
                                                {% if perm.1 %}
 | 
			
		||||
                                                     {% for role in perm.1 %}
 | 
			
		||||
                                                        <tr>
 | 
			
		||||
                                                            <td class="text-navy"><a href="/jperm/role/perm_role_detail/?id={{ role.id }}">{{ role }}</a></td>
 | 
			
		||||
                                                        </tr>
 | 
			
		||||
                                                     {% endfor %}
 | 
			
		||||
                                                {% endif %}
 | 
			
		||||
                                                </table>
 | 
			
		||||
                                            </td>
 | 
			
		||||
                                        </tr>
 | 
			
		||||
                                    {% endfor %}
 | 
			
		||||
                                    </table>
 | 
			
		||||
                                    {% if user_perm %}
 | 
			
		||||
                                        <table class="table">
 | 
			
		||||
                                        <p>授权用户信息</p>
 | 
			
		||||
                                        <td class="text-navy">授权用户</td>
 | 
			
		||||
                                        <td class="text-navy">系统角色</td>
 | 
			
		||||
                                        {% for perm in user_perm %}
 | 
			
		||||
                                            <tr>
 | 
			
		||||
                                                <td class="text-navy"><a href="/juser/user_detail/?id={{ perm.0.id }}">{{ perm.0 }}</a></td>
 | 
			
		||||
                                                <td>
 | 
			
		||||
                                                    <table class="table">
 | 
			
		||||
                                                    {% if perm.1 %}
 | 
			
		||||
                                                         {% for role in perm.1 %}
 | 
			
		||||
                                                            <tr>
 | 
			
		||||
                                                                <td class="text-navy"><a href="/jperm/role/perm_role_detail/?id={{ role.id }}">{{ role }}</a></td>
 | 
			
		||||
                                                            </tr>
 | 
			
		||||
                                                         {% endfor %}
 | 
			
		||||
                                                    {% endif %}
 | 
			
		||||
                                                    </table>
 | 
			
		||||
                                                </td>
 | 
			
		||||
                                            </tr>
 | 
			
		||||
                                        {% endfor %}
 | 
			
		||||
                                        </table>
 | 
			
		||||
                                    {% endif %}
 | 
			
		||||
                                    {% if user_group_perm %}
 | 
			
		||||
                                        <table class="table">
 | 
			
		||||
                                            <p>授权用户组信息</p>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -46,6 +46,9 @@
 | 
			
		|||
                                        <div class="hr-line-dashed"></div>
 | 
			
		||||
                                        {{ af.remote_ip|bootstrap_horizontal }}
 | 
			
		||||
 | 
			
		||||
                                        <div class="hr-line-dashed"></div>
 | 
			
		||||
                                        {{ af.mac|bootstrap_horizontal }}
 | 
			
		||||
 | 
			
		||||
{#                                        <div class="hr-line-dashed"></div>#}
 | 
			
		||||
{#                                        {{ af.port|bootstrap_horizontal }}#}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -127,7 +127,7 @@
 | 
			
		|||
                                    <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.cpu|get_cpu_core }} </td>
 | 
			
		||||
                                    <td class="text-center"> {{ asset.cpu|get_cpu_core|default_if_none:"" }} </td>
 | 
			
		||||
                                    <td class="text-center"> {{ asset.memory }}{% if asset.memory %}G{% endif %}</td>
 | 
			
		||||
                                    <td class="text-center"> {{ asset.disk|get_disk_info }}{% if asset.memory %}G{% endif %}</td>
 | 
			
		||||
                                    <td class="text-center" data-editable='false'>
 | 
			
		||||
| 
						 | 
				
			
			@ -144,8 +144,8 @@
 | 
			
		|||
                                <input type="button" id="asset_del" class="btn btn-danger btn-sm"  name="del_button" value="删除"/>
 | 
			
		||||
                                <a value="/jasset/asset_edit_batch/" type="button" class="btn btn-sm btn-warning iframe">修改</a>
 | 
			
		||||
                                <input type="button" id="asset_update" class="btn btn-info btn-sm"  name="update_button" value="更新"/>
 | 
			
		||||
                                <input type="button" id="asset_update_all" class="btn btn-primary btn-sm"  name="update_button" value="更新全部"/>
 | 
			
		||||
                                <input type="button" id="exec_cmd" class="btn btn-sm btn-danger"  name="exec_cmd" value="执行命令"/>
 | 
			
		||||
{#                                <input type="button" id="asset_update_all" class="btn btn-primary btn-sm"  name="update_button" value="更新全部"/>#}
 | 
			
		||||
                                <input type="button" id="exec_cmd" class="btn btn-sm btn-primary"  name="exec_cmd" value="执行命令"/>
 | 
			
		||||
                            </div>
 | 
			
		||||
                            {% include 'paginator.html' %}
 | 
			
		||||
                        </div>
 | 
			
		||||
| 
						 | 
				
			
			@ -347,37 +347,40 @@
 | 
			
		|||
    $('#asset_update').click(function () {
 | 
			
		||||
        var asset_id_all = getIDall();
 | 
			
		||||
        if (asset_id_all == ''){
 | 
			
		||||
            alert("请至少选择一行!");
 | 
			
		||||
            return false;
 | 
			
		||||
            if (confirm("更新全部资产信息?")) {
 | 
			
		||||
                layer.msg('玩命更新中...', {time: 200000});
 | 
			
		||||
                $.ajax({
 | 
			
		||||
                    type: "post",
 | 
			
		||||
                    url: "/jasset/asset_update_batch/?arg=all",
 | 
			
		||||
                    success: function () {
 | 
			
		||||
                        parent.location.reload();
 | 
			
		||||
                    }
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            layer.msg('玩命更新中...', {time: 200000});
 | 
			
		||||
            $.ajax({
 | 
			
		||||
                type: "post",
 | 
			
		||||
                data: {asset_id_all: asset_id_all},
 | 
			
		||||
                url: "/jasset/asset_update_batch/",
 | 
			
		||||
                success: function () {
 | 
			
		||||
                    parent.location.reload();
 | 
			
		||||
                }
 | 
			
		||||
            });
 | 
			
		||||
        }
 | 
			
		||||
        layer.msg('玩命更新中...', {time: 200000});
 | 
			
		||||
        $.ajax({
 | 
			
		||||
            type: "post",
 | 
			
		||||
            data: {asset_id_all: asset_id_all},
 | 
			
		||||
            url: "/jasset/asset_update_batch/",
 | 
			
		||||
            success: function () {
 | 
			
		||||
                parent.location.reload();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
{#    function update_tips(){#}
 | 
			
		||||
{#        layer.tips('我是另外一个tips,只不过我长得跟之前那位稍有些不一样。', '吸附元素选择器', {#}
 | 
			
		||||
{#            tips: [1, '#3595CC'],#}
 | 
			
		||||
{#            time: 4000#}
 | 
			
		||||
{#    $('#asset_update_all').click(function () {#}
 | 
			
		||||
{#        layer.msg('玩命更新中...', {time: 200000});#}
 | 
			
		||||
{#        $.ajax({#}
 | 
			
		||||
{#            type: "post",#}
 | 
			
		||||
{#            url: "/jasset/asset_update_batch/?arg=all",#}
 | 
			
		||||
{#            success: function () {#}
 | 
			
		||||
{#                parent.location.reload();#}
 | 
			
		||||
{#            }#}
 | 
			
		||||
{#        });#}
 | 
			
		||||
{#    }#}
 | 
			
		||||
 | 
			
		||||
    $('#asset_update_all').click(function () {
 | 
			
		||||
        layer.msg('玩命更新中...', {time: 200000});
 | 
			
		||||
        $.ajax({
 | 
			
		||||
            type: "post",
 | 
			
		||||
            url: "/jasset/asset_update_batch/?arg=all",
 | 
			
		||||
            success: function () {
 | 
			
		||||
                parent.location.reload();
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    });
 | 
			
		||||
{#    });#}
 | 
			
		||||
 | 
			
		||||
    function change_info(){
 | 
			
		||||
        var args = $("#asset_form").serialize();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue