blob: 3ebb390a59cdfdf98c3a30e385c928361b8b6a80 [file] [log] [blame]
gio308105e2024-04-19 13:12:13 +04001package main
2
3import (
4 "fmt"
5 "log"
6 "os"
7
8 "golang.org/x/crypto/ssh"
9
10 "github.com/spf13/cobra"
11
12 "github.com/giolekva/pcloud/core/installer"
13 "github.com/giolekva/pcloud/core/installer/soft"
14)
15
16var rewriteFlags struct {
17 path string
18}
19
20func rewriteCmd() *cobra.Command {
21 cmd := &cobra.Command{
22 Use: "rewrite",
23 RunE: rewriteCmdRun,
24 }
25 cmd.Flags().StringVar(
26 &appManagerFlags.repoAddr,
27 "repo-addr",
28 "",
29 "",
30 )
31 cmd.Flags().StringVar(
32 &appManagerFlags.sshKey,
33 "ssh-key",
34 "",
35 "",
36 )
37 return cmd
38}
39
40func rewriteCmdRun(cmd *cobra.Command, args []string) error {
41 sshKey, err := os.ReadFile(appManagerFlags.sshKey)
42 if err != nil {
43 return err
44 }
45 signer, err := ssh.ParsePrivateKey(sshKey)
46 if err != nil {
47 return err
48 }
49 addr, err := soft.ParseRepositoryAddress(appManagerFlags.repoAddr)
50 if err != nil {
51 return err
52 }
53 repo, err := soft.CloneRepository(addr, signer)
54 if err != nil {
55 return err
56 }
57 log.Println("Cloned repository")
gioe72b54f2024-04-22 10:44:41 +040058 repoIO, err := soft.NewRepoIO(repo, signer)
gio308105e2024-04-19 13:12:13 +040059 if err != nil {
60 return err
61 }
62 log.Println("Creating repository")
gio09a3e5b2024-04-26 14:11:06 +040063 r := installer.NewInMemoryAppRepository(installer.CreateAllApps())
giof8843412024-05-22 16:38:05 +040064 hf := installer.NewGitHelmFetcher()
65 mgr, err := installer.NewAppManager(repoIO, nil, nil, hf, "/apps")
gio308105e2024-04-19 13:12:13 +040066 if err != nil {
67 return err
68 }
69 env, err := mgr.Config()
70 if err != nil {
71 return err
72 }
73 fmt.Printf("%+v\n", env)
74 log.Println("Read config")
75 if err != nil {
76 return err
77 }
78 all, err := mgr.FindAllInstances()
79 if err != nil {
80 return err
81 }
82 for _, inst := range all {
83 app, err := installer.FindEnvApp(r, inst.AppId)
84 if err != nil {
85 return err
86 }
87 v := inst.InputToValues(app.Schema())
giof8843412024-05-22 16:38:05 +040088 if _, err := mgr.Install(
89 app,
90 inst.Id,
91 inst.Release.AppDir,
92 inst.Release.Namespace,
93 v,
94 installer.WithNoPublish(),
95 ); err != nil {
gio308105e2024-04-19 13:12:13 +040096 return err
97 }
98 }
99 repoIO.CommitAndPush("upgrade: persist cue files")
100 return nil
101}