Beispiel #1
0
def install_server(ip_list,script_file):
    current_process()._config = {'semprefix': '/mp'}
    host_list = json.loads(ip_list)
    ansible_user="******"
    module_name = 'script'
    module_args = script_file
    ret = ansible_api.run_ansible(module_name,module_args,host_list,ansible_user)
    return ret
Beispiel #2
0
def sync_os_info():
    current_process()._config = {'semprefix': '/mp'}
    asset_obj = asset_db.Asset.objects.all()
    host_list = []
    for  i in asset_obj:
        ip = i.asset_ip
        host_list.append(ip)
    os_info = get_os_info.main(host_list)

    for i in os_info.keys():
        host_obj = asset_db.Asset.objects.get(asset_ip=i)
        data = os_info[i]
        os_obj = asset_db.AssetOsInfo.objects.get(asset_id=host_obj.id)
        os_obj.hostname=data['localhost']
        os_obj.os_type=data['kernel']
        os_obj.kernel_version="{} {}".format(data['kernel'], data['kernelrelease'])
        os_obj.os_version="{} {}".format(data['os'], data['osrelease'])
        os_obj.product_name=data['productname']
        os_obj.cpu_model=data['cpu_model']
        os_obj.cpu_core_count=data['num_cpus']
        os_obj.mem_size=data['mem_size']
        os_obj.save()

        asset_db.NIC.objects.filter(asset_id=host_obj.id).delete()
        for j in data['interface']:
            nic_obj = asset_db.NIC(asset_id=host_obj.id, name=j["label"], model=j["type"], mac=j["hwaddr"],
                                   ip_address=j["address"], net_mask=j["netmask"], mtu=j["mtu"])
            nic_obj.save()

        asset_db.Devices.objects.filter(asset_id=host_obj.id).delete()
        for k in data['devices_list']:
            device_obj = asset_db.Devices(asset_id=host_obj.id, device_name=k["device_name"],
                                          device_model=k["device_model"], device_size=k["device_size"],
                                          interface_type=k["interface_type"])
            device_obj.save()
        asset_db.Mounts.objects.filter(asset_id=host_obj.id).delete()
        for h in data['mount_list']:
            mount_obj = asset_db.Mounts(asset_id=host_obj.id, device=h["device"],
                                        mount=h["mount"], size_total=h["size_total"], size_available=h["size_available"],
                                        fstype=h["fstype"])
            mount_obj.save()

    module_name = 'script'

    module_args = "{}{}".format(BASE_DIR,"/tools/get_netstat_info.py")
    ret = ansible_api.run_ansible(module_name, module_args, host_list)
    data = json.loads(ret)
    server_info = data['success']
    for i in server_info.keys():
        host_obj = asset_db.Asset.objects.get(asset_ip=i)
        data = server_info[i]["stdout_lines"]
        asset_db.RunServer.objects.filter(asset_id=host_obj.id).delete()
        for j in json.loads(data[0]):
            server_obj = asset_db.RunServer(asset_id=host_obj.id, server_name=j[0], server_version=j[1],
                                            server_port=json.dumps(j[2]))
            server_obj.save()
    return "success"
Beispiel #3
0
def batch_run_cmd(request):
    """批量执行命令"""
    cmd = request.POST.get('cmd')
    ip_list = json.loads(request.POST.get("ip_list"))

    ret = ansible_api.run_ansible("shell",cmd,ip_list)
    result = json.loads(ret)
    data_txt = ""
    for ip in result["success"].keys():
        head_txt = '=================== %s (SUCCESS)===================\n' % ip
        result_info = "%sCommand:%s\nOutput:\n%s\n\r" % (head_txt, cmd, result["success"][ip]["stdout"])
        data_txt += result_info
    for ip in result["failed"].keys():
        head_txt = '=================== %s (FAILED)===================\n' % ip
        result_info = "%sCommand:%s\nOutput:\n%s\n\r" % (head_txt, cmd, result["failed"][ip]["stderr"])
        data_txt += result_info

    ret = {"status": "True", "info": data_txt}
    data = json.dumps(ret)
    return HttpResponse(data)
