Files
rollcall/cmd/rollcall/web/index.html
T
Ilker ManapandClaude Fable 5.1 cb7b6fd19e
CI / go (push) Successful in 35s
CI / agent (push) Successful in 4s
CI / site (push) Successful in 3s
Physical location: building / room / rack / unit / asset tag
- machines.building/room/rack/rack_unit/asset_tag, racks table (height, comment)
- API: POST /machines/{id}/location, POST /locations/import (CSV or JSON, matched by
  id/serial/mac/node_name, ?dry=1), GET/POST/DELETE /racks, ?building/?room/?rack filters
- CLI: rollcall location ..., location import, location racks/rack, list -rack/-room/-building
- UI: location column and building > room > rack chips, bulk Set location…, Racks page with
  elevation views and CSV import dialog, location in machine detail
- .Node.Building/Room/Rack/Unit/AssetTag in overlay templates and tag match rules

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-27 15:32:26 +01:00

52 lines
1.9 KiB
HTML

<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Rollcall</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="shell">
<nav class="side">
<div class="brand">Rollcall<span class="muted">bare-metal fleet</span></div>
<a href="#/overview" data-nav="overview">Overview</a>
<a href="#/machines" data-nav="machines">Machines <span class="count" id="n-machines"></span></a>
<a href="#/racks" data-nav="racks">Racks <span class="count" id="n-racks"></span></a>
<a href="#/jobs" data-nav="jobs">Jobs <span class="count" id="n-jobs"></span></a>
<a href="#/tags" data-nav="tags">Tags</a>
<a href="#/profiles" data-nav="profiles">Profiles</a>
<a href="#/images" data-nav="images">OS images</a>
<div class="side-foot">
<span id="status" class="muted"></span>
<button id="logout" class="btn ghost" title="forget the admin token">Token</button>
</div>
</nav>
<main id="main"></main>
</div>
<dialog id="login">
<form method="dialog">
<h2>Admin token</h2>
<p class="muted">The <code>admin_token</code> from the server's <code>config.json</code>. Stored only in this browser.</p>
<input id="token" type="password" autocomplete="off" placeholder="token" required>
<menu><button class="btn primary" value="ok">Sign in</button></menu>
</form>
</dialog>
<!-- generic action dialog: filled by JS -->
<dialog id="dlg">
<form method="dialog" id="dlg-form">
<h2 id="dlg-title"></h2>
<div id="dlg-body" class="kv form"></div>
<p id="dlg-note" class="muted"></p>
<menu><button class="btn ghost" value="cancel" type="button" id="dlg-cancel">Cancel</button><button class="btn primary" value="ok" id="dlg-ok">OK</button></menu>
</form>
</dialog>
<div id="toast" hidden></div>
<script src="app.js"></script>
</body>
</html>