Rewrite: rewrites env config repo and commits application cue files
We can build upon this tool to implement version to version migration logic.
Change-Id: I6066f565f118ca44ca3ce7a0ac7522258958cf25
diff --git a/core/installer/cmd/app_manager.go b/core/installer/cmd/app_manager.go
index b6c083c..7b05081 100644
--- a/core/installer/cmd/app_manager.go
+++ b/core/installer/cmd/app_manager.go
@@ -27,10 +27,10 @@
Use: "appmanager",
RunE: appManagerCmdRun,
}
- cmd.Flags().StringVar(
- &appManagerFlags.sshKey,
- "ssh-key",
- "",
+ cmd.Flags().IntVar(
+ &appManagerFlags.port,
+ "port",
+ 8080,
"",
)
cmd.Flags().StringVar(
@@ -39,10 +39,10 @@
"",
"",
)
- cmd.Flags().IntVar(
- &appManagerFlags.port,
- "port",
- 8080,
+ cmd.Flags().StringVar(
+ &appManagerFlags.sshKey,
+ "ssh-key",
+ "",
"",
)
cmd.Flags().StringVar(
@@ -80,7 +80,7 @@
if err != nil {
return err
}
- m, err := installer.NewAppManager(repoIO, kube)
+ m, err := installer.NewAppManager(repoIO, kube, "/apps")
if err != nil {
return err
}
diff --git a/core/installer/cmd/main.go b/core/installer/cmd/main.go
index 70e58de..1e4ec1d 100644
--- a/core/installer/cmd/main.go
+++ b/core/installer/cmd/main.go
@@ -26,6 +26,7 @@
rootCmd.AddCommand(appManagerCmd())
rootCmd.AddCommand(envManagerCmd())
rootCmd.AddCommand(welcomeCmd())
+ rootCmd.AddCommand(rewriteCmd())
}
func main() {
diff --git a/core/installer/cmd/rewrite.go b/core/installer/cmd/rewrite.go
new file mode 100644
index 0000000..5eddc67
--- /dev/null
+++ b/core/installer/cmd/rewrite.go
@@ -0,0 +1,93 @@
+package main
+
+import (
+ "fmt"
+ "log"
+ "os"
+
+ "golang.org/x/crypto/ssh"
+
+ "github.com/spf13/cobra"
+
+ "github.com/giolekva/pcloud/core/installer"
+ "github.com/giolekva/pcloud/core/installer/soft"
+)
+
+var rewriteFlags struct {
+ path string
+}
+
+func rewriteCmd() *cobra.Command {
+ cmd := &cobra.Command{
+ Use: "rewrite",
+ RunE: rewriteCmdRun,
+ }
+ cmd.Flags().StringVar(
+ &appManagerFlags.repoAddr,
+ "repo-addr",
+ "",
+ "",
+ )
+ cmd.Flags().StringVar(
+ &appManagerFlags.sshKey,
+ "ssh-key",
+ "",
+ "",
+ )
+ return cmd
+}
+
+func rewriteCmdRun(cmd *cobra.Command, args []string) error {
+ sshKey, err := os.ReadFile(appManagerFlags.sshKey)
+ if err != nil {
+ return err
+ }
+ signer, err := ssh.ParsePrivateKey(sshKey)
+ if err != nil {
+ return err
+ }
+ addr, err := soft.ParseRepositoryAddress(appManagerFlags.repoAddr)
+ if err != nil {
+ return err
+ }
+ repo, err := soft.CloneRepository(addr, signer)
+ if err != nil {
+ return err
+ }
+ log.Println("Cloned repository")
+ repoIO, err := installer.NewRepoIO(repo, signer)
+ if err != nil {
+ return err
+ }
+ log.Println("Creating repository")
+ r := installer.NewInMemoryAppRepository(installer.CreateStoreApps())
+ mgr, err := installer.NewAppManager(repoIO, nil, "/apps")
+ if err != nil {
+ return err
+ }
+ env, err := mgr.Config()
+ if err != nil {
+ return err
+ }
+ fmt.Printf("%+v\n", env)
+ log.Println("Read config")
+ if err != nil {
+ return err
+ }
+ all, err := mgr.FindAllInstances()
+ if err != nil {
+ return err
+ }
+ for _, inst := range all {
+ app, err := installer.FindEnvApp(r, inst.AppId)
+ if err != nil {
+ return err
+ }
+ v := inst.InputToValues(app.Schema())
+ if err := mgr.Update(app, inst.Id, v, installer.WithNoCommit()); err != nil {
+ return err
+ }
+ }
+ repoIO.CommitAndPush("upgrade: persist cue files")
+ return nil
+}