storage/cli/migr8.go

86 lines
1.8 KiB
Go

package main
import (
"fmt"
"gitea.inhome.blapointe.com/local/args"
"gitea.inhome.blapointe.com/local/storage"
"gitea.inhome.blapointe.com/local/storage/resolve"
"log"
)
type Config struct {
DBs [2]storage.DB
NSs [2]string
Dry bool
args *args.ArgSet
}
func (config Config) String() string {
return fmt.Sprintf(
"{1:%T 1NS:%s 2:%T 2NS:%s Dry:%v}",
config.DBs[0],
config.NSs[0],
config.DBs[1],
config.NSs[1],
config.Dry,
)
}
func main() {
c := config()
resolve.DefaultNamespace = ""
keys, err := c.DBs[0].List([]string{c.NSs[0]})
if err != nil {
panic(err)
}
log.Println(c)
for _, key := range keys {
v, err := c.DBs[0].Get(key, c.NSs[0])
if err != nil {
panic(err)
}
if c.Dry {
log.Printf("%T@%s Set(%s, %s, %s)", c.DBs[1], c.args.GetString("2addr"), key, v, c.NSs[1])
} else if err := c.DBs[1].Set(key, v, c.NSs[1]); err != nil {
panic(err)
}
}
}
func config() Config {
as := args.NewArgSet()
for i := range [2]int{} {
s := fmt.Sprint(i + 1)
as.Append(args.STRING, s+"usr", s+"'s user", "")
as.Append(args.STRING, s+"pwd", s+"'s password", "")
as.Append(args.STRING, s+"addr", s+"'s addr", "")
as.Append(args.STRING, s+"type", s+"'s type", "")
as.Append(args.STRING, s+"ns", s+"'s namespace", resolve.DefaultNamespace)
}
as.Append(args.BOOL, "dry", "dry run", false)
if err := as.Parse(); err != nil {
panic(err)
}
stores := [2]storage.DB{}
for i := range stores {
var err error
stores[i], err = storage.New(
storage.TypeFromString(as.GetString(fmt.Sprint(i+1)+"type")),
as.GetString(fmt.Sprint(i+1)+"addr"),
as.GetString(fmt.Sprint(i+1)+"usr"),
as.GetString(fmt.Sprint(i+1)+"pwd"),
)
if err != nil {
panic(err)
}
}
return Config{
DBs: stores,
Dry: as.GetBool("dry"),
NSs: [2]string{as.GetString("1ns"), as.GetString("2ns")},
args: as,
}
}