blob: 5fa297f3177c9417781f4dbf58df75cea7af5658 [file] [log] [blame]
giolekvad5a58c42020-05-07 22:18:35 +04001package main
2
3import (
giolekvaa4a153b2020-05-12 11:49:53 +04004 "flag"
5 "fmt"
6 "io"
7 "log"
8 "net/http"
9 "os"
giolekvad5a58c42020-05-07 22:18:35 +040010
giolekvafe0765f2020-05-12 14:09:09 +040011 "github.com/golang/glog"
giolekvaa4a153b2020-05-12 11:49:53 +040012
13 app "github.com/giolekva/pcloud/appmanager"
giolekvad5a58c42020-05-07 22:18:35 +040014)
15
giolekvaa4a153b2020-05-12 11:49:53 +040016var port = flag.Int("port", 1234, "Port to listen on.")
giolekvafe0765f2020-05-12 14:09:09 +040017var apiAddr = flag.String("api_addr", "", "PCloud API service address.")
giolekvaa4a153b2020-05-12 11:49:53 +040018
19var helmUploadPage = `
20<html>
21<head>
22 <title>Upload Helm chart</title>
23</head>
24<body>
25<form enctype="multipart/form-data" action="/" method="post">
26 <input type="file" name="chartfile" />
27 <input type="submit" value="upload" />
28</form>
29</body>
30</html>
31`
32
33func helmHandler(w http.ResponseWriter, r *http.Request) {
34 if r.Method == "GET" {
35 _, err := io.WriteString(w, helmUploadPage)
36 if err != nil {
37 http.Error(w, err.Error(), http.StatusInternalServerError)
38 }
39 } else if r.Method == "POST" {
40 r.ParseMultipartForm(1000000)
41 file, handler, err := r.FormFile("chartfile")
42 if err != nil {
43 http.Error(w, err.Error(), http.StatusInternalServerError)
44 return
45 }
46 defer file.Close()
47 p := "/tmp/" + handler.Filename
48 f, err := os.OpenFile(p, os.O_WRONLY|os.O_CREATE, 0666)
49 if err != nil {
50 fmt.Println(err)
51 return
52 }
53 defer f.Close()
54 _, err = io.Copy(f, file)
55 if err != nil {
56 http.Error(w, err.Error(), http.StatusInternalServerError)
57 return
58 }
59 if err = installHelmChart(p); err != nil {
60 http.Error(w, err.Error(), http.StatusInternalServerError)
61 return
62 }
63 w.Write([]byte("Installed"))
giolekvad5a58c42020-05-07 22:18:35 +040064 }
giolekvaa4a153b2020-05-12 11:49:53 +040065}
66
67func installHelmChart(path string) error {
68 h, err := app.HelmChartFromDir("/Users/lekva/dev/go/src/github.com/giolekva/pcloud/apps/rpuppy/chart")
69 if err != nil {
70 return err
71 }
giolekvafe0765f2020-05-12 14:09:09 +040072 err = app.InstallSchema(h.Schema, *apiAddr)
73 if err != nil {
74 return err
75 }
76 glog.Infof("Installed schema: %s", h.Schema)
giolekvaa4a153b2020-05-12 11:49:53 +040077 err = h.Install(
78 "/usr/local/bin/helm",
79 map[string]string{})
80 return err
81}
82
83func main() {
84 flag.Parse()
85 http.HandleFunc("/", helmHandler)
86 log.Fatal(http.ListenAndServe(fmt.Sprintf(":%d", *port), nil))
87
giolekvad5a58c42020-05-07 22:18:35 +040088}