Skip to content

Releases: dutyc/kurrent

v0.2.0

Choose a tag to compare

@dutyc dutyc released this 16 Aug 07:37

设备池与绑定体系 (P1–P3)、批量操作与 WebUI 全面升级
Device pool & binding (P1–P3), batch operations and a major WebUI upgrade


中文版

v0.2.0 引入设备实体与「设备池 → 绑定 Worker → 挂盘」三实体模型:新机器上报指纹自动入池,管理员在 WebUI 将其绑定到 Worker 并克隆系统盘后,机器自动进入目标系统。自动注册语义已反转(新 MAC 入池而非自动建 Worker),升级前请阅读「升级注意」。

新增

  • 设备台账(P1)——state/devices.yml 三层实体模型落地,设备状态 pooled / bound / revoked;新增 GET /devices(state 过滤)、GET /devices/{mac}POST /devices(手动注册)、POST /devices/import(批量入池,逐项独立、重复跳过)、DELETE /devices/{mac}(注销,绑定设备须先解绑)
  • 设备指纹上报——GET /devices/report(不鉴权):iPXE 上报 11 字段指纹(MAC/UUID/SMBIOS/CPU/内存/网卡),未知 MAC 且自动注册开启时自动入池;boot.ipxe.cfg/boot-vars 前先上报,失败静默不影响引导
  • 设备↔Worker 一对一绑定(P2)——绑定权威在设备侧:POST /devices/{mac}/bind(force=true 原子换绑,失败回滚台账快照)、DELETE /devices/{mac}/bind(解绑回池,盘留 Worker)、POST /devices/bind/batch/preview + POST /devices/bind/batch(清单配对 / 顺序配对,逐项独立、幂等、逐条审计)
  • boot-vars 防冒领(D2,绑定即认证)——带 mac/boot-vars 请求须来自命中 Worker 的绑定设备,不符拒绝下发空脚本
  • 批量创建 Worker(P3)——POST /workers/batch:count + name_prefix 一次生成(如 worker-worker-01…),可选 MAC 清单逐项校验并直接绑定
  • Worker 就绪度派生字段——bound_device + readiness(ready / partial / idle)
  • 旧数据迁移——启动时幂等扫描存量 workers.yml + dhcp-hosts.conf,为存量绑定生成设备实体

WebUI

  • 设备池页(/devices)——状态过滤 / 搜索 / 行展开完整指纹、自动注册开关、手动注册、批量登记入池、多选解绑、绑定历史(换绑显示旧→新)、MAC 复制、「页面介绍」弹层
  • 绑定向导——图形化顺序分配(默认,双栏勾选按序对应,Worker 不足按前缀自动补建)/ 清单配对两种模式,预览配对表 → 导出 TSV → 二次确认 → 失败项保留重试
  • Workers 页——批量创建 Worker、批量创建系统盘(母盘克隆/空白盘,接管/拖拽/均摊分配存储节点)、批量删除、readiness 三态徽章、绑定列、「页面介绍」弹层
  • Agents 页——「页面介绍」弹层
  • Dashboard——新增设备数量统计卡(Workers / 设备池 / Agents 三卡)
  • 文案消歧——「导入清单」更名为「登记设备入池」,悬停提示「不涉及绑定」

变更

  • 自动注册语义反转(P1)——新 MAC 不再自动创建 Worker + dnsmasq 绑定,只入设备池等待绑定;IPXE_CP_AUTO_REGISTER 开关语义同步为「是否自动入池」,开关位置移至 Devices 页工具栏
  • POST /workersmac 改为可选——不传 = 纯空转 Worker;传 = 校验设备池并直接绑定,池外/已绑定 → 409
  • PUT /workers/{worker_id}/mac 映射为设备换绑删除 Worker 联动解绑设备(失败中止删除)
  • GET /operations 支持 mac 过滤,批量绑定逐条审计
  • WebUI 版本号升至 0.2.0

修复

  • /boot-vars reboot 循环 payload 缺 worker_id 导致 500(池中未绑定设备场景)

