Merge pull request 'feature-11' (#13) from feature-11 into main
Reviewed-on: #13
This commit is contained in:
commit
473e1d0108
14 changed files with 91 additions and 77 deletions
|
|
@ -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 }}
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
|
|
@ -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)
|
|
||||||
}
|
|
||||||
|
|
@ -1,10 +0,0 @@
|
||||||
package nocloud
|
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
VpcName string
|
|
||||||
BindIP string
|
|
||||||
BindPort string
|
|
||||||
Name string
|
|
||||||
Password string
|
|
||||||
SSHKEY string
|
|
||||||
}
|
|
||||||
26
internal/metadata/handle.go
Normal file
26
internal/metadata/handle.go
Normal 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)
|
||||||
|
}
|
||||||
|
}
|
||||||
46
internal/metadata/render.go
Normal file
46
internal/metadata/render.go
Normal 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)
|
||||||
|
}
|
||||||
|
|
@ -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 != "" {
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue