DodoApp: API to create new app
Change-Id: I20d73ef17cc03073c913fceb4f3bed7a26754cea
diff --git a/core/installer/cmd/dodo_app.go b/core/installer/cmd/dodo_app.go
index 3e4f6bd..5d54147 100644
--- a/core/installer/cmd/dodo_app.go
+++ b/core/installer/cmd/dodo_app.go
@@ -2,8 +2,6 @@
import (
"encoding/json"
- "errors"
- "fmt"
"log"
"os"
@@ -95,7 +93,8 @@
if err != nil {
return err
}
- softClient, err := soft.NewClient(dodoAppFlags.repoAddr, sshKey, log.Default())
+ cg := soft.RealClientGetter{}
+ softClient, err := cg.Get(dodoAppFlags.repoAddr, sshKey, log.Default())
if err != nil {
return err
}
@@ -103,144 +102,25 @@
if err != nil {
return err
}
- if err := softClient.AddRepository("config"); err == nil {
- repo, err := softClient.GetRepo("config")
- if err != nil {
- return err
- }
- appRepo := installer.NewInMemoryAppRepository(installer.CreateAllApps())
- app, err := installer.FindEnvApp(appRepo, "dodo-app-instance")
- if err != nil {
- return err
- }
- nsc := installer.NewNoOpNamespaceCreator()
- if err != nil {
- return err
- }
- hf := installer.NewGitHelmFetcher()
- m, err := installer.NewAppManager(repo, nsc, jc, hf, "/")
- if err != nil {
- return err
- }
- if _, err := m.Install(app, "app", "/app", dodoAppFlags.namespace, map[string]any{
- "appName": "app",
- "repoAddr": softClient.GetRepoAddress("app"),
- "gitRepoPublicKey": dodoAppFlags.gitRepoPublicKey,
- }, installer.WithConfig(&env)); err != nil {
- return err
- }
- if cfg, err := m.FindInstance("app"); err != nil {
- return err
- } else {
- fluxKeys, ok := cfg.Input["fluxKeys"]
- if !ok {
- return fmt.Errorf("Fluxcd keys not found")
- }
- fluxPublicKey, ok := fluxKeys.(map[string]any)["public"]
- if !ok {
- return fmt.Errorf("Fluxcd keys not found")
- }
- if err := softClient.AddUser("fluxcd", fluxPublicKey.(string)); err != nil {
- return err
- }
- if err := softClient.AddReadOnlyCollaborator("app", "fluxcd"); err != nil {
- return err
- }
- }
- } else if !errors.Is(err, soft.ErrorAlreadyExists) {
+ nsc, err := newNSCreator()
+ if err != nil {
return err
}
- if err := softClient.AddRepository("app"); err == nil {
- repo, err := softClient.GetRepo("app")
- if err != nil {
+ s := welcome.NewDodoAppServer(
+ dodoAppFlags.port,
+ dodoAppFlags.self,
+ string(sshKey),
+ dodoAppFlags.gitRepoPublicKey,
+ softClient,
+ dodoAppFlags.namespace,
+ nsc,
+ jc,
+ env,
+ )
+ if dodoAppFlags.appAdminKey != "" {
+ if err := s.CreateApp("app", dodoAppFlags.appAdminKey); err != nil {
return err
}
- if err := initRepo(repo); err != nil {
- return err
- }
- if err := welcome.UpdateDodoApp("app", softClient, dodoAppFlags.namespace, string(sshKey), jc, &env); err != nil {
- return err
- }
- if err := softClient.AddWebhook("app", fmt.Sprintf("http://%s/update", dodoAppFlags.self), "--active=true", "--events=push", "--content-type=json"); err != nil {
- return err
- }
- if err := softClient.AddUser("app", dodoAppFlags.appAdminKey); err != nil {
- return err
- }
- if err := softClient.AddReadWriteCollaborator("app", "app"); err != nil {
- return err
- }
- } else if !errors.Is(err, soft.ErrorAlreadyExists) {
- return err
}
- s := welcome.NewDodoAppServer(dodoAppFlags.port, string(sshKey), softClient, dodoAppFlags.namespace, jc, env)
return s.Start()
}
-
-const goMod = `module dodo.app
-
-go 1.18
-`
-
-const mainGo = `package main
-
-import (
- "flag"
- "fmt"
- "log"
- "net/http"
-)
-
-var port = flag.Int("port", 8080, "Port to listen on")
-
-func handler(w http.ResponseWriter, r *http.Request) {
- fmt.Fprintln(w, "Hello from Dodo App!")
-}
-
-func main() {
- flag.Parse()
- http.HandleFunc("/", handler)
- log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil))
-}
-`
-
-const appCue = `app: {
- type: "golang:1.22.0"
- run: "main.go"
- ingress: {
- network: "Private" // or Public
- subdomain: "testapp"
- auth: enabled: false
- }
-}
-`
-
-func initRepo(repo soft.RepoIO) error {
- return repo.Do(func(fs soft.RepoFS) (string, error) {
- {
- w, err := fs.Writer("go.mod")
- if err != nil {
- return "", err
- }
- defer w.Close()
- fmt.Fprint(w, goMod)
- }
- {
- w, err := fs.Writer("main.go")
- if err != nil {
- return "", err
- }
- defer w.Close()
- fmt.Fprintf(w, "%s", mainGo)
- }
- {
- w, err := fs.Writer("app.cue")
- if err != nil {
- return "", err
- }
- defer w.Close()
- fmt.Fprint(w, appCue)
- }
- return "go web app template", nil
- })
-}