Beispiel #4
0
def batch_upload_file(request):
    """批量上传文件"""
    upload_path = request.POST.get('upload_path')
    upload_file = request.FILES.get("upfile")
    ip_list = json.loads(request.POST.get("ip_list"))
    up_file_path = os.path.join(BASE_DIR, 'statics', 'upload')
    if os.path.exists(up_file_path):
        pass
    else:
        os.makedirs(up_file_path)
    file_path = os.path.join(up_file_path, upload_file.name)
    dest = os.path.join(upload_path,upload_file.name)
    if os.path.exists(file_path):
        date_str = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
        os.rename(file_path, file_path + "_" + date_str)
    else:
        pass
    f = open(file_path, 'wb')
    for chunk in upload_file.chunks():
        f.write(chunk)
    f.close()

    module_name = "copy"
    module_arg = "src={} dest={} backup=yes".format(file_path, dest)
    ret = ansible_api.run_ansible(module_name,module_arg,ip_list)
    data_txt=''
    result = json.loads(ret)
    for ip in result["success"].keys():
        head_txt = '=================== %s (SUCCESS)===================\n' % ip
        result_info = "%s\nOutput:\n%s\n\r" % (head_txt, result["success"][ip]["dest"])
        data_txt += result_info
    for ip in result["failed"].keys():
        head_txt = '=================== %s (FAILED)===================\n' % ip
        result_info = "%s\nOutput:\n%s\n\r" % (head_txt, result["failed"][ip]["msg"])
        data_txt += result_info

    ret = {"status": "True", "info": data_txt}
    data = json.dumps(ret)
    return HttpResponse(data)
Beispiel #5
0
def batch_script(request):
    """批量执行脚本"""
    up_script = request.FILES.get("script_file")
    ip_list = json.loads(request.POST.get("ip_list"))
    script_dir = os.path.join(BASE_DIR, 'tools', 'scripts')
    if os.path.exists(script_dir):
        pass
    else:
        os.makedirs(script_dir)
    script_file = os.path.join(script_dir, up_script.name)
    if os.path.exists(script_file):
        date_str = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
        os.rename(script_file, script_file + "_" + date_str)
    else:
        pass
    f = open(script_file, 'wb')
    for chunk in up_script.chunks():
        f.write(chunk)
    f.close()
    ret = ansible_api.run_ansible("script", script_file,ip_list)
    result = json.loads(ret)
    data_txt=''
    for ip in result["success"].keys():
        head_txt = '=================== %s (SUCCESS)===================\n' % ip
        result_info = "%s\nOutput:\n%s\n\r" % (head_txt, result["success"][ip]["stdout"])
        data_txt += result_info
    for ip in result["failed"].keys():
        head_txt = '=================== %s (FAILED)===================\n' % ip
        result_info = "%s\nOutput:\n%s\n\r" % (head_txt, result["failed"][ip]["stdout"])
        data_txt += result_info

    ret = {"status": "True", "info": data_txt}
    data = json.dumps(ret)
    return HttpResponse(data)

    return HttpResponse(data_txt)
