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