feature-11 #13

Merged
nicolas.boufideline merged 7 commits from feature-11 into main 2026-01-08 22:13:04 +00:00
14 changed files with 91 additions and 77 deletions

View file

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

View file

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

View file

@ -17,7 +17,7 @@ var (
func main() {
flag.Parse()
metadata.StartServer(metadata.Config{
metadata.StartServer(metadata.ServerConfig{
Netns: *netns_name,
Iface: *iface,
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
}
func getFromDB(config Config) NoCloudData {
func getFromDB(config ServerConfig) NoCloudData {
var netns_name string
var port int
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)
if data.NetNs != "" {

View file

@ -10,7 +10,7 @@ type NoCloudData struct {
Port int
}
type Config struct {
type ServerConfig struct {
Netns string
File string
Iface string
@ -18,3 +18,12 @@ type Config struct {
ConfFile 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
import (
"fmt"
"log"
"github.com/dgraph-io/badger/v4"
@ -29,7 +28,6 @@ func DeleteInDB(db *badger.DB, key string) error {
key := item.Key()
k := append([]byte{}, key...)
fmt.Println(string(k))
if err := deleteKey(db, string(k)); err != nil {
return err
}