diff --git a/.forgejo/workflows/prerelease.yml b/.forgejo/workflows/prerelease.yml index c6ea322..0326071 100644 --- a/.forgejo/workflows/prerelease.yml +++ b/.forgejo/workflows/prerelease.yml @@ -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 }} diff --git a/cmd/meta_cli/main.go b/cmd/metacli/main.go similarity index 77% rename from cmd/meta_cli/main.go rename to cmd/metacli/main.go index 9782b5f..20706d2 100644 --- a/cmd/meta_cli/main.go +++ b/cmd/metacli/main.go @@ -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) } } diff --git a/cmd/metadata/main.go b/cmd/metadata/main.go index 4813ed5..96e3f75 100644 --- a/cmd/metadata/main.go +++ b/cmd/metadata/main.go @@ -17,7 +17,7 @@ var ( func main() { flag.Parse() - metadata.StartServer(metadata.Config{ + metadata.StartServer(metadata.ServerConfig{ Netns: *netns_name, Iface: *iface, Port: *port, diff --git a/internal/load_db/nocloud/render.go b/internal/load_db/nocloud/render.go deleted file mode 100644 index ad7eee1..0000000 --- a/internal/load_db/nocloud/render.go +++ /dev/null @@ -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) -} diff --git a/internal/load_db/nocloud/struct.go b/internal/load_db/nocloud/struct.go deleted file mode 100644 index 4134000..0000000 --- a/internal/load_db/nocloud/struct.go +++ /dev/null @@ -1,10 +0,0 @@ -package nocloud - -type Config struct { - VpcName string - BindIP string - BindPort string - Name string - Password string - SSHKEY string -} diff --git a/internal/metadata/handle.go b/internal/metadata/handle.go new file mode 100644 index 0000000..33ac088 --- /dev/null +++ b/internal/metadata/handle.go @@ -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) + } +} diff --git a/internal/metadata/render.go b/internal/metadata/render.go new file mode 100644 index 0000000..f6c3cae --- /dev/null +++ b/internal/metadata/render.go @@ -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) +} diff --git a/internal/metadata/server.go b/internal/metadata/server.go index 3a63cdb..3b4e12f 100644 --- a/internal/metadata/server.go +++ b/internal/metadata/server.go @@ -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 != "" { diff --git a/internal/metadata/struct.go b/internal/metadata/struct.go index 9e95341..5810ff4 100644 --- a/internal/metadata/struct.go +++ b/internal/metadata/struct.go @@ -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 +} diff --git a/internal/load_db/nocloud/templates/meta-data.tmpl b/internal/metadata/templates/meta-data.tmpl similarity index 100% rename from internal/load_db/nocloud/templates/meta-data.tmpl rename to internal/metadata/templates/meta-data.tmpl diff --git a/internal/load_db/nocloud/templates/network-config.tmpl b/internal/metadata/templates/network-config.tmpl similarity index 100% rename from internal/load_db/nocloud/templates/network-config.tmpl rename to internal/metadata/templates/network-config.tmpl diff --git a/internal/load_db/nocloud/templates/user-data.tmpl b/internal/metadata/templates/user-data.tmpl similarity index 100% rename from internal/load_db/nocloud/templates/user-data.tmpl rename to internal/metadata/templates/user-data.tmpl diff --git a/internal/load_db/nocloud/templates/vendor-data.tmpl b/internal/metadata/templates/vendor-data.tmpl similarity index 100% rename from internal/load_db/nocloud/templates/vendor-data.tmpl rename to internal/metadata/templates/vendor-data.tmpl diff --git a/pkg/db/kv/deleteInDB.go b/pkg/db/kv/deleteInDB.go index 36d8669..1943c81 100644 --- a/pkg/db/kv/deleteInDB.go +++ b/pkg/db/kv/deleteInDB.go @@ -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 }