文档

  • 新增《WebUI 使用指南》(中英双语):页面分区、核心流程(入池 → 绑定 → 克隆建盘 → 默认启动)、常见问题
  • 快速部署系列修正 P1 反转前的过期流程(自动入池 + 绑定向导)、2.4 节补充 WebUI 登记 Agent 方式

升级注意

  • 自动注册语义反转:旧行为(新 MAC 自动成为 Worker)已移除,新设备仅入池,须在 WebUI「绑定向导」绑定后才会按 Worker 配置引导;未绑定设备保持 reboot 循环等待
  • 新增运行时状态文件 state/devices.yml(不入库);settings.json 纳入 .gitignore
  • 存量部署启动时自动迁移旧绑定,无需手工处理

English Version

v0.2.0 introduces the device entity and the three-entity model — pool → bind to Worker → mount disk. New machines report fingerprints and are auto-admitted into the device pool; the admin binds them to a Worker and clones a system disk in the WebUI, after which the machine boots straight into the target system. The auto-register semantics have flipped (new MACs enter the pool instead of auto-creating Workers) — read Upgrade Notes before upgrading.

New

  • Device ledger (P1)state/devices.yml implements the three-entity model; device states pooled / bound / revoked; new endpoints GET /devices (state filter), GET /devices/{mac}, POST /devices (manual register), POST /devices/import (bulk intake, per-item independent, duplicates skipped), DELETE /devices/{mac} (revoke; bound devices must be unbound first)
  • Fingerprint reportingGET /devices/report (unauthenticated): iPXE reports an 11-field fingerprint (MAC / UUID / SMBIOS / CPU / memory / NIC); unknown MACs are auto-admitted when auto-register is on; boot.ipxe.cfg reports before /boot-vars, failing silently without blocking boot
  • 1:1 device↔Worker binding (P2) — authority on the device side: POST /devices/{mac}/bind (force=true atomic rebind with ledger-snapshot rollback), DELETE /devices/{mac}/bind (back to pool, disk stays on the Worker), POST /devices/bind/batch/preview + POST /devices/bind/batch (manifest / sequential pairing, per-item independent, idempotent, per-item audit)
  • boot-vars anti-theft (D2, binding = authentication)/boot-vars requests carrying a mac must come from the device bound to the matched Worker; otherwise an empty script is returned
  • Batch Worker creation (P3)POST /workers/batch: count + name_prefix in one go (e.g. worker-worker-01…), optional MAC list validated and bound per item
  • Worker readiness projectionbound_device + readiness (ready / partial / idle)
  • Legacy migration — on startup, existing workers.yml + dhcp-hosts.conf bindings are migrated into device entities idempotently

WebUI

  • Devices page (/devices) — state filter / search / expanded fingerprint, auto-register switch, manual register, bulk intake, multi-select unbind, binding history (rebinds show old → new), MAC copy, page guide popover
  • Bind wizard — graphical sequential allocation (default; two columns checked in order, missing Workers auto-created by prefix) / manifest pairing; preview → TSV export → confirm → retry with failed items kept
  • Workers page — batch Worker creation, batch system-disk creation (master clone / empty disk; takeover / drag / spread node assignment), bulk delete, readiness badge, bound-device column, page guide popover
  • Agents page — page guide popover
  • Dashboard — device counter card (Workers / Device Pool / Agents)
  • Naming disambiguation — "Import list" renamed to "Register to Pool" with a "No binding involved" hover hint

Changed

  • Auto-register semantic flip (P1) — new MACs no longer auto-create a Worker + dnsmasq binding; they only enter the device pool awaiting binding; the IPXE_CP_AUTO_REGISTER switch now means "auto-admit to pool" and moved to the Devices page toolbar
  • POST /workers mac is now optional — omitted = idle Worker (hostname only); provided = validated against the pool and bound directly; outside pool / already bound → 409
  • PUT /workers/{worker_id}/mac now performs a device rebind; deleting a Worker unbinds its device first (aborts on failure)
  • GET /operations supports mac filtering; batch bindings are audited per item
  • WebUI version bumped to 0.2.0

