add cluster ok value and checks

This commit is contained in:
2026-06-15 16:15:31 +00:00
parent bc849ed7ca
commit abbce2322b
4 changed files with 33 additions and 16 deletions
+15 -4
View File
@@ -76,6 +76,11 @@ func Run() {
}) })
router.GET("/", func(c *gin.Context) { router.GET("/", func(c *gin.Context) {
if !cluster.OK {
c.JSON(http.StatusInternalServerError, gin.H{"error": "cluster state is invalid"})
return
}
v, err := cluster.Get() v, err := cluster.Get()
if err != nil { if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
@@ -87,10 +92,13 @@ func Run() {
}) })
router.GET("/nodes/:node", func(c *gin.Context) { router.GET("/nodes/:node", func(c *gin.Context) {
if !cluster.OK {
c.JSON(http.StatusInternalServerError, gin.H{"error": "cluster state is invalid"})
return
}
nodeid := c.Param("node") nodeid := c.Param("node")
node, err := cluster.GetNode(nodeid) node, err := cluster.GetNode(nodeid)
if err != nil { if err != nil {
c.JSON(http.StatusNotFound, gin.H{"error": err.Error()}) c.JSON(http.StatusNotFound, gin.H{"error": err.Error()})
return return
@@ -101,15 +109,18 @@ func Run() {
}) })
router.GET("/nodes/:node/instances/:vmid", func(c *gin.Context) { router.GET("/nodes/:node/instances/:vmid", func(c *gin.Context) {
if !cluster.OK {
c.JSON(http.StatusInternalServerError, gin.H{"error": "cluster state is invalid"})
return
}
nodeid := c.Param("node") nodeid := c.Param("node")
vmid, err := strconv.ParseUint(c.Param("vmid"), 10, 64) vmid, err := strconv.ParseUint(c.Param("vmid"), 10, 64)
if err != nil { if err != nil {
c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("%s could not be converted to vmid (uint)", c.Param("instance"))}) c.JSON(http.StatusBadRequest, gin.H{"error": fmt.Sprintf("%s could not be converted to vmid (uint)", c.Param("instance"))})
return return
} }
node, err := cluster.GetNode(nodeid) node, err := cluster.GetNode(nodeid)
if err != nil { if err != nil {
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()})
return return
+13 -3
View File
@@ -20,8 +20,11 @@ func (cluster *Cluster) Get() (*Cluster, error) {
// aquire cluster lock // aquire cluster lock
cluster.lock.Lock() cluster.lock.Lock()
defer cluster.lock.Unlock() defer cluster.lock.Unlock()
if cluster.OK {
return cluster, nil return cluster, nil
} else {
return nil, fmt.Errorf("cluster state is invalid")
}
} }
// hard sync cluster // hard sync cluster
@@ -29,6 +32,8 @@ func (cluster *Cluster) Sync() error {
// aquire lock on cluster, release on return // aquire lock on cluster, release on return
cluster.lock.Lock() cluster.lock.Lock()
cluster.OK = false
cluster.Nodes = make(map[string]*Node) cluster.Nodes = make(map[string]*Node)
wg, _ := errgroup.WithContext(context.Background()) wg, _ := errgroup.WithContext(context.Background())
@@ -68,6 +73,10 @@ func (cluster *Cluster) Sync() error {
return err return err
} }
cluster.lock.Lock()
cluster.OK = true
cluster.lock.Unlock()
return nil return nil
} }
@@ -110,6 +119,7 @@ func (cluster *Cluster) GetNode(hostName string) (*Node, error) {
// aquire cluster lock // aquire cluster lock
cluster.lock.Lock() cluster.lock.Lock()
defer cluster.lock.Unlock() defer cluster.lock.Unlock()
// get host // get host
host, ok := cluster.Nodes[hostName] host, ok := cluster.Nodes[hostName]
if !ok { if !ok {
@@ -202,10 +212,10 @@ func (cluster *Cluster) RebuildNode(hostName string) error {
} }
func (host *Node) GetInstance(vmid uint) (*Instance, error) { func (host *Node) GetInstance(vmid uint) (*Instance, error) {
// aquire host lock // aquire host lock
host.lock.Lock() host.lock.Lock()
defer host.lock.Unlock() defer host.lock.Unlock()
// get instance // get instance
instance, ok := host.Instances[InstanceID(vmid)] instance, ok := host.Instances[InstanceID(vmid)]
if !ok { if !ok {
+4 -9
View File
@@ -4,6 +4,7 @@ import (
"context" "context"
"crypto/tls" "crypto/tls"
"fmt" "fmt"
"maps"
"net/http" "net/http"
"strconv" "strconv"
"strings" "strings"
@@ -200,9 +201,7 @@ func (host *Node) VirtualMachine(VMID uint) (*Instance, error) {
func MergeVMDisksAndUnused(vmc *proxmox.VirtualMachineConfig) map[string]string { func MergeVMDisksAndUnused(vmc *proxmox.VirtualMachineConfig) map[string]string {
mergedDisks := vmc.MergeDisks() mergedDisks := vmc.MergeDisks()
for k, v := range vmc.Unuseds { maps.Copy(mergedDisks, vmc.Unuseds)
mergedDisks[k] = v
}
return mergedDisks return mergedDisks
} }
@@ -247,12 +246,8 @@ func (host *Node) Container(VMID uint) (*Instance, error) {
func MergeCTDisksAndUnused(cc *proxmox.ContainerConfig) map[string]string { func MergeCTDisksAndUnused(cc *proxmox.ContainerConfig) map[string]string {
mergedDisks := make(map[string]string) mergedDisks := make(map[string]string)
for k, v := range cc.Unuseds { maps.Copy(mergedDisks, cc.Unuseds)
mergedDisks[k] = v maps.Copy(mergedDisks, cc.Mps)
}
for k, v := range cc.Mps {
mergedDisks[k] = v
}
mergedDisks["rootfs"] = cc.RootFS mergedDisks["rootfs"] = cc.RootFS
return mergedDisks return mergedDisks
} }
+1
View File
@@ -17,6 +17,7 @@ type Cluster struct {
lock sync.Mutex lock sync.Mutex
pve ProxmoxClient pve ProxmoxClient
Nodes map[string]*Node `json:"nodes"` Nodes map[string]*Node `json:"nodes"`
OK bool
} }
// add mutex and pve api Node object // add mutex and pve api Node object