forked from convox/rack
-
Notifications
You must be signed in to change notification settings - Fork 0
/
system.go
113 lines (88 loc) · 2.4 KB
/
system.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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package controllers
import (
"net/http"
"strconv"
"github.com/convox/rack/api/httperr"
"github.com/convox/rack/api/models"
"github.com/convox/rack/api/provider"
)
func SystemReleaseList(rw http.ResponseWriter, r *http.Request) *httperr.Error {
rack, err := provider.SystemGet()
if awsError(err) == "ValidationError" {
return httperr.Errorf(404, "no such stack: %s", rack)
}
if err != nil {
return httperr.Server(err)
}
releases, err := provider.ReleaseList(rack.Name)
if err != nil {
return httperr.Server(err)
}
return RenderJson(rw, releases)
}
func SystemShow(rw http.ResponseWriter, r *http.Request) *httperr.Error {
rack, err := provider.SystemGet()
if awsError(err) == "ValidationError" {
return httperr.Errorf(404, "no such stack: %s", rack)
}
if err != nil {
return httperr.Server(err)
}
return RenderJson(rw, rack)
}
func SystemUpdate(rw http.ResponseWriter, r *http.Request) *httperr.Error {
rack, err := provider.SystemGet()
if err != nil {
return httperr.Server(err)
}
notifyData := map[string]string{}
if count := GetForm(r, "count"); count != "" {
count, err := strconv.Atoi(count)
if err != nil {
return httperr.Errorf(403, "count must be an integer")
}
// -1 is an invalid value that indicates no change
if count != -1 {
if count <= 1 {
return httperr.Errorf(403, "count must be greater than 1")
}
stack, err := provider.AppGet(rack.Name)
if err != nil {
return httperr.Errorf(404, "no such stack")
}
if stack.Parameters["Autoscale"] == "Yes" {
return httperr.Errorf(403, "count prohibited when autoscaling is enabled")
}
rack.Count = count
notifyData["count"] = strconv.Itoa(count)
}
}
if t := GetForm(r, "type"); t != "" {
rack.Type = t
notifyData["type"] = t
}
if version := GetForm(r, "version"); version != "" {
rack.Version = version
notifyData["version"] = version
}
if len(notifyData) == 0 {
return httperr.Errorf(403, "no rack updates specified")
}
err = provider.SystemSave(*rack)
if err != nil {
return httperr.Server(err)
}
rack, err = provider.SystemGet()
if err != nil {
return httperr.Server(err)
}
models.NotifySuccess("rack:update", notifyData)
return RenderJson(rw, rack)
}
func SystemCapacity(rw http.ResponseWriter, r *http.Request) *httperr.Error {
capacity, err := provider.CapacityGet()
if err != nil {
return httperr.Server(err)
}
return RenderJson(rw, capacity)
}