f-8: code: use db for database config #8
All checks were successful
Pre Release Workflow / set-release-target (push) Successful in 1s
Pre Release Workflow / build (agent, amd64, linux) (push) Successful in 1m5s
Pre Release Workflow / build (db, amd64, linux) (push) Successful in 1m48s
Pre Release Workflow / build (meta_cli, amd64, linux) (push) Successful in 1m27s
Pre Release Workflow / build (metadata, amd64, linux) (push) Successful in 1m28s
Pre Release Workflow / prerelease (push) Successful in 12s
All checks were successful
Pre Release Workflow / set-release-target (push) Successful in 1s
Pre Release Workflow / build (agent, amd64, linux) (push) Successful in 1m5s
Pre Release Workflow / build (db, amd64, linux) (push) Successful in 1m48s
Pre Release Workflow / build (meta_cli, amd64, linux) (push) Successful in 1m27s
Pre Release Workflow / build (metadata, amd64, linux) (push) Successful in 1m28s
Pre Release Workflow / prerelease (push) Successful in 12s
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
parent
fc624e7e96
commit
d2bc7e5b7a
4 changed files with 92 additions and 33 deletions
|
|
@ -2,29 +2,26 @@ package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
"log"
|
|
||||||
|
|
||||||
"git.g3e.fr/syonad/two/internal/metadata"
|
"git.g3e.fr/syonad/two/internal/metadata"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
iface = flag.String("interface", "0.0.0.0", "Interface IP à écouter")
|
iface = flag.String("interface", "0.0.0.0", "Interface IP à écouter")
|
||||||
port = flag.Int("port", 8080, "Port à utiliser")
|
port = flag.Int("port", 0, "Port à utiliser")
|
||||||
file = flag.String("file", "", "Fichier JSON contenant les données NoCloud")
|
|
||||||
netns_name = flag.String("netns", "", "Network namespace à utiliser")
|
netns_name = flag.String("netns", "", "Network namespace à utiliser")
|
||||||
|
conf_file = flag.String("conf", "/etc/two/agent.yml", "configuration file")
|
||||||
|
vm_name = flag.String("vm", "", "Name of the vm")
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
if *file == "" {
|
|
||||||
log.Fatal("Vous devez spécifier un fichier via --file")
|
|
||||||
}
|
|
||||||
|
|
||||||
metadata.StartServer(metadata.Config{
|
metadata.StartServer(metadata.Config{
|
||||||
Netns: *netns_name,
|
Netns: *netns_name,
|
||||||
File: *file,
|
Iface: *iface,
|
||||||
Iface: *iface,
|
Port: *port,
|
||||||
Port: *port,
|
ConfFile: *conf_file,
|
||||||
|
VmName: *vm_name,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,15 @@
|
||||||
package metadata
|
package metadata
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding/json"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"io/ioutil"
|
|
||||||
"log"
|
"log"
|
||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"git.g3e.fr/syonad/two/internal/netns"
|
"git.g3e.fr/syonad/two/internal/netns"
|
||||||
|
"git.g3e.fr/syonad/two/pkg/db/kv"
|
||||||
)
|
)
|
||||||
|
|
||||||
var data NoCloudData
|
var data NoCloudData
|
||||||
|
|
@ -22,6 +22,48 @@ func getIP(r *http.Request) string {
|
||||||
return ip
|
return ip
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getFromDB(config Config) NoCloudData {
|
||||||
|
var netns_name string
|
||||||
|
var port int
|
||||||
|
var iface string
|
||||||
|
|
||||||
|
db := kv.InitDB(kv.Config{Path: config.ConfFile})
|
||||||
|
|
||||||
|
metadata, _ := kv.GetFromDB(db, "metadata/"+config.VmName+"/meta-data")
|
||||||
|
userdata, _ := kv.GetFromDB(db, "metadata/"+config.VmName+"/user-data")
|
||||||
|
networkconfig, _ := kv.GetFromDB(db, "metadata/"+config.VmName+"/network-config")
|
||||||
|
vendordata, _ := kv.GetFromDB(db, "metadata/"+config.VmName+"/vendor-data")
|
||||||
|
|
||||||
|
if config.Netns == "" {
|
||||||
|
netns_name, _ = kv.GetFromDB(db, "metadata/"+config.VmName+"/vpc")
|
||||||
|
} else {
|
||||||
|
netns_name = config.Netns
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.Iface == "" {
|
||||||
|
iface, _ = kv.GetFromDB(db, "metadata/"+config.VmName+"/bind_ip")
|
||||||
|
} else {
|
||||||
|
iface = config.Iface
|
||||||
|
}
|
||||||
|
|
||||||
|
if config.Port == 0 {
|
||||||
|
sport, _ := kv.GetFromDB(db, "metadata/"+config.VmName+"/bind_port")
|
||||||
|
port, _ = strconv.Atoi(sport)
|
||||||
|
} else {
|
||||||
|
port = config.Port
|
||||||
|
}
|
||||||
|
|
||||||
|
return NoCloudData{
|
||||||
|
MetaData: metadata,
|
||||||
|
UserData: userdata,
|
||||||
|
NetworkConfig: networkconfig,
|
||||||
|
VendorData: vendordata,
|
||||||
|
NetNs: netns_name,
|
||||||
|
Iface: iface,
|
||||||
|
Port: port,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func rootHandler(w http.ResponseWriter, r *http.Request) {
|
func rootHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
ip := getIP(r)
|
ip := getIP(r)
|
||||||
path := r.URL.Path
|
path := r.URL.Path
|
||||||
|
|
@ -47,24 +89,17 @@ func rootHandler(w http.ResponseWriter, r *http.Request) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func StartServer(config Config) {
|
func StartServer(config Config) {
|
||||||
if config.Netns != "" {
|
data = getFromDB(config)
|
||||||
if err := netns.Enter(config.Netns); err != nil {
|
|
||||||
|
if data.NetNs != "" {
|
||||||
|
if err := netns.Enter(data.NetNs); err != nil {
|
||||||
log.Fatalf("Impossible d'entrer dans le netns: %v", err)
|
log.Fatalf("Impossible d'entrer dans le netns: %v", err)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
raw, err := ioutil.ReadFile(config.File)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("Erreur de lecture du fichier: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := json.Unmarshal(raw, &data); err != nil {
|
|
||||||
log.Fatalf("Erreur de parsing JSON: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
http.HandleFunc("/", rootHandler)
|
http.HandleFunc("/", rootHandler)
|
||||||
|
|
||||||
address := fmt.Sprintf("%s:%d", config.Iface, config.Port)
|
address := fmt.Sprintf("%s:%d", data.Iface, data.Port)
|
||||||
log.Printf("Serveur NoCloud démarré sur http://%s/", address)
|
log.Printf("Serveur NoCloud démarré sur http://%s/", address)
|
||||||
log.Fatal(http.ListenAndServe(address, nil))
|
log.Fatal(http.ListenAndServe(address, nil))
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,15 +1,20 @@
|
||||||
package metadata
|
package metadata
|
||||||
|
|
||||||
type NoCloudData struct {
|
type NoCloudData struct {
|
||||||
MetaData string `json:"meta-data"`
|
MetaData string
|
||||||
UserData string `json:"user-data"`
|
UserData string
|
||||||
NetworkConfig string `json:"network-config"`
|
NetworkConfig string
|
||||||
VendorData string `json:"vendor-data"`
|
VendorData string
|
||||||
|
NetNs string
|
||||||
|
Iface string
|
||||||
|
Port int
|
||||||
}
|
}
|
||||||
|
|
||||||
type Config struct {
|
type Config struct {
|
||||||
Netns string
|
Netns string
|
||||||
File string
|
File string
|
||||||
Iface string
|
Iface string
|
||||||
Port int
|
Port int
|
||||||
|
ConfFile string
|
||||||
|
VmName string
|
||||||
}
|
}
|
||||||
|
|
|
||||||
22
pkg/db/kv/getInDB.go
Normal file
22
pkg/db/kv/getInDB.go
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
package kv
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/dgraph-io/badger/v4"
|
||||||
|
)
|
||||||
|
|
||||||
|
func GetFromDB(db *badger.DB, key string) (string, error) {
|
||||||
|
var result string
|
||||||
|
|
||||||
|
err := db.View(func(txn *badger.Txn) error {
|
||||||
|
item, err := txn.Get([]byte(key))
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
return item.Value(func(val []byte) error {
|
||||||
|
result = string(val)
|
||||||
|
return nil
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
return result, err
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue