blob: 78c88d2ae6347533f72860d1ddab15ef81af5067 [file] [log] [blame]
gio0eaf2712024-04-14 13:08:46 +04001package main
2
3import (
4 "encoding/json"
gio0eaf2712024-04-14 13:08:46 +04005 "log"
6 "os"
7
8 "github.com/giolekva/pcloud/core/installer"
9 "github.com/giolekva/pcloud/core/installer/soft"
10 "github.com/giolekva/pcloud/core/installer/welcome"
11
12 "github.com/spf13/cobra"
13)
14
15var dodoAppFlags struct {
gio266c04f2024-07-03 14:18:45 +040016 port int
17 sshKey string
18 repoAddr string
19 self string
20 namespace string
21 envConfig string
22 appAdminKey string
23 gitRepoPublicKey string
gio0eaf2712024-04-14 13:08:46 +040024}
25
26func dodoAppCmd() *cobra.Command {
27 cmd := &cobra.Command{
28 Use: "dodo-app",
29 RunE: dodoAppCmdRun,
30 }
31 cmd.Flags().IntVar(
32 &dodoAppFlags.port,
33 "port",
34 8080,
35 "",
36 )
37 cmd.Flags().StringVar(
38 &dodoAppFlags.repoAddr,
39 "repo-addr",
40 "",
41 "",
42 )
43 cmd.Flags().StringVar(
44 &dodoAppFlags.sshKey,
45 "ssh-key",
46 "",
47 "",
48 )
49 cmd.Flags().StringVar(
50 &dodoAppFlags.self,
51 "self",
52 "",
53 "",
54 )
55 cmd.Flags().StringVar(
56 &dodoAppFlags.namespace,
57 "namespace",
58 "",
59 "",
60 )
61 cmd.Flags().StringVar(
62 &dodoAppFlags.envConfig,
63 "env-config",
64 "",
65 "",
66 )
gio266c04f2024-07-03 14:18:45 +040067 cmd.Flags().StringVar(
68 &dodoAppFlags.appAdminKey,
69 "app-admin-key",
70 "",
71 "",
72 )
73 cmd.Flags().StringVar(
74 &dodoAppFlags.gitRepoPublicKey,
75 "git-repo-public-key",
76 "",
77 "",
78 )
gio0eaf2712024-04-14 13:08:46 +040079 return cmd
80}
81
82func dodoAppCmdRun(cmd *cobra.Command, args []string) error {
83 envConfig, err := os.Open(dodoAppFlags.envConfig)
84 if err != nil {
85 return err
86 }
87 defer envConfig.Close()
88 var env installer.EnvConfig
89 if err := json.NewDecoder(envConfig).Decode(&env); err != nil {
90 return err
91 }
92 sshKey, err := os.ReadFile(dodoAppFlags.sshKey)
93 if err != nil {
94 return err
95 }
gio33059762024-07-05 13:19:07 +040096 cg := soft.RealClientGetter{}
97 softClient, err := cg.Get(dodoAppFlags.repoAddr, sshKey, log.Default())
gio0eaf2712024-04-14 13:08:46 +040098 if err != nil {
99 return err
100 }
giof8843412024-05-22 16:38:05 +0400101 jc, err := newJobCreator()
102 if err != nil {
103 return err
104 }
gio33059762024-07-05 13:19:07 +0400105 nsc, err := newNSCreator()
106 if err != nil {
gio266c04f2024-07-03 14:18:45 +0400107 return err
108 }
gio9d66f322024-07-06 13:45:10 +0400109 s, err := welcome.NewDodoAppServer(
gio33059762024-07-05 13:19:07 +0400110 dodoAppFlags.port,
111 dodoAppFlags.self,
112 string(sshKey),
113 dodoAppFlags.gitRepoPublicKey,
114 softClient,
115 dodoAppFlags.namespace,
116 nsc,
117 jc,
118 env,
119 )
gio9d66f322024-07-06 13:45:10 +0400120 if err != nil {
121 return err
122 }
gio33059762024-07-05 13:19:07 +0400123 if dodoAppFlags.appAdminKey != "" {
124 if err := s.CreateApp("app", dodoAppFlags.appAdminKey); err != nil {
gio0eaf2712024-04-14 13:08:46 +0400125 return err
126 }
gio0eaf2712024-04-14 13:08:46 +0400127 }
gio0eaf2712024-04-14 13:08:46 +0400128 return s.Start()
129}