Compare commits

...

6 commits

Author SHA1 Message Date
13a5f4d3f9
f-8: code: add module to load nocloud in db #8
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
2025-12-26 23:00:51 +01:00
b8796d0810
f-8: code: add func to control db #8
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
2025-12-26 23:00:13 +01:00
a1f7c43888
f-8: code: add params for meta_cli #8
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
2025-12-24 22:02:18 +01:00
f1492acd85
f-8: internal/conf: delete conf file existance check
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
2025-12-24 14:05:47 +01:00
6d55b554d7
f-8: conf: move configuration files
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
2025-12-24 14:04:30 +01:00
105cc0b0f6
f-8: code: first implement of metadata cli
Signed-off-by: GnomeZworc <nicolas.boufidjeline@g3e.fr>
2025-12-23 23:24:14 +01:00
12 changed files with 161 additions and 3 deletions

54
cmd/meta_cli/main.go Normal file
View file

@ -0,0 +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 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")
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)
}

View file

@ -0,0 +1,2 @@
database:
path: "./data/"

View file

@ -17,9 +17,7 @@ func LoadConfig(path string) (*Config, error) {
v.SetDefault("database.path", "/var/lib/two/data/") v.SetDefault("database.path", "/var/lib/two/data/")
if err := v.ReadInConfig(); err != nil { v.ReadInConfig()
return nil, err
}
var cfg Config var cfg Config
if err := v.Unmarshal(&cfg); err != nil { if err := v.Unmarshal(&cfg); err != nil {

View file

@ -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)
}

View file

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

View file

@ -0,0 +1,2 @@
instance-id: {{ .Name }}
local-hostname: {{ .Name }}

View file

@ -0,0 +1,4 @@
version: 2
ethernets:
eth0:
dhcp4: true

View file

@ -0,0 +1,3 @@
#!/bin/sh
passwd -d root

View file

@ -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 }}"

11
pkg/db/kv/addInDB.go Normal file
View file

@ -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))
})
}

11
pkg/db/kv/deleteInDB.go Normal file
View file

@ -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))
})
}