Merge pull request 'feature-11' (#13) from feature-11 into main

Reviewed-on: #13
This commit is contained in:
nicolas.boufideline 2026-01-08 22:13:03 +00:00 committed by G3E Git Instance
commit 473e1d0108
Signed by: G3E Git Instance
SSH key fingerprint: SHA256:7qPkHsv5cK9DqRLWKVhd6yvG6rpDxbWny9r8CMChJb0
14 changed files with 91 additions and 77 deletions

View file

@ -32,7 +32,7 @@ jobs:
matrix: matrix:
goos: [linux] goos: [linux]
goarch: [amd64] goarch: [amd64]
binaries: [db, metadata, meta_cli, agent] binaries: [db, metadata, metacli, agent]
uses: ./.forgejo/workflows/build.yml uses: ./.forgejo/workflows/build.yml
with: with:
tag: ${{ needs.set-release-target.outputs.release_cible }} tag: ${{ needs.set-release-target.outputs.release_cible }}

View file

@ -5,9 +5,8 @@ import (
"fmt" "fmt"
configuration "git.g3e.fr/syonad/two/internal/config/agent" configuration "git.g3e.fr/syonad/two/internal/config/agent"
"git.g3e.fr/syonad/two/internal/load_db/nocloud" "git.g3e.fr/syonad/two/internal/metadata"
"git.g3e.fr/syonad/two/pkg/db/kv" "git.g3e.fr/syonad/two/pkg/db/kv"
"git.g3e.fr/syonad/two/pkg/systemd"
) )
func main() { func main() {
@ -20,17 +19,15 @@ func main() {
password := flag.String("pass", "", "password user") password := flag.String("pass", "", "password user")
start := flag.Bool("start", false, "start metadata server") start := flag.Bool("start", false, "start metadata server")
stop := flag.Bool("stop", false, "stop metadata server") stop := flag.Bool("stop", false, "stop metadata server")
dryrun := flag.Bool("dryrun", false, "launch in dry node")
flag.Parse() flag.Parse()
service, _ := systemd.New()
conf, err := configuration.LoadConfig(*conf_file) conf, err := configuration.LoadConfig(*conf_file)
if err != nil { if err != nil {
fmt.Println(err) fmt.Println(err)
return return
} }
fmt.Print(conf)
db := kv.InitDB(kv.Config{ db := kv.InitDB(kv.Config{
Path: conf.Database.Path, Path: conf.Database.Path,
@ -38,17 +35,15 @@ func main() {
defer db.Close() defer db.Close()
if *start { if *start {
nocloud.LoadNcCloudInDB(nocloud.Config{ metadata.StartMetadata(metadata.NoCloudConfig{
VpcName: *vpc, VpcName: *vpc,
Name: *vm_name, Name: *vm_name,
BindIP: *bind_ip, BindIP: *bind_ip,
BindPort: *bind_port, BindPort: *bind_port,
Password: *password, Password: *password,
SSHKEY: *ssh_key, SSHKEY: *ssh_key,
}, db) }, db, *dryrun)
service.Start("metadata@" + *vm_name)
} else if *stop { } else if *stop {
nocloud.UnLoadNoCloudInDB(*vm_name, db) metadata.StopMetadata(*vm_name, db, *dryrun)
service.Stop("metadata@" + *vm_name)
} }
} }

View file

@ -17,7 +17,7 @@ var (
func main() { func main() {
flag.Parse() flag.Parse()
metadata.StartServer(metadata.Config{ metadata.StartServer(metadata.ServerConfig{
Netns: *netns_name, Netns: *netns_name,
Iface: *iface, Iface: *iface,
Port: *port, Port: *port,

View file

@ -1,50 +0,0 @@
package nocloud
import (
"bytes"
"embed"
"text/template"
"git.g3e.fr/syonad/two/pkg/db/kv"
"github.com/dgraph-io/badger/v4"
)
//go:embed templates/*.tmpl
var templateFS embed.FS
func renderConfig(path string, cfg Config) (string, error) {
tpl, err := template.ParseFS(templateFS, path)
if err != nil {
return "", err
}
var buf bytes.Buffer
if err := tpl.Execute(&buf, cfg); err != nil {
return "", err
}
return buf.String(), nil
}
var DB *badger.DB
func LoadNcCloudInDB(config Config, db *badger.DB) {
meta_data, _ := renderConfig("templates/meta-data.tmpl", config)
user_data, _ := renderConfig("templates/user-data.tmpl", config)
network_config, _ := renderConfig("templates/network-config.tmpl", config)
vendor_data, _ := renderConfig("templates/vendor-data.tmpl", config)
DB = db
kv.AddInDB(DB, "metadata/"+config.Name+"/meta-data", meta_data)
kv.AddInDB(DB, "metadata/"+config.Name+"/user-data", user_data)
kv.AddInDB(DB, "metadata/"+config.Name+"/network-config", network_config)
kv.AddInDB(DB, "metadata/"+config.Name+"/vendor-data", vendor_data)
kv.AddInDB(DB, "metadata/"+config.Name+"/vpc", config.VpcName)
kv.AddInDB(DB, "metadata/"+config.Name+"/bind_ip", config.BindIP)
kv.AddInDB(DB, "metadata/"+config.Name+"/bind_port", config.BindPort)
}
func UnLoadNoCloudInDB(vm_name string, db *badger.DB) {
kv.DeleteInDB(DB, "metadata/"+vm_name)
}

View file

@ -1,10 +0,0 @@
package nocloud
type Config struct {
VpcName string
BindIP string
BindPort string
Name string
Password string
SSHKEY string
}

View file

@ -0,0 +1,26 @@
package metadata
import (
"git.g3e.fr/syonad/two/pkg/systemd"
"github.com/dgraph-io/badger/v4"
)
func StartMetadata(config NoCloudConfig, db *badger.DB, dryrun bool) {
service, _ := systemd.New()
defer service.Close()
LoadNcCloudInDB(config, db)
if !dryrun {
service.Start("metadata@" + config.Name)
}
}
func StopMetadata(vm_name string, db *badger.DB, dryrun bool) {
service, _ := systemd.New()
defer service.Close()
UnLoadNoCloudInDB(vm_name, db)
if !dryrun {
service.Stop("metadata@" + vm_name)
}
}

View file

@ -0,0 +1,46 @@
package metadata
import (
"bytes"
"embed"
"text/template"
"git.g3e.fr/syonad/two/pkg/db/kv"
"github.com/dgraph-io/badger/v4"
)
//go:embed templates/*.tmpl
var templateFS embed.FS
func RenderConfig(path string, cfg NoCloudConfig) (string, error) {
tpl, err := template.ParseFS(templateFS, path)
if err != nil {
return "", err
}
var buf bytes.Buffer
if err := tpl.Execute(&buf, cfg); err != nil {
return "", err
}
return buf.String(), nil
}
func LoadNcCloudInDB(config NoCloudConfig, db *badger.DB) {
meta_data, _ := RenderConfig("templates/meta-data.tmpl", config)
user_data, _ := RenderConfig("templates/user-data.tmpl", config)
network_config, _ := RenderConfig("templates/network-config.tmpl", config)
vendor_data, _ := RenderConfig("templates/vendor-data.tmpl", config)
kv.AddInDB(db, "metadata/"+config.Name+"/meta-data", meta_data)
kv.AddInDB(db, "metadata/"+config.Name+"/user-data", user_data)
kv.AddInDB(db, "metadata/"+config.Name+"/network-config", network_config)
kv.AddInDB(db, "metadata/"+config.Name+"/vendor-data", vendor_data)
kv.AddInDB(db, "metadata/"+config.Name+"/vpc", config.VpcName)
kv.AddInDB(db, "metadata/"+config.Name+"/bind_ip", config.BindIP)
kv.AddInDB(db, "metadata/"+config.Name+"/bind_port", config.BindPort)
}
func UnLoadNoCloudInDB(vm_name string, db *badger.DB) {
kv.DeleteInDB(db, "metadata/"+vm_name)
}

View file

@ -23,7 +23,7 @@ func getIP(r *http.Request) string {
return ip return ip
} }
func getFromDB(config Config) NoCloudData { func getFromDB(config ServerConfig) NoCloudData {
var netns_name string var netns_name string
var port int var port int
var iface string var iface string
@ -92,7 +92,7 @@ func rootHandler(w http.ResponseWriter, r *http.Request) {
} }
} }
func StartServer(config Config) { func StartServer(config ServerConfig) {
data = getFromDB(config) data = getFromDB(config)
if data.NetNs != "" { if data.NetNs != "" {

View file

@ -10,7 +10,7 @@ type NoCloudData struct {
Port int Port int
} }
type Config struct { type ServerConfig struct {
Netns string Netns string
File string File string
Iface string Iface string
@ -18,3 +18,12 @@ type Config struct {
ConfFile string ConfFile string
VmName string VmName string
} }
type NoCloudConfig struct {
VpcName string
BindIP string
BindPort string
Name string
Password string
SSHKEY string
}

View file

@ -1,7 +1,6 @@
package kv package kv
import ( import (
"fmt"
"log" "log"
"github.com/dgraph-io/badger/v4" "github.com/dgraph-io/badger/v4"
@ -29,7 +28,6 @@ func DeleteInDB(db *badger.DB, key string) error {
key := item.Key() key := item.Key()
k := append([]byte{}, key...) k := append([]byte{}, key...)
fmt.Println(string(k))
if err := deleteKey(db, string(k)); err != nil { if err := deleteKey(db, string(k)); err != nil {
return err return err
} }