Страница ISO была переведена на единое меню

Этот коммит содержится в:
Виктор
2026-05-07 10:19:13 +09:00
родитель ec933815d8
Коммит 6a6fd7bb83
+85 -81
Просмотреть файл
@@ -7,93 +7,96 @@
<link rel="stylesheet" href="/static/app.css"> <link rel="stylesheet" href="/static/app.css">
</head> </head>
<body> <body>
<div class="shell"> <div class="v-layout">
<header class="topbar"> {% include "_sidebar.html" %}
<div>
<div class="brand">ISO</div>
<div class="muted">Установочные образы только .iso в /var/lib/virtuality/iso</div>
</div>
<div class="top-meta">
<span>user: {{ user }}</span>
<a class="link-pill" href="/">← Дашборд</a>
<a class="link-pill accent" href="/vm/create">+ Создать VM</a>
<form method="post" action="/logout" class="logout-form"><button class="ghost">Выйти</button></form>
</div>
</header>
{% if error %} <main class="v-main">
<div class="alert danger">{{ error }}</div> <header class="v-topbar">
{% endif %} <div>
<div class="v-title">ISO</div>
<section class="grid two"> <div class="v-subtitle">Установочные образы только .iso в /var/lib/virtuality/iso</div>
<article class="card">
<div class="card-head">
<h2>Загрузить установочный ISO</h2>
<span class="pill">только .iso</span>
</div> </div>
<form id="iso-upload-form" method="post" action="/iso/upload" enctype="multipart/form-data" class="form-grid"> <div class="top-meta">
<label class="upload-box"> <span>user: {{ user }}</span>
<span>Выбери ISO-файл установочного диска</span> <a class="link-pill" href="/">← Дашборд</a>
<input id="iso-file-input" type="file" name="iso_file" accept=".iso" required> <form method="post" action="/logout" class="logout-form"><button class="ghost">Выйти</button></form>
</label> </div>
<div id="iso-file-hint" class="muted small-note">Файл ещё не выбран. В этом разделе разрешены только установочные образы .iso.</div> </header>
<div id="upload-progress-wrap" class="upload-progress-wrap" hidden>
<div class="upload-progress-head"> {% if error %}
<strong id="upload-status">Подготовка…</strong> <div class="alert danger">{{ error }}</div>
<span id="upload-percent">0%</span> {% endif %}
</div>
<div class="progress big"><span id="upload-progress-bar"></span></div> <section class="grid two">
<div class="upload-progress-meta"> <article class="card">
<span id="upload-loaded">0 MB</span> <div class="card-head">
<span id="upload-speed">скорость считается…</span> <h2>Загрузить установочный ISO</h2>
</div> <span class="pill">только .iso</span>
</div> </div>
<button id="iso-upload-button" type="submit" class="primary wide">Загрузить ISO</button> <form id="iso-upload-form" method="post" action="/iso/upload" enctype="multipart/form-data" class="form-grid">
</form> <label class="upload-box">
<p class="muted small-note">Файл попадёт в <b>/var/lib/virtuality/iso</b>. Для готовых системных дисков используй раздел <b>Диски</b>: .img / .raw / .qcow2.</p> <span>Выбери ISO-файл установочного диска</span>
</article> <input id="iso-file-input" type="file" name="iso_file" accept=".iso" required>
</label>
<div id="iso-file-hint" class="muted small-note">Файл ещё не выбран. В этом разделе разрешены только установочные образы .iso.</div>
<div id="upload-progress-wrap" class="upload-progress-wrap" hidden>
<div class="upload-progress-head">
<strong id="upload-status">Подготовка…</strong>
<span id="upload-percent">0%</span>
</div>
<div class="progress big"><span id="upload-progress-bar"></span></div>
<div class="upload-progress-meta">
<span id="upload-loaded">0 MB</span>
<span id="upload-speed">скорость считается…</span>
</div>
</div>
<button id="iso-upload-button" type="submit" class="primary wide">Загрузить ISO</button>
</form>
<p class="muted small-note">Файл попадёт в <b>/var/lib/virtuality/iso</b>. Для готовых системных дисков используй раздел <b>Диски</b>: .img / .raw / .qcow2.</p>
</article>
<article class="card"> <article class="card">
<div class="card-head"> <div class="card-head">
<h2>Действия</h2> <h2>Действия</h2>
<span class="pill">pool</span> <span class="pill">pool</span>
</div> </div>
<div class="actions big-actions"> <div class="actions big-actions">
<form method="post" action="/iso/refresh"><button>Обновить ISO pool</button></form> <form method="post" action="/iso/refresh"><button>Обновить ISO pool</button></form>
<a class="link-pill accent" href="/vm/create">Создать VM</a> <a class="link-pill accent" href="/vm/create">Создать VM</a>
</div> </div>
<pre>sudo virsh pool-refresh virtuality-iso <pre>sudo virsh pool-refresh virtuality-iso
ls -lh /var/lib/virtuality/iso</pre> ls -lh /var/lib/virtuality/iso</pre>
</article> </article>
</section> </section>
<section class="card"> <section class="card">
<div class="card-head"> <div class="card-head">
<h2>ISO-образы</h2> <h2>ISO-образы</h2>
<span class="pill">{{ isos|length }} файлов</span> <span class="pill">{{ isos|length }} файлов</span>
</div> </div>
<table> <table>
<thead> <thead>
<tr><th>Файл</th><th>Размер</th><th>Обновлён</th><th>Действия</th></tr> <tr><th>Файл</th><th>Размер</th><th>Обновлён</th><th>Действия</th></tr>
</thead> </thead>
<tbody> <tbody>
{% for iso in isos %} {% for iso in isos %}
<tr> <tr>
<td class="strong">{{ iso.name }}</td> <td class="strong">{{ iso.name }}</td>
<td>{{ iso.size }}</td> <td>{{ iso.size }}</td>
<td>{{ iso.updated }}</td> <td>{{ iso.updated }}</td>
<td class="actions"> <td class="actions">
<form method="post" action="/iso/{{ iso.name }}/delete" onsubmit="return confirm('Удалить ISO {{ iso.name }}?');"> <form method="post" action="/iso/{{ iso.name }}/delete" onsubmit="return confirm('Удалить ISO {{ iso.name }}?');">
<button class="danger">Удалить</button> <button class="danger">Удалить</button>
</form> </form>
</td> </td>
</tr> </tr>
{% else %} {% else %}
<tr><td colspan="4" class="muted">ISO пока нет. Загрузи первый установочный .iso через форму выше.</td></tr> <tr><td colspan="4" class="muted">ISO пока нет. Загрузи первый установочный .iso через форму выше.</td></tr>
{% endfor %} {% endfor %}
</tbody> </tbody>
</table> </table>
</section> </section>
</main>
</div> </div>
<script> <script>
@@ -232,5 +235,6 @@ ls -lh /var/lib/virtuality/iso</pre>
xhr.send(data); xhr.send(data);
}); });
</script> </script>
<script src="/static/panel.js" defer></script>
</body> </body>
</html> </html>