From 105cc0b0f6457e67cafaaa909e1626f4e2d7e79e Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Tue, 23 Dec 2025 23:24:14 +0100 Subject: [PATCH 01/17] f-8: code: first implement of metadata cli Signed-off-by: GnomeZworc --- cmd/meta_cli/main.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 cmd/meta_cli/main.go diff --git a/cmd/meta_cli/main.go b/cmd/meta_cli/main.go new file mode 100644 index 0000000..9fec4db --- /dev/null +++ b/cmd/meta_cli/main.go @@ -0,0 +1,17 @@ +package main + +import ( + "fmt" + "os" +) + +var ( + bin_name = os.Args[0] +) + +func main() { + + fmt.Printf("Start %s conf\n", bin_name) + + os.Exit(0) +} From 6d55b554d799113126e1d9ada8af11c501abf973 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Wed, 24 Dec 2025 14:04:30 +0100 Subject: [PATCH 02/17] f-8: conf: move configuration files Signed-off-by: GnomeZworc --- conf/agent/config.dev.yml | 2 ++ {exemple => conf}/agent/config.exemple.yml | 0 2 files changed, 2 insertions(+) create mode 100644 conf/agent/config.dev.yml rename {exemple => conf}/agent/config.exemple.yml (100%) diff --git a/conf/agent/config.dev.yml b/conf/agent/config.dev.yml new file mode 100644 index 0000000..62cb624 --- /dev/null +++ b/conf/agent/config.dev.yml @@ -0,0 +1,2 @@ +database: + path: "./data/" \ No newline at end of file diff --git a/exemple/agent/config.exemple.yml b/conf/agent/config.exemple.yml similarity index 100% rename from exemple/agent/config.exemple.yml rename to conf/agent/config.exemple.yml From f1492acd85d87aa22dc315ac24e76c22afaef31a Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Wed, 24 Dec 2025 14:05:47 +0100 Subject: [PATCH 03/17] f-8: internal/conf: delete conf file existance check Signed-off-by: GnomeZworc --- internal/config/agent/struct.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/config/agent/struct.go b/internal/config/agent/struct.go index 12a46d3..c9537bf 100644 --- a/internal/config/agent/struct.go +++ b/internal/config/agent/struct.go @@ -17,9 +17,7 @@ func LoadConfig(path string) (*Config, error) { v.SetDefault("database.path", "/var/lib/two/data/") - if err := v.ReadInConfig(); err != nil { - return nil, err - } + v.ReadInConfig() var cfg Config if err := v.Unmarshal(&cfg); err != nil { From a1f7c438881e666b5be10ae35789b524aff52a8b Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Wed, 24 Dec 2025 22:02:18 +0100 Subject: [PATCH 04/17] f-8: code: add params for meta_cli #8 Signed-off-by: GnomeZworc --- cmd/meta_cli/main.go | 45 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/cmd/meta_cli/main.go b/cmd/meta_cli/main.go index 9fec4db..ce97286 100644 --- a/cmd/meta_cli/main.go +++ b/cmd/meta_cli/main.go @@ -1,17 +1,54 @@ package main import ( + "flag" "fmt" "os" + "strings" + + configuration "git.g3e.fr/syonad/two/internal/config/agent" + "git.g3e.fr/syonad/two/pkg/db/kv" + "github.com/dgraph-io/badger/v4" ) -var ( - bin_name = os.Args[0] -) +var DB *badger.DB + +func AddInDB(dbName string, line string) error { + // ID = partie avant le premier ';' + id := strings.Split(line, ";")[0] + "/bash" + key := []byte(dbName + "/" + id) + + return DB.Update(func(txn *badger.Txn) error { + return txn.Set(key, []byte(line)) + }) +} func main() { + conf_file := flag.String("conf", "/etc/two/agent.yml", "configuration file") + vm_name := flag.String("vm_name", "", "Nom de la vm") + vpc := flag.String("vpc_name", "", "vpc name") + bind_ip := flag.String("ip", "", "bind ip") + bind_port := flag.String("port", "", "bind port") + ssh_key := flag.String("key", "", "Clef ssh") + password := flag.String("pass", "", "password user") + start := flag.Bool("start", false, "start metadata server") + stop := flag.Bool("stop", false, "stop metadata server") - fmt.Printf("Start %s conf\n", bin_name) + flag.Parse() + + 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, + }) + defer DB.Close() + + fmt.Printf("conf metadata for %s\n - this key %s\n - this password %s\n", *vm_name, *ssh_key, *password) os.Exit(0) } From b8796d0810353baa38bd04dc9a529b5f0005abe2 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Dec 2025 23:00:13 +0100 Subject: [PATCH 05/17] f-8: code: add func to control db #8 Signed-off-by: GnomeZworc --- pkg/db/kv/addInDB.go | 11 +++++++++++ pkg/db/kv/deleteInDB.go | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 pkg/db/kv/addInDB.go create mode 100644 pkg/db/kv/deleteInDB.go diff --git a/pkg/db/kv/addInDB.go b/pkg/db/kv/addInDB.go new file mode 100644 index 0000000..44ea19c --- /dev/null +++ b/pkg/db/kv/addInDB.go @@ -0,0 +1,11 @@ +package kv + +import ( + "github.com/dgraph-io/badger/v4" +) + +func AddInDB(db *badger.DB, key string, value string) error { + return db.Update(func(txn *badger.Txn) error { + return txn.Set([]byte(key), []byte(value)) + }) +} diff --git a/pkg/db/kv/deleteInDB.go b/pkg/db/kv/deleteInDB.go new file mode 100644 index 0000000..fe8398e --- /dev/null +++ b/pkg/db/kv/deleteInDB.go @@ -0,0 +1,11 @@ +package kv + +import ( + "github.com/dgraph-io/badger/v4" +) + +func DeleteInDB(db *badger.DB, key string) error { + return db.Update(func(txn *badger.Txn) error { + return txn.Delete([]byte(key)) + }) +} From 13a5f4d3f9db1c00342886112b62951fcd0264b3 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Dec 2025 23:00:51 +0100 Subject: [PATCH 06/17] f-8: code: add module to load nocloud in db #8 Signed-off-by: GnomeZworc --- internal/load_db/nocloud/render.go | 50 +++++++++++++++++++ internal/load_db/nocloud/struct.go | 10 ++++ .../load_db/nocloud/templates/meta-data.tmpl | 2 + .../nocloud/templates/network-config.tmpl | 4 ++ .../load_db/nocloud/templates/user-data.tmpl | 3 ++ .../nocloud/templates/vendor-data.tmpl | 13 +++++ 6 files changed, 82 insertions(+) create mode 100644 internal/load_db/nocloud/render.go create mode 100644 internal/load_db/nocloud/struct.go create mode 100644 internal/load_db/nocloud/templates/meta-data.tmpl create mode 100644 internal/load_db/nocloud/templates/network-config.tmpl create mode 100644 internal/load_db/nocloud/templates/user-data.tmpl create mode 100644 internal/load_db/nocloud/templates/vendor-data.tmpl diff --git a/internal/load_db/nocloud/render.go b/internal/load_db/nocloud/render.go new file mode 100644 index 0000000..ad7eee1 --- /dev/null +++ b/internal/load_db/nocloud/render.go @@ -0,0 +1,50 @@ +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 new file mode 100644 index 0000000..4134000 --- /dev/null +++ b/internal/load_db/nocloud/struct.go @@ -0,0 +1,10 @@ +package nocloud + +type Config 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/load_db/nocloud/templates/meta-data.tmpl new file mode 100644 index 0000000..ff876bb --- /dev/null +++ b/internal/load_db/nocloud/templates/meta-data.tmpl @@ -0,0 +1,2 @@ +instance-id: {{ .Name }} +local-hostname: {{ .Name }} diff --git a/internal/load_db/nocloud/templates/network-config.tmpl b/internal/load_db/nocloud/templates/network-config.tmpl new file mode 100644 index 0000000..0f8d052 --- /dev/null +++ b/internal/load_db/nocloud/templates/network-config.tmpl @@ -0,0 +1,4 @@ +version: 2 +ethernets: + eth0: + dhcp4: true diff --git a/internal/load_db/nocloud/templates/user-data.tmpl b/internal/load_db/nocloud/templates/user-data.tmpl new file mode 100644 index 0000000..84195ab --- /dev/null +++ b/internal/load_db/nocloud/templates/user-data.tmpl @@ -0,0 +1,3 @@ +#!/bin/sh + +passwd -d root diff --git a/internal/load_db/nocloud/templates/vendor-data.tmpl b/internal/load_db/nocloud/templates/vendor-data.tmpl new file mode 100644 index 0000000..148d6db --- /dev/null +++ b/internal/load_db/nocloud/templates/vendor-data.tmpl @@ -0,0 +1,13 @@ +#cloud-config +users: + - name: syonad + lock_passwd: false + gecos: alpine Cloud User + groups: [adm, wheel] + doas: + - permit nopass syonad + sudo: ["ALL=(ALL) NOPASSWD:ALL"] + shell: /bin/ash + passwd: "{{ .Password }}" + ssh_authorized_keys: + - "{{ .SSHKEY }}" \ No newline at end of file From e1f317aeb9be38d5b74bb35f5e923f27d7bb03fc Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Tue, 23 Dec 2025 23:24:14 +0100 Subject: [PATCH 07/17] f-8: code: first implement of metadata cli #8 Signed-off-by: GnomeZworc --- cmd/meta_cli/main.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 cmd/meta_cli/main.go diff --git a/cmd/meta_cli/main.go b/cmd/meta_cli/main.go new file mode 100644 index 0000000..9fec4db --- /dev/null +++ b/cmd/meta_cli/main.go @@ -0,0 +1,17 @@ +package main + +import ( + "fmt" + "os" +) + +var ( + bin_name = os.Args[0] +) + +func main() { + + fmt.Printf("Start %s conf\n", bin_name) + + os.Exit(0) +} From 1ac5a9fe4996679e32073e23db24a87b45c4289f Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Wed, 24 Dec 2025 14:04:30 +0100 Subject: [PATCH 08/17] f-8: conf: move configuration files #8 Signed-off-by: GnomeZworc --- conf/agent/config.dev.yml | 2 ++ {exemple => conf}/agent/config.exemple.yml | 0 2 files changed, 2 insertions(+) create mode 100644 conf/agent/config.dev.yml rename {exemple => conf}/agent/config.exemple.yml (100%) diff --git a/conf/agent/config.dev.yml b/conf/agent/config.dev.yml new file mode 100644 index 0000000..62cb624 --- /dev/null +++ b/conf/agent/config.dev.yml @@ -0,0 +1,2 @@ +database: + path: "./data/" \ No newline at end of file diff --git a/exemple/agent/config.exemple.yml b/conf/agent/config.exemple.yml similarity index 100% rename from exemple/agent/config.exemple.yml rename to conf/agent/config.exemple.yml From 014ae61dbbc78288abe1d31d81e7504b6bd8b413 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Wed, 24 Dec 2025 14:05:47 +0100 Subject: [PATCH 09/17] f-8: internal/conf: delete conf file existance check #8 Signed-off-by: GnomeZworc --- internal/config/agent/struct.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/internal/config/agent/struct.go b/internal/config/agent/struct.go index 12a46d3..c9537bf 100644 --- a/internal/config/agent/struct.go +++ b/internal/config/agent/struct.go @@ -17,9 +17,7 @@ func LoadConfig(path string) (*Config, error) { v.SetDefault("database.path", "/var/lib/two/data/") - if err := v.ReadInConfig(); err != nil { - return nil, err - } + v.ReadInConfig() var cfg Config if err := v.Unmarshal(&cfg); err != nil { From 2418e08ee0c9649925bcf347689a3d63ce8680ae Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Wed, 24 Dec 2025 22:02:18 +0100 Subject: [PATCH 10/17] f-8: code: add params for meta_cli #8 Signed-off-by: GnomeZworc --- cmd/meta_cli/main.go | 45 ++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 41 insertions(+), 4 deletions(-) diff --git a/cmd/meta_cli/main.go b/cmd/meta_cli/main.go index 9fec4db..ce97286 100644 --- a/cmd/meta_cli/main.go +++ b/cmd/meta_cli/main.go @@ -1,17 +1,54 @@ package main import ( + "flag" "fmt" "os" + "strings" + + configuration "git.g3e.fr/syonad/two/internal/config/agent" + "git.g3e.fr/syonad/two/pkg/db/kv" + "github.com/dgraph-io/badger/v4" ) -var ( - bin_name = os.Args[0] -) +var DB *badger.DB + +func AddInDB(dbName string, line string) error { + // ID = partie avant le premier ';' + id := strings.Split(line, ";")[0] + "/bash" + key := []byte(dbName + "/" + id) + + return DB.Update(func(txn *badger.Txn) error { + return txn.Set(key, []byte(line)) + }) +} func main() { + conf_file := flag.String("conf", "/etc/two/agent.yml", "configuration file") + vm_name := flag.String("vm_name", "", "Nom de la vm") + vpc := flag.String("vpc_name", "", "vpc name") + bind_ip := flag.String("ip", "", "bind ip") + bind_port := flag.String("port", "", "bind port") + ssh_key := flag.String("key", "", "Clef ssh") + password := flag.String("pass", "", "password user") + start := flag.Bool("start", false, "start metadata server") + stop := flag.Bool("stop", false, "stop metadata server") - fmt.Printf("Start %s conf\n", bin_name) + flag.Parse() + + 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, + }) + defer DB.Close() + + fmt.Printf("conf metadata for %s\n - this key %s\n - this password %s\n", *vm_name, *ssh_key, *password) os.Exit(0) } From b43e45488e2e8339ef27af0ea34c0c32b1e9e152 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Dec 2025 23:00:13 +0100 Subject: [PATCH 11/17] f-8: code: add func to control db #8 Signed-off-by: GnomeZworc --- pkg/db/kv/addInDB.go | 11 +++++++++++ pkg/db/kv/deleteInDB.go | 11 +++++++++++ 2 files changed, 22 insertions(+) create mode 100644 pkg/db/kv/addInDB.go create mode 100644 pkg/db/kv/deleteInDB.go diff --git a/pkg/db/kv/addInDB.go b/pkg/db/kv/addInDB.go new file mode 100644 index 0000000..44ea19c --- /dev/null +++ b/pkg/db/kv/addInDB.go @@ -0,0 +1,11 @@ +package kv + +import ( + "github.com/dgraph-io/badger/v4" +) + +func AddInDB(db *badger.DB, key string, value string) error { + return db.Update(func(txn *badger.Txn) error { + return txn.Set([]byte(key), []byte(value)) + }) +} diff --git a/pkg/db/kv/deleteInDB.go b/pkg/db/kv/deleteInDB.go new file mode 100644 index 0000000..fe8398e --- /dev/null +++ b/pkg/db/kv/deleteInDB.go @@ -0,0 +1,11 @@ +package kv + +import ( + "github.com/dgraph-io/badger/v4" +) + +func DeleteInDB(db *badger.DB, key string) error { + return db.Update(func(txn *badger.Txn) error { + return txn.Delete([]byte(key)) + }) +} From 55ed2c8e53ca0a8ce740abfa0f9c7bd812301bd4 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Dec 2025 23:00:51 +0100 Subject: [PATCH 12/17] f-8: code: add module to load nocloud in db #8 Signed-off-by: GnomeZworc --- internal/load_db/nocloud/render.go | 50 +++++++++++++++++++ internal/load_db/nocloud/struct.go | 10 ++++ .../load_db/nocloud/templates/meta-data.tmpl | 2 + .../nocloud/templates/network-config.tmpl | 4 ++ .../load_db/nocloud/templates/user-data.tmpl | 3 ++ .../nocloud/templates/vendor-data.tmpl | 13 +++++ 6 files changed, 82 insertions(+) create mode 100644 internal/load_db/nocloud/render.go create mode 100644 internal/load_db/nocloud/struct.go create mode 100644 internal/load_db/nocloud/templates/meta-data.tmpl create mode 100644 internal/load_db/nocloud/templates/network-config.tmpl create mode 100644 internal/load_db/nocloud/templates/user-data.tmpl create mode 100644 internal/load_db/nocloud/templates/vendor-data.tmpl diff --git a/internal/load_db/nocloud/render.go b/internal/load_db/nocloud/render.go new file mode 100644 index 0000000..ad7eee1 --- /dev/null +++ b/internal/load_db/nocloud/render.go @@ -0,0 +1,50 @@ +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 new file mode 100644 index 0000000..4134000 --- /dev/null +++ b/internal/load_db/nocloud/struct.go @@ -0,0 +1,10 @@ +package nocloud + +type Config 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/load_db/nocloud/templates/meta-data.tmpl new file mode 100644 index 0000000..ff876bb --- /dev/null +++ b/internal/load_db/nocloud/templates/meta-data.tmpl @@ -0,0 +1,2 @@ +instance-id: {{ .Name }} +local-hostname: {{ .Name }} diff --git a/internal/load_db/nocloud/templates/network-config.tmpl b/internal/load_db/nocloud/templates/network-config.tmpl new file mode 100644 index 0000000..0f8d052 --- /dev/null +++ b/internal/load_db/nocloud/templates/network-config.tmpl @@ -0,0 +1,4 @@ +version: 2 +ethernets: + eth0: + dhcp4: true diff --git a/internal/load_db/nocloud/templates/user-data.tmpl b/internal/load_db/nocloud/templates/user-data.tmpl new file mode 100644 index 0000000..84195ab --- /dev/null +++ b/internal/load_db/nocloud/templates/user-data.tmpl @@ -0,0 +1,3 @@ +#!/bin/sh + +passwd -d root diff --git a/internal/load_db/nocloud/templates/vendor-data.tmpl b/internal/load_db/nocloud/templates/vendor-data.tmpl new file mode 100644 index 0000000..148d6db --- /dev/null +++ b/internal/load_db/nocloud/templates/vendor-data.tmpl @@ -0,0 +1,13 @@ +#cloud-config +users: + - name: syonad + lock_passwd: false + gecos: alpine Cloud User + groups: [adm, wheel] + doas: + - permit nopass syonad + sudo: ["ALL=(ALL) NOPASSWD:ALL"] + shell: /bin/ash + passwd: "{{ .Password }}" + ssh_authorized_keys: + - "{{ .SSHKEY }}" \ No newline at end of file From 1ac1e6186487d4223320bfb420cdbc60741ca58f Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Dec 2025 23:02:14 +0100 Subject: [PATCH 13/17] f-8: code: move binary name #8 Signed-off-by: GnomeZworc --- cmd/agent/main.go | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/cmd/agent/main.go b/cmd/agent/main.go index bcb3849..0f82e93 100644 --- a/cmd/agent/main.go +++ b/cmd/agent/main.go @@ -5,10 +5,13 @@ import ( "os" ) +var ( + bin_name = os.Args[0] +) + func main() { - bin_name := os.Args[0] fmt.Printf("%s: Start process\n", bin_name) - os.Exit(5) + os.Exit(0) } From df95d8b4a79fceaa0b790df081afda5b1850e2ec Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Dec 2025 23:40:03 +0100 Subject: [PATCH 14/17] f-8: code: use flags in db binary #8 Signed-off-by: GnomeZworc --- cmd/db/main.go | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/cmd/db/main.go b/cmd/db/main.go index 0c6c1ba..205d8bf 100644 --- a/cmd/db/main.go +++ b/cmd/db/main.go @@ -1,6 +1,7 @@ package main import ( + "flag" "fmt" "os" "strings" @@ -125,7 +126,13 @@ func printDB() { } func main() { - conf, err := configuration.LoadConfig("/etc/two/agent.yml") + conf_file := flag.String("conf", "/etc/two/agent.yml", "configuration file") + + flag.Parse() + + args := flag.Args() + + conf, err := configuration.LoadConfig(*conf_file) if err != nil { fmt.Println(err) return @@ -136,53 +143,53 @@ func main() { }) defer DB.Close() - if len(os.Args) < 2 { + if len(args) < 1 { fmt.Println("Usage: db [args...]") return } - cmd := os.Args[1] + cmd := args[0] switch cmd { case "check_in_db": - if len(os.Args) != 4 { + if len(args) != 3 { fmt.Println("Usage: check_in_db ") os.Exit(1) } - ret := CheckInDB(os.Args[2], os.Args[3]) + ret := CheckInDB(args[1], args[2]) os.Exit(ret) case "add_in_db": - if len(os.Args) < 4 { + if len(args) < 3 { fmt.Println("Usage: add_in_db ") os.Exit(1) } - line := strings.Join(os.Args[3:], ";") - if err := AddInDB(os.Args[2], line); err != nil { + line := strings.Join(args[2:], ";") + if err := AddInDB(args[1], line); err != nil { fmt.Println("Error:", err) os.Exit(1) } case "delete_in_db": - if len(os.Args) != 4 { + if len(args) != 3 { fmt.Println("Usage: delete_in_db ") os.Exit(1) } - if err := DeleteInDB(os.Args[2], os.Args[3]); err != nil { + if err := DeleteInDB(args[1], args[2]); err != nil { fmt.Println("Error:", err) os.Exit(1) } case "count_in_db": - if len(os.Args) != 4 { + if len(args) != 3 { fmt.Println("Usage: count_in_db ") os.Exit(1) } - count := CountInDB(os.Args[2], os.Args[3]) + count := CountInDB(args[1], args[2]) fmt.Println(count) case "get_from_db": - if len(os.Args) != 4 { + if len(args) != 3 { fmt.Println("Usage: get_from_db ") os.Exit(1) } - line, _ := GetFromDB(os.Args[2], os.Args[3]) + line, _ := GetFromDB(args[1], args[2]) fmt.Println(line) case "print": printDB() From b2d1922eaa7b809034e50cbdb5ef9ae8bc9a3af6 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Dec 2025 23:42:24 +0100 Subject: [PATCH 15/17] f-8: pkg: make delete in db recursif #8 Signed-off-by: GnomeZworc --- pkg/db/kv/deleteInDB.go | 35 ++++++++++++++++++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/pkg/db/kv/deleteInDB.go b/pkg/db/kv/deleteInDB.go index fe8398e..36d8669 100644 --- a/pkg/db/kv/deleteInDB.go +++ b/pkg/db/kv/deleteInDB.go @@ -1,11 +1,44 @@ package kv import ( + "fmt" + "log" + "github.com/dgraph-io/badger/v4" ) -func DeleteInDB(db *badger.DB, key string) error { +func deleteKey(db *badger.DB, key string) error { return db.Update(func(txn *badger.Txn) error { return txn.Delete([]byte(key)) }) } + +func DeleteInDB(db *badger.DB, key string) error { + + prefix := []byte(key + "/") + + err := db.View(func(txn *badger.Txn) error { + opts := badger.DefaultIteratorOptions + opts.PrefetchValues = false + + it := txn.NewIterator(opts) + defer it.Close() + + for it.Seek(prefix); it.ValidForPrefix(prefix); it.Next() { + item := it.Item() + key := item.Key() + + k := append([]byte{}, key...) + fmt.Println(string(k)) + if err := deleteKey(db, string(k)); err != nil { + return err + } + } + return nil + }) + if err != nil { + log.Fatal(err) + } + + return deleteKey(db, key) +} From 38f2ed1b83190cb9b7434659d17968d1d25684c4 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Dec 2025 23:43:29 +0100 Subject: [PATCH 16/17] f-8: code: use recursive delete #8 Signed-off-by: GnomeZworc --- cmd/db/main.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/cmd/db/main.go b/cmd/db/main.go index 205d8bf..765cad0 100644 --- a/cmd/db/main.go +++ b/cmd/db/main.go @@ -60,9 +60,7 @@ func AddInDB(dbName string, line string) error { func DeleteInDB(dbName, id string) error { key := []byte(dbName + "/" + id + "/bash") - return DB.Update(func(txn *badger.Txn) error { - return txn.Delete(key) - }) + return kv.DeleteInDB(DB, string(key)) } func CountInDB(dbName, id string) int { From 97132550b0b000e53cee7801152c1f84d04099f2 Mon Sep 17 00:00:00 2001 From: GnomeZworc Date: Fri, 26 Dec 2025 23:46:18 +0100 Subject: [PATCH 17/17] f-8: code: move Load in DB to internal lib #8 Signed-off-by: GnomeZworc --- cmd/meta_cli/main.go | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/cmd/meta_cli/main.go b/cmd/meta_cli/main.go index ce97286..971c370 100644 --- a/cmd/meta_cli/main.go +++ b/cmd/meta_cli/main.go @@ -3,26 +3,12 @@ package main import ( "flag" "fmt" - "os" - "strings" configuration "git.g3e.fr/syonad/two/internal/config/agent" + "git.g3e.fr/syonad/two/internal/load_db/nocloud" "git.g3e.fr/syonad/two/pkg/db/kv" - "github.com/dgraph-io/badger/v4" ) -var DB *badger.DB - -func AddInDB(dbName string, line string) error { - // ID = partie avant le premier ';' - id := strings.Split(line, ";")[0] + "/bash" - key := []byte(dbName + "/" + id) - - return DB.Update(func(txn *badger.Txn) error { - return txn.Set(key, []byte(line)) - }) -} - func main() { conf_file := flag.String("conf", "/etc/two/agent.yml", "configuration file") vm_name := flag.String("vm_name", "", "Nom de la vm") @@ -43,12 +29,21 @@ func main() { } fmt.Print(conf) - DB = kv.InitDB(kv.Config{ + db := kv.InitDB(kv.Config{ Path: conf.Database.Path, }) - defer DB.Close() + defer db.Close() - fmt.Printf("conf metadata for %s\n - this key %s\n - this password %s\n", *vm_name, *ssh_key, *password) - - os.Exit(0) + if *start { + nocloud.LoadNcCloudInDB(nocloud.Config{ + VpcName: *vpc, + Name: *vm_name, + BindIP: *bind_ip, + BindPort: *bind_port, + Password: *password, + SSHKEY: *ssh_key, + }, db) + } else if *stop { + nocloud.UnLoadNoCloudInDB(*vm_name, db) + } }