Fixed

  • 500 on /boot-vars reboot-loop payload missing worker_id (pooled-but-unbound devices)

Docs

  • New bilingual WebUI User Guide: page walkthrough, core flow (pool → bind → clone disk → default boot), troubleshooting
  • Quick-deploy guides fixed to post-P1 flows (auto-pool + bind wizard); §2.4 adds WebUI agent registration

Upgrade Notes

  • Auto-register semantic flip: the old behavior (new MAC auto-becomes a Worker) is gone; new devices only enter the pool and are guided only after being bound via the Bind wizard; unbound devices keep rebooting until configured
  • New runtime state file state/devices.yml (not committed); settings.json added to .gitignore
  • Existing deployments migrate legacy bindings automatically at startup — no manual steps

v0.1.2

Choose a tag to compare

@dutyc dutyc released this 07 Aug 10:45

This update adds multi-node master-image cloning, ZFS reflink support, and a runtime auto-registration switch.

Master-Image Cloning

  • Multi-node spread: master dropdown deduplicated to plain names; node assignment via spread / takeover / drag sidebar
  • Submit-time validation: the master must exist locally on every target node (all spread participants, or actually assigned nodes); missing nodes block submission

ZFS Support & Filesystem Visibility

  • ZFS (OpenZFS ≥ 2.2, same dataset) clones via FICLONE reflink — second-level, zero extra disk; older/cross-dataset falls back to full copy with diagnostics
  • /capabilities exposes fs_type; Control Plane and WebUI (Agent cards, probe dialog) show the storage filesystem

Runtime Auto-Registration Switch

  • New GET/PUT /settings/auto-register toggles auto-registration at runtime: persisted, immediate, survives restarts, overrides the IPXE_CP_AUTO_REGISTER env var (now just the startup default)
  • WebUI Workers toolbar toggle button (dark = on, light = off); affects new MACs only, existing Workers untouched

v0.1.1

Choose a tag to compare

@dutyc dutyc released this 04 Aug 09:36

This update focuses on online Agent management and the golden‑image cloning experience.

Agent Management
Added PUT /agents/{agent_id} to the Control Plane: updates an existing Agent’s configuration (address, token, role, tags, and enabled status are fully overwritten; leaving the token empty preserves its original value; disabled Agents no longer participate in disk provisioning or scheduling).

POST /agents/probe now accepts an optional agent_id parameter: in edit scenarios, if the token is left empty, it automatically reuses the stored token from the registration record for probing.

Added an Edit button on the WebUI Agents page: uses the same two‑step probing flow in a modal overlay; disabled Agents display a Disabled badge.

Master Image Inventory & Cloning
Agents now expose GET /masters: a background daemon thread periodically scans the storage node’s master images and caches them with a lock (interval: 30 seconds).

Control Plane added GET /masters: aggregates the master‑image inventory from all enabled disk‑role storage nodes; failure of a single node does not block the overall response.

WebUI master‑image cloning has been changed to a dropdown selection: both batch creation and the Worker detail page now pick directly from the scanned master‑image list; once selected, the Worker is automatically assigned to the node hosting that master image.

v0.1.0

Choose a tag to compare

@dutyc dutyc released this 03 Aug 13:46

iPXE-All-Ready is an open-source, stateless compute-node delivery platform built on iPXE and iSCSI. Nodes without local storage boot over the network with no pre-registration and no vendor lock-in.

This release marks the completion of Phase 1: the project has evolved from a diskless-boot proof of concept into a full control plane. New machines are detected and registered automatically on power-on; attaching system disks and switching the default boot OS are performed from the web UI.

Features

Batch System Disk Deployment

  • Batch selection with Shift-range multi-select; storage node assignment via single-node takeover, per-worker drag-and-drop, or round-robin spread across multiple nodes.
  • Disk creation from a master image (reflink clone with copy fallback) or as an empty sparse disk; successfully created workers are automatically set as the default boot OS.
  • Workers that already have a system disk are highlighted; duplicate OS creation is skipped.

