start: init metadata serveur

Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
GnomeZworc 2025-12-03 23:54:12 +01:00
commit a569cb43f2
Signed by: nicolas.boufideline
GPG key ID: 4406BBBF8845D632
4 changed files with 89 additions and 1 deletions

5
cmd/metadata/main.go Normal file
View file

@ -0,0 +1,5 @@
package main
func main() {
metadata.startServer()
}

2
go.mod
View file

@ -1,3 +1,3 @@
module git.g3e.fr/syonad
module git.g3e.fr/syonad/two
go 1.23.8

View file

@ -0,0 +1,75 @@
package metadata
import (
"encoding/json"
"flag"
"fmt"
"io/ioutil"
"log"
"net"
"net/http"
"time"
)
var data NoCloudData
var (
iface = flag.String("interface", "0.0.0.0", "Interface IP à écouter")
port = flag.Int("port", 8080, "Port à utiliser")
file = flag.String("file", "", "Fichier JSON contenant les données NoCloud")
)
func getIP(r *http.Request) string {
ip, _, err := net.SplitHostPort(r.RemoteAddr)
if err != nil {
return r.RemoteAddr
}
return ip
}
func rootHandler(w http.ResponseWriter, r *http.Request) {
ip := getIP(r)
path := r.URL.Path
timestamp := time.Now().Format(time.RFC3339)
userAgent := r.Header.Get("User-Agent")
log.Printf("[%s] Requête IP %s vers %s | User-Agent: %s", timestamp, ip, path, userAgent)
w.Header().Set("Content-Type", "text/yaml")
switch path {
case "/user-data":
fmt.Fprint(w, data.UserData)
case "/meta-data":
fmt.Fprint(w, data.MetaData)
case "/network-config":
fmt.Fprint(w, data.NetworkConfig)
case "/vendor-data":
fmt.Fprint(w, data.VendorData)
default:
http.NotFound(w, r)
}
}
func startServer() {
flag.Parse()
if *file == "" {
log.Fatal("Vous devez spécifier un fichier via --file")
}
raw, err := ioutil.ReadFile(*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)
address := fmt.Sprintf("%s:%d", *iface, *port)
log.Printf("Serveur NoCloud démarré sur http://%s/", address)
log.Fatal(http.ListenAndServe(address, nil))
}

View file

@ -0,0 +1,8 @@
package metadata
type NoCloudData struct {
MetaData string `json:"meta-data"`
UserData string `json:"user-data"`
NetworkConfig string `json:"network-config"`
VendorData string `json:"vendor-data"`
}