44 lines
825 B
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
|
|
}
|