compute/pkg/etcd/client.go

44 lines
825 B
Go

package etcd
import (
"context"
"encoding/json"
"log"
"strings"
"time"
clientv3 "go.etcd.io/etcd/client/v3"
)
type Node struct {
IpManagement string `json:"ip_mgmt"`
}
func New(uri string) (*clientv3.Client, error) {
etcd, err := clientv3.New(clientv3.Config{
Endpoints: strings.Split(uri, ","),
DialTimeout: 5 * time.Second,
})
if err != nil {
log.Fatalf("Error connexion to etcd: %v", err)
}
return etcd, nil
}
func GetNodes(c *clientv3.Client, cluster_id string) map[string]Node {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
resp, _ := c.Get(ctx, "/deevirt/cluster/"+cluster_id)
var nodes map[string]Node
err := json.Unmarshal(resp.Kvs[0].Value, &nodes)
if err != nil {
log.Fatal("Erreur lors du parsing du JSON: ", err)
}
return nodes
}