{% extends "base.html" %} {% import '_ui.html' as ui %} {% block title %}Updates - PXE Manager{% endblock %} {% block extra_head %} {% endblock %} {% block content %} {% call ui.head('Updates overview', 'Updates') %}
Download cap {{ ('%g MB/s' | format(settings.max_mbps)) if settings.max_mbps else 'none' }}
{% endcall %}
{# ---- Dell ---- #}

Dell drivers and BIOS

{% set n_up = dell.drv_updates + dell.bios_updates %} {% if not dell.checked %}
Not checked yet
Check the Dell catalogs for newer driver packs and BIOS. {% elif n_up %}
{{ n_up }} update{{ 's' if n_up != 1 }}
{{ dell.drv_updates }} driver pack{{ 's' if dell.drv_updates != 1 }}, {{ dell.bios_updates }} BIOS. Checked {{ dell.checked | local_dt }}. {% else %}
All current
{{ dell.drivers }} driver packs, {{ dell.bios }} BIOS lines. Checked {{ dell.checked | local_dt }}. {% endif %}
Open
{# ---- iPXE ---- #}

iPXE boot files

{{ ipxe.version or 'Unknown version' }} {% if ipxe.status == 'update' %}{{ ui.chip(ipxe.latest.tag ~ ' available', 'act') }}{% endif %}
{% if ipxe.latest %}Latest upstream {{ ipxe.latest.tag }}, checked {{ ipxe.latest.checked | local_dt }}.{% else %}Upstream not checked yet.{% endif %}
Boot files on the TFTP root {% for r in ipxe.rows %}{% endfor %}
Boot files on the TFTP root
{{ r.name }}{{ (r.info or {}).get('version') or ('not installed' if not r.info else '-') }}
History
{# ---- Blancco ---- #}

Blancco releases

{% set cur = blancco.current or {} %}
{{ cur.version or 'Unknown' }} live
{% if cur.missing %}Missing release files: {{ cur.missing | join(', ') }}.{% elif blancco.staged %}{{ blancco.staged | length }} staged release{{ 's' if blancco.staged | length != 1 }} waiting.{% else %}Nothing staged.{% endif %}
How an update works
  1. Upload the vendor release (.iso, .img, .img.gz or .iso.gz).
  2. If its preferences format changed, upload the merged preferences file; staging waits for it.
  3. Test-boot the staged release from the PXE menu, then activate.
{# ---- BPRT ---- #}

BPRT sync

{% set live = bprt.live or {} %} {% if not live.exists %}
No live BPRT folder
{% elif live.missing_required %}
{{ live.missing_required | length }} required file{{ 's' if live.missing_required | length != 1 }} missing
{% else %}
Required files present
{% endif %} {{ live.count or 0 }} files, {{ (live.bytes or 0) | filesizeformat }}. {% if bprt.batches %}{{ bprt.batches | length }} incoming batch{{ 'es' if bprt.batches | length != 1 }} waiting.{% else %}No batch waiting.{% endif %} {% if live.missing_required %}
Missing: {{ live.missing_required | join(', ') }}
{% endif %}

Dell applies

iPXE, Blancco and BPRT keep their own history; open it from their cards.
{% for h in history %} {% set can = not h.rolled_back and h.unchanged > 0 %}
{{ h.at | local_dt }} {{ h.title }} {% if h.rolled_back %}{{ ui.chip('Rolled back', 'neutral') }} {% elif h.errors and not h.total %}{{ ui.chip('Apply failed', 'err') }} {% elif not h.total %}{{ ui.chip('Nothing written', 'off') }} {% elif h.unchanged == h.total %}{{ ui.chip(h.unchanged ~ '/' ~ h.total ~ ' unchanged', 'ok') }} {% elif h.unchanged %}{{ ui.chip(h.unchanged ~ '/' ~ h.total ~ ' unchanged', 'warn') }} {% else %}{{ ui.chip('0/' ~ h.total ~ ' unchanged', 'off') }}{% endif %}
    {% for c in h.changes %}
  • {{ c }}
  • {% endfor %} {% for d in h.drivers %}
  • {{ d.old }} to {{ d.new }}
  • {% endfor %}
{% if h.skipped %}
Skipped: {{ h.skipped | join('; ') }}
{% endif %} {% if h.errors %}
{{ h.errors | join('; ') }}
{% endif %} {% if h.files %}
    {% for f in h.files %}
  • {{ f.label }} {% if f.state == 'unchanged' %}unchanged since this apply {% elif f.state == 'changed' %}content differs from what this apply wrote{% if f.mtime %} (last modified {{ f.mtime | local_dt }}){% endif %} {% else %}missing{% endif %}
  • {% endfor %}
{% endif %} {% if h.rolled_back %}
Rolled back {{ h.rolled_back | local_dt }}.
{% endif %}
Apply {{ h.id }}. Rollback is offered only for files nobody has changed since the apply (same content hash).
{% if can %}{% endif %}
{% else %}
No Dell apply recorded yet.
{% endfor %}
{% endblock %}