Batch Worker Deletion

  • Dedicated deletion mode, mutually exclusive with batch creation. Confirmation dialog supports deleting the backing .img files and ignoring missing targets.
  • Items are executed independently: a failed item does not affect the rest. Successful items are persisted to the ledger and dnsmasq is reloaded once per batch.

Agent Registration and LUN Management

  • Two-step agent registration: POST /agents/probe derives registration parameters (role, tags, iscsi_server) from the agent's health and capability endpoints; POST /agents persists them to agents.yml (tokens support ${ENV} placeholders).
  • Direct LUN management per agent: list, create disk, create CD, delete, and scan/recreate targets.

Boot Variables and Disk Management

  • /boot-vars returns backend-specific connection separators (stgt :::1: / LIO ::::), enabling a single iPXE script across backends.
  • Per-worker disk deletion and a configurable default boot OS (os / menu_default / menu_timeout, each settable or clearable).

Platform Foundation

  • Zero-touch provisioning: unbound MACs are registered automatically with an auto-assigned hostname.
  • Multi-OS support verified end to end: Windows 11 24H2/25H2, Ubuntu 22.04 LTS, and Debian 12.
  • File-based state management: agents.yml, workers.yml, dhcp-hosts.conf, and operations.jsonl carry all control-plane state; no database, fully diffable and manually recoverable.
  • The bootstrap chain is built with debootstrap and dism++ instead of vendor installers, keeping every stage auditable.

Quick Start

git clone https://github.com/dutyc/ipxe-all-ready
cd ipxe-all-ready

# 1. Adapt dnsmasq/dnsmasq.conf: NIC name, subnet, gateway
# 2. Prepare the Control Plane config (the repo tracks only *.env.example
#    templates, which carry full comments):
cp control_plane/control_plane.env.example control_plane/control_plane.env
#    - Optional: set IPXE_CP_TOKEN to enable API auth (keep it in sync
#      with the Web UI's VITE_CP_TOKEN)
docker compose up -d

# 3. (Optional) Storage node: deploy the iscsi-server directory on it
#    cp iscsi-server/.env.example iscsi-server/.env
#    set IPXE_AGENT_TOKEN (must match the token of this node in agents.yml)
#    docker compose -f iscsi-server/docker-compose.yml up -d
  • Web UI: http://<controller-ip>:4838
  • Control Plane API: http://<controller-ip>:4839

Full deployment guidance: Environment Setup guide

Changes in This Release

Features

  • Batch system disk deployment (storage node assignment, default_os auto-set)
  • Batch worker deletion (independent mode, mutually exclusive with batch creation)
  • Two-step agent probe and registration; "Add Agent" flow in the Agents page
  • Direct agent LUN management endpoints (/agents/{id}/luns, scan)
  • Backend-specific connection separators in /boot-vars
  • Per-worker disk deletion; default boot OS fields settable/clearable

Engineering and release preparation

  • Environment configuration finalized: webui/app/.env.example added; all .env(.example) files fully commented
  • Sensitive-information cleanup: files containing deployment tokens untracked; the repository ships *.example templates only
  • Version unified to 0.1.0

Notes

  • Storage-node agents drive the local iSCSI container via docker.sock; expose them only on the control or trusted management network, never directly to the public internet.
  • The LIO backend does not support CD-ROM devices; schedule ISO mounts to stgt nodes (cd=true).
  • This project targets intranet deployments; TLS and multi-tenant isolation are not provided.

Documentation

  • Architecture and core boot chain: https://ipxe.lecreate.asia
  • Windows 11 diskless workflow, Debian 12 diskless workflow, iBFT evidence chain, control-plane reference

Roadmap

The long-term goal is a cross-platform, cross-architecture, cloud-native stateless compute infrastructure. Phase planning is maintained in ROADMAP.md.