You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.7 KiB
Go
59 lines
1.7 KiB
Go
package migrate
|
|
|
|
import (
|
|
"github.com/pkg/errors"
|
|
"github.com/place1/wg-access-server/internal/storage"
|
|
"github.com/sirupsen/logrus"
|
|
"gopkg.in/alecthomas/kingpin.v2"
|
|
)
|
|
|
|
func RegisterCommand(app *kingpin.Application) *migratecmd {
|
|
cmd := &migratecmd{}
|
|
cli := app.Command(cmd.Name(), "Migrate your wg-access-server devices between storage backends. This tool is provided on a best effort bases.")
|
|
cli.Arg("source", "The source storage URI").Required().StringVar(&cmd.src)
|
|
cli.Arg("destination", "The destination storage URI").Required().StringVar(&cmd.dest)
|
|
return cmd
|
|
}
|
|
|
|
type migratecmd struct {
|
|
src string
|
|
dest string
|
|
}
|
|
|
|
func (cmd *migratecmd) Name() string {
|
|
return "migrate"
|
|
}
|
|
|
|
func (cmd *migratecmd) Run() {
|
|
srcBackend, err := storage.NewStorage(cmd.src)
|
|
if err != nil {
|
|
logrus.Fatal(errors.Wrap(err, "failed to create src storage backend"))
|
|
}
|
|
if err := srcBackend.Open(); err != nil {
|
|
logrus.Fatal(errors.Wrap(err, "failed to connect/open src storage backend"))
|
|
}
|
|
defer srcBackend.Close()
|
|
|
|
destBackend, err := storage.NewStorage(cmd.dest)
|
|
if err != nil {
|
|
logrus.Fatal(errors.Wrap(err, "failed to create destination storage backend"))
|
|
}
|
|
if err := destBackend.Open(); err != nil {
|
|
logrus.Fatal(errors.Wrap(err, "failed to connect/open destination storage backend"))
|
|
}
|
|
defer destBackend.Close()
|
|
|
|
srcDevices, err := srcBackend.List("")
|
|
if err != nil {
|
|
logrus.Fatal(errors.Wrap(err, "failed to list all devices from source storage backend"))
|
|
}
|
|
|
|
logrus.Infof("copying %v devices from source --> destination backend", len(srcDevices))
|
|
|
|
for _, device := range srcDevices {
|
|
if err := destBackend.Save(device); err != nil {
|
|
logrus.Fatal(errors.Wrap(err, "failed to write device to destination storage backend"))
|
|
}
|
|
}
|
|
}
|