{% extends "tesm_core/base.html" %} {% from "tesm_core/macros.html" import field, checkbox, pill, empty_state, alert, search_box %} {% block page_title %}DHCP-Server{% endblock %} {% block page_sub %} Kea · {{ subnets | length }} Subnetze · {{ reservations | length }} Reservierungen {% endblock %} {% block content %} {# Der wichtigste Satz der Seite, wenn er zutrifft: was hier steht, ist nicht, womit der Dienst arbeitet. Lehnt Kea eine Datei ab, bleibt der alte Stand aktiv -- die Oberflaeche zeigte bisher trotzdem den neuen Wert, und man sucht den Fehler beim Client. #} {% if konfig_stand == 'abweichend' %}
| Interface | Bereich | Gateway | DNS | Aktiv | |
|---|---|---|---|---|---|
| {{ subnet.interface }} | {{ subnet.range_start }} – {{ subnet.range_end }} | {{ subnet.gateway or '–' | safe }} | {{ subnet.dns or '–' | safe }} | {% if subnet.enabled %}{{ pill('aktiv', 'online') }}{% else %}{{ pill('pausiert', '') }}{% endif %} | {% if current_user.has('dhcp_subnets.write') %} {% endif %} |
| Code | Name | Typ | Wert | |
|---|---|---|---|---|
| {{ option.code }} |
{{ option.name }}
{{ option.description }}
|
{{ option.type }} | {{ optionswert(option) }} | {{ optionsloeschen(option) }} |
| Code | Name | Typ | Wert | |
|---|---|---|---|---|
| {{ option.code }} |
{{ option.name }}
{{ option.description }}
|
{{ option.type }} | {{ optionswert(option) }} | {{ optionsloeschen(option) }} |
Betrifft
{% for eintrag in beispiel.optionen %}
{{ eintrag.code }} {{ eintrag.name }}{% if not loop.last %}, {% endif %}
{% endfor %}.
Welcher Abschnitt gilt, entscheidet die Distribution des Clients.
{{ konfig.inhalt }}
{{ konfig.nachher }}| MAC | IP | Hostname | Zustand | Quelle | Eigene Optionen | |
|---|---|---|---|---|---|---|
| {{ reservation.mac }} | {{ reservation.ip }} | {{ reservation.hostname }} |
{{ pill(reservation.state | replace('_', ' '), reservation.state_style) }}
{% if reservation.state == 'andere_adresse' and reservation.lease %}
jetzt {{ reservation.lease.address }}
{% elif reservation.state == 'aktiv' and reservation.lease %}
{{ reservation.lease.remaining_text }}
{% endif %}
|
{{ pill(reservation.source, 'accent' if reservation.source == 'auto' else '') }} |
{% set eigene = device_option_values.get(reservation.device_id) if reservation.device_id else none %}
{% if eigene %}
{% for wert in eigene %}
{{ wert.code }} {{ wert.name }} = {{ wert.value }}
{% endfor %}
{% else %}
–
{% endif %}
|
{% if reservation.source == 'manuell' and current_user.has('dhcp_reservations.delete') %} {% endif %} |
| IP | MAC | Hostname | Art | Zustand | Läuft ab | |
|---|---|---|---|---|---|---|
| {{ lease.address }} | {{ lease.mac }} | {{ lease.hostname or '–' | safe }} | {% if lease.address in reserved_ips %}{{ pill('Reservierung', 'accent') }} {% else %}{{ pill('dynamisch', '') }}{% endif %} | {% if lease.is_expired %}{{ pill('abgelaufen', 'warning') }} {% elif lease.is_active %}{{ pill('gültig', 'online') }} {% else %}{{ pill('inaktiv', '') }}{% endif %} | {{ lease.expires_text }}
{{ lease.remaining_text }}
|
{# Übernehmen gibt es nur für dynamische Leases: was reserviert ist, gehört schon zu einem gepflegten Datensatz. Und nur, wenn beide Rechte stehen -- hier entsteht ein Client. #} {% if lease.address not in reserved_ips and current_user.has('dhcp_lease_adopt.read') and current_user.has('devices.create') %} {% if lease.mac in bekannte_macs %} bereits Client {% else %} {% endif %} {% endif %} |
{{ preview }}
{% if current_user.has('dhcp_config.execute') %}
{% endif %}