start: init metadata serveur
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
This commit is contained in:
parent
9e3b7eb4a2
commit
a569cb43f2
4 changed files with 89 additions and 1 deletions
5
cmd/metadata/main.go
Normal file
5
cmd/metadata/main.go
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
package main
|
||||
|
||||
func main() {
|
||||
metadata.startServer()
|
||||
}
|
||||
2
go.mod
2
go.mod
|
|
@ -1,3 +1,3 @@
|
|||
module git.g3e.fr/syonad
|
||||
module git.g3e.fr/syonad/two
|
||||
|
||||
go 1.23.8
|
||||
|
|
|
|||
75
internal/metadata/server.go
Normal file
75
internal/metadata/server.go
Normal 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))
|
||||
}
|
||||
8
internal/metadata/struct.go
Normal file
8
internal/metadata/struct.go
Normal 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"`
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue