Exemplo n.º 1
0
def trigger_patch_scan(request):
    agent = get_object_or_404(Agent, agent_id=request.data["agent_id"])
    reboot_policy = agent.winupdatepolicy.get().reboot_after_install
    reboot = False

    if reboot_policy == "always":
        reboot = True

    if request.data["reboot"]:
        if reboot_policy == "required":
            reboot = True
        elif reboot_policy == "never":
            agent.needs_reboot = True
            agent.save(update_fields=["needs_reboot"])

    if reboot:
        r = agent.salt_api_cmd(
            timeout=15,
            func="system.reboot",
            arg=7,
            kwargs={"in_seconds": True},
        )

        if r == "timeout" or r == "error" or (isinstance(r, bool) and not r):
            check_for_updates_task.delay(agent.pk, wait=False)
        else:
            logger.info(
                f"{agent.hostname} is rebooting after updates were installed.")
    else:
        check_for_updates_task.delay(agent.pk, wait=False)

    return Response("ok")
Exemplo n.º 2
0
def trigger_patch_scan(request):
    agent = get_object_or_404(Agent, agent_id=request.data["agentid"])
    check_for_updates_task.delay(agent.pk, wait=False)

    if request.data["reboot"]:
        agent.needs_reboot = True
    else:
        agent.needs_reboot = False

    agent.save(update_fields=["needs_reboot"])
    return Response("ok")
Exemplo n.º 3
0
def update(request):
    data = request.data
    agent_id = data["agentid"]
    hostname = data["hostname"]
    os = data["operating_system"]
    total_ram = data["total_ram"]
    cpu_info = data["cpu_info"]
    plat = data["platform"]
    plat_release = data["platform_release"]
    version = data["version"]
    av = data["av"]

    agent = get_object_or_404(Agent, agent_id=agent_id)

    agent.hostname = hostname
    agent.operating_system = os
    agent.total_ram = total_ram
    agent.cpu_info = cpu_info
    agent.plat = plat
    agent.plat_release = plat_release
    agent.version = version
    agent.antivirus = av

    agent.save(update_fields=[
        "last_seen",
        "hostname",
        "operating_system",
        "total_ram",
        "cpu_info",
        "plat",
        "plat_release",
        "version",
        "antivirus",
    ])

    sync_salt_modules_task.delay(agent.pk)
    get_installed_software.delay(agent.pk)
    get_wmi_detail_task.delay(agent.pk)

    if not agent.choco_installed:
        install_chocolatey.delay(agent.pk, wait=True)

    # check for updates if this is fresh agent install
    if not WinUpdate.objects.filter(agent=agent).exists():
        check_for_updates_task.delay(agent.pk, wait=True)

    return Response("ok")
Exemplo n.º 4
0
def update(request):
    agent = get_object_or_404(Agent, agent_id=request.data["agent_id"])

    if agent.update_pending and request.data["version"] != agent.version:
        agent.update_pending = False
        agent.save(update_fields=["update_pending"])

    serializer = WinAgentSerializer(instance=agent,
                                    data=request.data,
                                    partial=True)
    serializer.is_valid(raise_exception=True)
    serializer.save(last_seen=djangotime.now())

    sync_salt_modules_task.delay(agent.pk)
    get_installed_software.delay(agent.pk)
    get_wmi_detail_task.delay(agent.pk)
    check_for_updates_task.delay(agent.pk, wait=True)

    if not agent.choco_installed:
        install_chocolatey.delay(agent.pk, wait=True)

    return Response("ok")
Exemplo n.º 5
0
def on_agent_first_install(request):
    pk = request.data["pk"]
    agent = get_object_or_404(Agent, pk=pk)

    resp = agent.salt_api_cmd(hostname=agent.salt_id,
                              timeout=60,
                              func="saltutil.sync_modules")
    try:
        data = resp.json()
    except Exception:
        return Response("err", status=status.HTTP_400_BAD_REQUEST)

    try:
        ret = data["return"][0][agent.salt_id]
    except KeyError:
        return Response("err", status=status.HTTP_400_BAD_REQUEST)

    if not data["return"][0][agent.salt_id]:
        return Response("err", status=status.HTTP_400_BAD_REQUEST)

    get_wmi_detail_task.delay(agent.pk)
    get_installed_software.delay(agent.pk)
    check_for_updates_task.delay(agent.pk, wait=True)
    return Response("ok")