Beispiel #6
0
def asset_detail(request, id):
    """查看服务器详细信息"""
    caption = "资产"
    asset_obj = asset_db.Asset.objects.get(id=id)
    login_obj = asset_db.AssetLoginInfo.objects.get(asset_id=asset_obj.id)
    ip = asset_obj.asset_ip
    host_list = [ip]
    try:
        os_obj = asset_db.AssetOsInfo.objects.get(asset_id=asset_obj.id)
        nic_obj = asset_db.NIC.objects.filter(asset_id=asset_obj.id)
        device_obj = asset_db.Devices.objects.filter(asset_id=asset_obj.id)
        mount_obj = asset_db.Mounts.objects.filter(asset_id=asset_obj.id)
        server_obj = asset_db.RunServer.objects.filter(asset_id=asset_obj.id)
    except:
        with open("/etc/ansible/hosts", "a") as f:
            f.write("{} {}={}\n".format(ip, "ansible_ssh_port",
                                        login_obj.login_port))

        os_info = get_os_info.main(host_list)
        data = os_info[ip]
        os_obj = asset_db.AssetOsInfo(
            asset_id=asset_obj.id,
            hostname=data['localhost'],
            os_type=data['kernel'],
            kernel_version="{} {}".format(data['kernel'],
                                          data['kernelrelease']),
            os_version="{} {}".format(data['os'], data['osrelease']),
            product_name=data['productname'],
            cpu_model=data['cpu_model'],
            cpu_core_count=data['num_cpus'],
            mem_size=data['mem_size'])
        os_obj.save()

        for i in data['interface']:
            nic_obj = asset_db.NIC(asset_id=asset_obj.id,
                                   name=i["label"],
                                   model=i["type"],
                                   mac=i["hwaddr"],
                                   ip_address=i["address"],
                                   net_mask=i["netmask"],
                                   mtu=i["mtu"])
            nic_obj.save()

        for i in data['devices_list']:
            device_obj = asset_db.Devices(asset_id=asset_obj.id,
                                          device_name=i["device_name"],
                                          device_model=i["device_model"],
                                          device_size=i["device_size"],
                                          interface_type=i["interface_type"])
            device_obj.save()

        for i in data['mount_list']:
            mount_obj = asset_db.Mounts(asset_id=asset_obj.id,
                                        device=i["device"],
                                        mount=i["mount"],
                                        size_total=i["size_total"],
                                        size_available=i["size_available"],
                                        fstype=i["fstype"])
            mount_obj.save()

        module_name = 'script'
        module_args = "{}{}".format(BASE_DIR, "/tools/get_netstat_info.py")
        ret = ansible_api.run_ansible(module_name, module_args, host_list)
        data = json.loads(ret)
        server_info = data['success'][ip]["stdout_lines"]
        for i in json.loads(server_info[0]):
            server_obj = asset_db.RunServer(asset_id=asset_obj.id,
                                            server_name=i[0],
                                            server_version=i[1],
                                            server_port=json.dumps(i[2]))
            server_obj.save()

        os_obj = asset_db.AssetOsInfo.objects.get(asset_id=asset_obj.id)
        nic_obj = asset_db.NIC.objects.filter(asset_id=asset_obj.id)
        device_obj = asset_db.Devices.objects.filter(asset_id=asset_obj.id)
        mount_obj = asset_db.Mounts.objects.filter(asset_id=asset_obj.id)
        server_obj = asset_db.RunServer.objects.filter(asset_id=asset_obj.id)

    return render(request, "cmdb/asset_detail.html", locals())
Beispiel #7
0
def main(host_list, ansible_user="******"):
    """
    :param host_list:['127.0.0.1']
    :param option_dict:{"become": True, "remote_user": "******"}
    """
    module_name = 'setup'
    module_args = ""
    result = ansible_api.run_ansible(module_name, module_args, host_list,
                                     ansible_user)
    result = json.loads(result)['success']
    data = {}
    for i in result.keys():
        info = result[i]['ansible_facts']
        hostname = info['ansible_hostname']
        kernel = info['ansible_system']
        kernelrelease = info['ansible_kernel']
        cpu_model = info['ansible_processor'][2]
        num_cpus = info['ansible_processor_cores']
        productname = info['ansible_product_name']
        os_name = info['ansible_distribution']
        osrelease = info['ansible_distribution_version']
        mem_info = info['ansible_memory_mb']
        disk_info = info['ansible_devices']
        mount_info = info['ansible_mounts']
        interfaces = info['ansible_interfaces']
        inter_list = []
        devices_list = []
        mount_list = []
        #磁盘信息
        for k in disk_info.keys():
            devices_list.append({
                "device_name": '/dev/{}'.format(k),
                "device_size": disk_info[k]['size'],
                "device_model": disk_info[k]['model'],
                "interface_type": disk_info[k]["host"]
            })

        for h in mount_info:
            mount_list.append({
                "size_total": h['size_total'],
                "size_available": h['size_available'],
                "device": h['device'],
                "mount": h["mount"],
                "fstype": h["fstype"]
            })

        #网卡信息
        for j in interfaces:
            try:
                key = "ansible_%s" % j
                inter_ipv4 = info[key]['ipv4']
                inter_ipv4["label"] = j
                try:
                    inter_ipv4["hwaddr"] = info[key]['macaddress']
                except:
                    inter_ipv4["hwaddr"] = "00:00:00:00:00:00"
                inter_ipv4["mtu"] = info[key]['mtu']
                inter_ipv4["type"] = info[key]['type']
                inter_list.append(inter_ipv4)
            except:
                continue

        new_info = {
            "localhost": hostname,
            "kernel": kernel,
            "kernelrelease": kernelrelease,
            "cpu_model": cpu_model,
            "num_cpus": num_cpus,
            "productname": productname,
            "os": os_name,
            "osrelease": osrelease,
            "mem_size": mem_info["real"]['total'],
            "interface": inter_list,
            "devices_list": devices_list,
            "mount_list": mount_list
        }
        data[i] = new_info
    return data