Compare commits
11 commits
13a5f4d3f9
...
97132550b0
| Author | SHA1 | Date | |
|---|---|---|---|
|
97132550b0 |
|||
|
38f2ed1b83 |
|||
|
b2d1922eaa |
|||
|
df95d8b4a7 |
|||
|
1ac1e61864 |
|||
|
55ed2c8e53 |
|||
|
b43e45488e |
|||
|
2418e08ee0 |
|||
|
014ae61dbb |
|||
|
1ac5a9fe49 |
|||
|
e1f317aeb9 |
14 changed files with 216 additions and 22 deletions
|
|
@ -5,10 +5,13 @@ import (
|
||||||
"os"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
bin_name = os.Args[0]
|
||||||
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
bin_name := os.Args[0]
|
|
||||||
|
|
||||||
fmt.Printf("%s: Start process\n", bin_name)
|
fmt.Printf("%s: Start process\n", bin_name)
|
||||||
|
|
||||||
os.Exit(5)
|
os.Exit(0)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,7 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
"os"
|
"os"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
@ -59,9 +60,7 @@ func AddInDB(dbName string, line string) error {
|
||||||
func DeleteInDB(dbName, id string) error {
|
func DeleteInDB(dbName, id string) error {
|
||||||
key := []byte(dbName + "/" + id + "/bash")
|
key := []byte(dbName + "/" + id + "/bash")
|
||||||
|
|
||||||
return DB.Update(func(txn *badger.Txn) error {
|
return kv.DeleteInDB(DB, string(key))
|
||||||
return txn.Delete(key)
|
|
||||||
})
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func CountInDB(dbName, id string) int {
|
func CountInDB(dbName, id string) int {
|
||||||
|
|
@ -125,7 +124,13 @@ func printDB() {
|
||||||
}
|
}
|
||||||
|
|
||||||
func main() {
|
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 {
|
if err != nil {
|
||||||
fmt.Println(err)
|
fmt.Println(err)
|
||||||
return
|
return
|
||||||
|
|
@ -136,53 +141,53 @@ func main() {
|
||||||
})
|
})
|
||||||
defer DB.Close()
|
defer DB.Close()
|
||||||
|
|
||||||
if len(os.Args) < 2 {
|
if len(args) < 1 {
|
||||||
fmt.Println("Usage: db <cmd> [args...]")
|
fmt.Println("Usage: db <cmd> [args...]")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd := os.Args[1]
|
cmd := args[0]
|
||||||
|
|
||||||
switch cmd {
|
switch cmd {
|
||||||
case "check_in_db":
|
case "check_in_db":
|
||||||
if len(os.Args) != 4 {
|
if len(args) != 3 {
|
||||||
fmt.Println("Usage: check_in_db <db_name> <id>")
|
fmt.Println("Usage: check_in_db <db_name> <id>")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
ret := CheckInDB(os.Args[2], os.Args[3])
|
ret := CheckInDB(args[1], args[2])
|
||||||
os.Exit(ret)
|
os.Exit(ret)
|
||||||
case "add_in_db":
|
case "add_in_db":
|
||||||
if len(os.Args) < 4 {
|
if len(args) < 3 {
|
||||||
fmt.Println("Usage: add_in_db <db_name> <line...>")
|
fmt.Println("Usage: add_in_db <db_name> <line...>")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
line := strings.Join(os.Args[3:], ";")
|
line := strings.Join(args[2:], ";")
|
||||||
if err := AddInDB(os.Args[2], line); err != nil {
|
if err := AddInDB(args[1], line); err != nil {
|
||||||
fmt.Println("Error:", err)
|
fmt.Println("Error:", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
case "delete_in_db":
|
case "delete_in_db":
|
||||||
if len(os.Args) != 4 {
|
if len(args) != 3 {
|
||||||
fmt.Println("Usage: delete_in_db <db_name> <id>")
|
fmt.Println("Usage: delete_in_db <db_name> <id>")
|
||||||
os.Exit(1)
|
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)
|
fmt.Println("Error:", err)
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
case "count_in_db":
|
case "count_in_db":
|
||||||
if len(os.Args) != 4 {
|
if len(args) != 3 {
|
||||||
fmt.Println("Usage: count_in_db <db_name> <id>")
|
fmt.Println("Usage: count_in_db <db_name> <id>")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
count := CountInDB(os.Args[2], os.Args[3])
|
count := CountInDB(args[1], args[2])
|
||||||
fmt.Println(count)
|
fmt.Println(count)
|
||||||
case "get_from_db":
|
case "get_from_db":
|
||||||
if len(os.Args) != 4 {
|
if len(args) != 3 {
|
||||||
fmt.Println("Usage: get_from_db <db_name> <id>")
|
fmt.Println("Usage: get_from_db <db_name> <id>")
|
||||||
os.Exit(1)
|
os.Exit(1)
|
||||||
}
|
}
|
||||||
line, _ := GetFromDB(os.Args[2], os.Args[3])
|
line, _ := GetFromDB(args[1], args[2])
|
||||||
fmt.Println(line)
|
fmt.Println(line)
|
||||||
case "print":
|
case "print":
|
||||||
printDB()
|
printDB()
|
||||||
|
|
|
||||||
49
cmd/meta_cli/main.go
Normal file
49
cmd/meta_cli/main.go
Normal file
|
|
@ -0,0 +1,49 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
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"
|
||||||
|
)
|
||||||
|
|
||||||
|
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()
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
|
}
|
||||||
2
conf/agent/config.dev.yml
Normal file
2
conf/agent/config.dev.yml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
database:
|
||||||
|
path: "./data/"
|
||||||
|
|
@ -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 {
|
||||||
|
|
|
||||||
50
internal/load_db/nocloud/render.go
Normal file
50
internal/load_db/nocloud/render.go
Normal 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)
|
||||||
|
}
|
||||||
10
internal/load_db/nocloud/struct.go
Normal file
10
internal/load_db/nocloud/struct.go
Normal file
|
|
@ -0,0 +1,10 @@
|
||||||
|
package nocloud
|
||||||
|
|
||||||
|
type Config struct {
|
||||||
|
VpcName string
|
||||||
|
BindIP string
|
||||||
|
BindPort string
|
||||||
|
Name string
|
||||||
|
Password string
|
||||||
|
SSHKEY string
|
||||||
|
}
|
||||||
2
internal/load_db/nocloud/templates/meta-data.tmpl
Normal file
2
internal/load_db/nocloud/templates/meta-data.tmpl
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
instance-id: {{ .Name }}
|
||||||
|
local-hostname: {{ .Name }}
|
||||||
4
internal/load_db/nocloud/templates/network-config.tmpl
Normal file
4
internal/load_db/nocloud/templates/network-config.tmpl
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
version: 2
|
||||||
|
ethernets:
|
||||||
|
eth0:
|
||||||
|
dhcp4: true
|
||||||
3
internal/load_db/nocloud/templates/user-data.tmpl
Normal file
3
internal/load_db/nocloud/templates/user-data.tmpl
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
passwd -d root
|
||||||
13
internal/load_db/nocloud/templates/vendor-data.tmpl
Normal file
13
internal/load_db/nocloud/templates/vendor-data.tmpl
Normal 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
11
pkg/db/kv/addInDB.go
Normal 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))
|
||||||
|
})
|
||||||
|
}
|
||||||
44
pkg/db/kv/deleteInDB.go
Normal file
44
pkg/db/kv/deleteInDB.go
Normal file
|
|
@ -0,0 +1,44 @@
|
||||||
|
package kv
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
|
||||||
|
"github.com/dgraph-io/badger/v4"
|
||||||
|
)
|
||||||
|
|
||||||
|
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)
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue