文件 v0.1.7

VMID 與 IP 配置

本頁說明安裝時未指定 id 的情況下,go-pve-qemu 如何挑出一個可用的 VMID,並以它決定 VM 的 IP。

VMID 與 IP 的對應

GATEWAY = 192.168.0.1
VMID    = 120
IP      = 192.168.0.120/24   (GATEWAY 前三段 + VMID)

因為 IP 末段就是 VMID,VMID 只能落在 100–254:低於 100 是 Proxmox 保留範圍,高於 254 不是合法的主機位址。

探測區間

變數 預設 修正規則
ASSIGN_IP_START 100 0 或 < 100 → 100
ASSIGN_IP_END 254 0 或 > 254 → 254

起訖顛倒時自動交換。

雙端並行探測

每一輪同時為 start 與 end 各開一個 goroutine,接著 start++、end--,直到兩端相遇。同時執行的探測以容量 10 的信號量(semaphore)限制。

每個候選 VMID 依序檢查,任一項命中即放棄:

順序 檢查 命中代表
1 /etc/pve/nodes/*/qemu-server/<vmid>.conf 存在 任一節點已有此 VMID
2 qm config <vmid> 成功 Proxmox 認得此 VMID
3 192.168.0.<vmid>:22 在 2 秒內可連線 該 IP 已有主機在用

第一個通過三項檢查的 VMID 會送進結果 channel,同時取消其他尚未完成的探測。

結果與限制

情況 結果
找到可用 VMID 回傳並作為 VMID 與 IP 末段
全部被占用 cannot find available IP
10 秒內沒有結果 timeout: no available IP found
EN