OpenNIT

Quelltext des aktuellen Standes

Fassung 1.1.1

ipam_check.php

6 KB
<?php
$this->layout('layouts/main', [
    'page_title'    => 'DNS und IP-Verwaltung',
    'current_route' => 'dns',
    'full_width'    => true,
]);

$ohneAdresse = $ohne_adresse ?? [];
$ohneNamen   = $ohne_namen   ?? [];
$ipamAktiv   = $ipam_aktiv   ?? false;
$view        = $this;
?>

<div>
    <div class="content-header">
        <div>
            <h1><?= $this->te('DNS und IP-Verwaltung') ?></h1>
            <ol class="breadcrumb">
                <li class="breadcrumb-item"><a href="/"><?= $this->te('Home') ?></a></li>
                <li class="breadcrumb-item"><a href="/dns"><?= $this->te('DNS-Zonen') ?></a></li>
                <li class="breadcrumb-item active"><?= $this->te('Abgleich') ?></li>
            </ol>
        </div>
        <div class="content-header-actions">
            <a href="/dns" class="btn btn-default"><?= $this->te('&laquo; Zu den Zonen') ?></a>
        </div>
    </div>

    <div class="page-body">

        <?php if (!$ipamAktiv): ?>
            <div class="alert alert-info">
                <?= $this->t('Das Modul <strong>IP-Verwaltung</strong> ist nicht aktiv. Ohne Adressbestand gibt es nichts zu vergleichen &ndash; einschalten l&auml;sst es sich unter <em>Administration &rarr; Einstellungen &rarr; Module</em>.') ?>
            </div>
        <?php else: ?>

        <div class="alert alert-info">
            <?= $this->te('Diese Gegen&uuml;berstellung benennt Auff&auml;lligkeiten, sie bewertet sie nicht. Beide Richtungen k&ouml;nnen v&ouml;llig in Ordnung sein &ndash; etwa bei getrennten DNS-Sichten oder bei Adressen, die bewusst keinen Namen tragen. Ge&auml;ndert wird hier nichts.') ?>
        </div>

        <div class="kpi-row">
            <div class="kpi-col">
                <div class="small-box <?= count($ohneAdresse) > 0 ? 'bg-warning' : 'bg-success' ?>">
                    <div class="inner">
                        <h3><?= count($ohneAdresse) ?></h3>
                        <p><?= $this->t('Namen ohne Adresse<small style="opacity:.8;font-size:.8em;display:block;">in der IP-Verwaltung unbekannt</small>') ?></p>
                    </div>
                    <div class="icon"><i class="fas fa-globe"></i></div>
                </div>
            </div>
            <div class="kpi-col">
                <div class="small-box <?= count($ohneNamen) > 0 ? 'bg-warning' : 'bg-success' ?>">
                    <div class="inner">
                        <h3><?= count($ohneNamen) ?></h3>
                        <p><?= $this->t('Adressen ohne Namen<small style="opacity:.8;font-size:.8em;display:block;">kein A-/AAAA-Record</small>') ?></p>
                    </div>
                    <div class="icon"><i class="fas fa-network-wired"></i></div>
                </div>
            </div>
        </div>

        <h2 style="font-size:1.05rem;margin-top:1.5rem;"><?= $this->te('Namen, deren Adresse die IP-Verwaltung nicht kennt') ?></h2>
        <?php if (empty($ohneAdresse)): ?>
            <div class="empty-state">
                <span class="empty-icon"><i class="fas fa-check-circle"></i></span>
                <strong><?= $this->te('Jede Adresse aus dem DNS ist in der IP-Verwaltung gef&uuml;hrt') ?></strong>
            </div>
        <?php else: ?>
            <div class="table-wrapper">
                <table class="data-table">
                    <thead><tr><th scope="col"><?= $this->te('Name') ?></th><th scope="col"><?= $this->te('Typ') ?></th><th scope="col"><?= $this->te('Adresse') ?></th><th scope="col"><?= $this->te('Zone') ?></th></tr></thead>
                    <tbody>
                    <?php foreach ($ohneAdresse as $r): ?>
                        <tr>
                            <td style="font-family:monospace;"><?= $view->e($r['record_name']) ?></td>
                            <td><span class="badge"><?= $view->e($r['type']) ?></span></td>
                            <td style="font-family:monospace;"><?= $view->e($r['ip_address']) ?></td>
                            <td><a href="/dns/zones/<?= (int)$r['zone_id'] ?>" class="table-link"><?= $view->e($r['zone_name']) ?></a></td>
                        </tr>
                    <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
        <?php endif; ?>

        <h2 style="font-size:1.05rem;margin-top:1.5rem;"><?= $this->te('Vergebene Adressen ohne passenden Record') ?></h2>
        <?php if (empty($ohneNamen)): ?>
            <div class="empty-state">
                <span class="empty-icon"><i class="fas fa-check-circle"></i></span>
                <strong><?= $this->te('Jede vergebene Adresse hat einen Namen im DNS') ?></strong>
            </div>
        <?php else: ?>
            <div class="table-wrapper">
                <table class="data-table">
                    <thead><tr><th scope="col"><?= $this->te('Adresse') ?></th><th scope="col"><?= $this->te('Hostname (IPAM)') ?></th><th scope="col"><?= $this->te('Art') ?></th><th scope="col"><?= $this->te('Status') ?></th><th scope="col"><?= $this->te('Subnetz') ?></th></tr></thead>
                    <tbody>
                    <?php foreach ($ohneNamen as $a): ?>
                        <tr>
                            <td style="font-family:monospace;">
                                <a href="/ipam/addresses/<?= (int)$a['id'] ?>" class="table-link"><?= $view->e($a['ip_address']) ?></a>
                            </td>
                            <td><?= $view->e($a['hostname'] ?: '—') ?></td>
                            <td class="text-muted"><?= $view->e($a['type']) ?></td>
                            <td><span class="status-pill"><?= $view->e($a['status']) ?></span></td>
                            <td class="text-muted">
                                <?= !empty($a['network']) ? $view->e($a['network'] . '/' . $a['cidr']) : '—' ?>
                            </td>
                        </tr>
                    <?php endforeach; ?>
                    </tbody>
                </table>
            </div>
        <?php endif; ?>

        <small class="form-hint" style="display:block;margin-top:1rem;">
            <?= $this->te('Verglichen werden A- und AAAA-Records gegen die vergebenen Adressen; als frei gef&uuml;hrte Adressen bleiben au&szlig;en vor, weil sie gerade keinen Namen tragen sollen. Je Richtung werden h&ouml;chstens 500 Eintr&auml;ge gezeigt.') ?>
        </small>

        <?php endif; ?>
    </div>
</div>