-
Notifications
You must be signed in to change notification settings - Fork 90
/
downstream.go
89 lines (80 loc) · 2.34 KB
/
downstream.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
package handlers
import (
"net/http"
"strconv"
"github.com/gorilla/mux"
"github.com/replicatedhq/kots/pkg/api/downstream/types"
"github.com/replicatedhq/kots/pkg/helm"
"github.com/replicatedhq/kots/pkg/logger"
"github.com/replicatedhq/kots/pkg/store"
"github.com/replicatedhq/kots/pkg/util"
)
type GetDownstreamOutputResponse struct {
Logs DownstreamLogs `json:"logs"`
}
type DownstreamLogs struct {
DryrunStdout string `json:"dryrunStdout"`
DryrunStderr string `json:"dryrunStderr"`
ApplyStdout string `json:"applyStdout"`
ApplyStderr string `json:"applyStderr"`
HelmStdout string `json:"helmStdout"`
HelmStderr string `json:"helmStderr"`
RenderError string `json:"renderError"`
}
func (h *Handler) GetDownstreamOutput(w http.ResponseWriter, r *http.Request) {
appSlug := mux.Vars(r)["appSlug"]
clusterID := mux.Vars(r)["clusterId"]
sequence, err := strconv.Atoi(mux.Vars(r)["sequence"])
output := new(types.DownstreamOutput)
if err != nil {
logger.Error(err)
w.WriteHeader(http.StatusInternalServerError)
return
}
if util.IsHelmManaged() {
app := helm.GetHelmApp(appSlug)
if app == nil {
w.WriteHeader(http.StatusNotFound)
return
}
releaseSecret, err := helm.GetChartSecret(app.Release.Name, app.Release.Namespace, mux.Vars(r)["sequence"])
if err != nil {
logger.Error(err)
w.WriteHeader(http.StatusInternalServerError)
return
}
if releaseSecret != nil {
if releaseSecret.Info.Status != "failed" {
output.HelmStdout = releaseSecret.Info.Description
} else {
output.HelmStderr = releaseSecret.Info.Description
}
}
} else {
a, err := store.GetStore().GetAppFromSlug(appSlug)
if err != nil {
logger.Error(err)
w.WriteHeader(http.StatusInternalServerError)
return
}
output, err = store.GetStore().GetDownstreamOutput(a.ID, clusterID, int64(sequence))
if err != nil {
logger.Error(err)
w.WriteHeader(http.StatusInternalServerError)
return
}
}
downstreamLogs := DownstreamLogs{
DryrunStdout: output.DryrunStdout,
DryrunStderr: output.DryrunStderr,
ApplyStdout: output.ApplyStdout,
ApplyStderr: output.ApplyStderr,
HelmStdout: output.HelmStdout,
HelmStderr: output.HelmStderr,
RenderError: output.RenderError,
}
getDownstreamOutputResponse := GetDownstreamOutputResponse{
Logs: downstreamLogs,
}
JSON(w, http.StatusOK, getDownstreamOutputResponse)
}