Skip to content

Commit 2a49376

Browse files
committed
chore(workflow-cli): limits:set/limits:unset command supports both CPU and memory
1 parent eb34e0b commit 2a49376

5 files changed

Lines changed: 102 additions & 69 deletions

File tree

cmd/cmd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,8 @@ type Commander interface {
5555
LabelsSet(string, []string) error
5656
LabelsUnset(string, []string) error
5757
LimitsList(string) error
58-
LimitsSet(string, []string, string) error
59-
LimitsUnset(string, []string, string) error
58+
LimitsSet(string, []string, []string) error
59+
LimitsUnset(string, []string, []string) error
6060
TimeoutsList(string) error
6161
TimeoutsSet(string, []string) error
6262
TimeoutsUnset(string, []string) error

cmd/limits.go

Lines changed: 30 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,7 @@ func (d *DryccCmd) LimitsList(appID string) error {
2626
d.Printf("=== %s Limits\n\n", appID)
2727

2828
d.Println("--- Memory")
29-
if len(config.Memory) == 0 {
30-
d.Println("Default")
31-
} else {
29+
if len(config.Memory) != 0 {
3230
memoryMap := make(map[string]string)
3331

3432
for key, value := range config.Memory {
@@ -39,9 +37,7 @@ func (d *DryccCmd) LimitsList(appID string) error {
3937
}
4038

4139
d.Println("\n--- CPU")
42-
if len(config.CPU) == 0 {
43-
d.Println("Default")
44-
} else {
40+
if len(config.CPU) != 0 {
4541
cpuMap := make(map[string]string)
4642

4743
for key, value := range config.CPU {
@@ -55,28 +51,32 @@ func (d *DryccCmd) LimitsList(appID string) error {
5551
}
5652

5753
// LimitsSet sets an app's limits.
58-
func (d *DryccCmd) LimitsSet(appID string, limits []string, limitType string) error {
54+
func (d *DryccCmd) LimitsSet(appID string, cpuLimits []string, memoryLimits []string) error {
5955
s, appID, err := load(d.ConfigFile, appID)
6056

6157
if err != nil {
6258
return err
6359
}
6460

65-
limitsMap, err := parseLimits(limits)
66-
if err != nil {
67-
return err
61+
configObj := api.Config{}
62+
if len(cpuLimits) > 0 {
63+
cpuLimitsMap, err := parseLimits(cpuLimits)
64+
if err != nil {
65+
return err
66+
}
67+
configObj.CPU = cpuLimitsMap
68+
}
69+
if len(memoryLimits) > 0 {
70+
memoryLimitsMap, err := parseLimits(memoryLimits)
71+
if err != nil {
72+
return err
73+
}
74+
configObj.Memory = memoryLimitsMap
6875
}
6976

7077
d.Print("Applying limits... ")
7178

7279
quit := progress(d.WOut)
73-
configObj := api.Config{}
74-
75-
if limitType == "cpu" {
76-
configObj.CPU = limitsMap
77-
} else {
78-
configObj.Memory = limitsMap
79-
}
8080

8181
_, err = config.Set(s.Client, appID, configObj)
8282
quit <- true
@@ -91,7 +91,7 @@ func (d *DryccCmd) LimitsSet(appID string, limits []string, limitType string) er
9191
}
9292

9393
// LimitsUnset removes an app's limits.
94-
func (d *DryccCmd) LimitsUnset(appID string, limits []string, limitType string) error {
94+
func (d *DryccCmd) LimitsUnset(appID string, cpuLimits []string, memoryLimits []string) error {
9595
s, appID, err := load(d.ConfigFile, appID)
9696

9797
if err != nil {
@@ -103,17 +103,19 @@ func (d *DryccCmd) LimitsUnset(appID string, limits []string, limitType string)
103103
quit := progress(d.WOut)
104104

105105
configObj := api.Config{}
106-
107-
valuesMap := make(map[string]interface{})
108-
109-
for _, limit := range limits {
110-
valuesMap[limit] = nil
106+
if len(cpuLimits) > 0 {
107+
cpuMap := make(map[string]interface{})
108+
for _, limit := range cpuLimits {
109+
cpuMap[limit] = nil
110+
}
111+
configObj.CPU = cpuMap
111112
}
112-
113-
if limitType == "cpu" {
114-
configObj.CPU = valuesMap
115-
} else {
116-
configObj.Memory = valuesMap
113+
if len(memoryLimits) > 0 {
114+
memoryMap := make(map[string]interface{})
115+
for _, limit := range memoryLimits {
116+
memoryMap[limit] = nil
117+
}
118+
configObj.Memory = memoryMap
117119
}
118120

119121
_, err = config.Set(s.Client, appID, configObj)

cmd/limits_test.go

Lines changed: 42 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ func TestLimitsList(t *testing.T) {
9898
"values": {},
9999
"memory": {
100100
"web": "2G",
101+
"worker": "1G",
101102
"db": "1000M"
102103
},
103104
"cpu": {
@@ -121,8 +122,9 @@ func TestLimitsList(t *testing.T) {
121122
assert.Equal(t, b.String(), `=== enterprise Limits
122123
123124
--- Memory
124-
db 1000M
125-
web 2G
125+
db 1000M
126+
web 2G
127+
worker 1G
126128
127129
--- CPU
128130
db 500m
@@ -152,10 +154,8 @@ worker 1
152154
assert.Equal(t, b.String(), `=== franklin Limits
153155
154156
--- Memory
155-
Default
156157
157158
--- CPU
158-
Default
159159
`, "output")
160160
}
161161

@@ -181,7 +181,7 @@ func TestLimitsSet(t *testing.T) {
181181
"owner": "jkirk",
182182
"app": "foo",
183183
"values": {},
184-
"memory": {},
184+
"memory": {"web": "128M"},
185185
"cpu": {
186186
"web": "100m"
187187
},
@@ -196,15 +196,15 @@ func TestLimitsSet(t *testing.T) {
196196
var b bytes.Buffer
197197
cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
198198

199-
err = cmdr.LimitsSet("foo", []string{"web=100m"}, "cpu")
199+
err = cmdr.LimitsSet("foo", []string{"web=100m"}, []string{})
200200
assert.NoErr(t, err)
201201

202202
assert.Equal(t, testutil.StripProgress(b.String()), `Applying limits... done
203203
204204
=== foo Limits
205205
206206
--- Memory
207-
Default
207+
web 128M
208208
209209
--- CPU
210210
web 100m
@@ -227,7 +227,9 @@ web 100m
227227
"memory": {
228228
"web": "1G"
229229
},
230-
"cpu": {},
230+
"cpu": {
231+
"web": "1"
232+
},
231233
"tags": {},
232234
"registry": {},
233235
"created": "2014-01-01T00:00:00UTC",
@@ -237,7 +239,7 @@ web 100m
237239
})
238240
b.Reset()
239241

240-
err = cmdr.LimitsSet("franklin", []string{"web=1G"}, "memory")
242+
err = cmdr.LimitsSet("franklin", []string{}, []string{"web=1G"})
241243
assert.NoErr(t, err)
242244

243245
assert.Equal(t, testutil.StripProgress(b.String()), `Applying limits... done
@@ -248,7 +250,7 @@ web 100m
248250
web 1G
249251
250252
--- CPU
251-
Default
253+
web 1
252254
`, "output")
253255

254256
// with requests/limit parameter
@@ -273,7 +275,11 @@ Default
273275
"worker": "3G",
274276
"db": "5G"
275277
},
276-
"cpu": {},
278+
"cpu": {
279+
"web": "1",
280+
"worker": "1",
281+
"db": "5"
282+
},
277283
"tags": {},
278284
"registry": {},
279285
"created": "2014-01-01T00:00:00UTC",
@@ -283,7 +289,7 @@ Default
283289
})
284290
b.Reset()
285291

286-
err = cmdr.LimitsSet("jim", []string{"web=2000M", "worker=3G", "db=5G"}, "memory")
292+
err = cmdr.LimitsSet("jim", []string{}, []string{"web=2000M", "worker=3G", "db=5G"})
287293
assert.NoErr(t, err)
288294

289295
assert.Equal(t, testutil.StripProgress(b.String()), `Applying limits... done
@@ -296,7 +302,9 @@ web 2000M
296302
worker 3G
297303
298304
--- CPU
299-
Default
305+
db 5
306+
web 1
307+
worker 1
300308
`, "output")
301309

302310
// with requests/limit parameter
@@ -321,7 +329,11 @@ Default
321329
"worker": "300m",
322330
"db": "5"
323331
},
324-
"cpu": {},
332+
"memory": {
333+
"web": "1G",
334+
"worker": "1G",
335+
"db": "1G"
336+
},
325337
"tags": {},
326338
"registry": {},
327339
"created": "2014-01-01T00:00:00UTC",
@@ -331,15 +343,17 @@ Default
331343
})
332344
b.Reset()
333345

334-
err = cmdr.LimitsSet("phew", []string{"web=2", "worker=300m", "db=5"}, "cpu")
346+
err = cmdr.LimitsSet("phew", []string{"web=2", "worker=300m", "db=5"}, []string{})
335347
assert.NoErr(t, err)
336348

337349
assert.Equal(t, testutil.StripProgress(b.String()), `Applying limits... done
338350
339351
=== phew Limits
340352
341353
--- Memory
342-
Default
354+
db 1G
355+
web 1G
356+
worker 1G
343357
344358
--- CPU
345359
db 5
@@ -370,9 +384,11 @@ func TestLimitsUnset(t *testing.T) {
370384
"owner": "jkirk",
371385
"app": "foo",
372386
"values": {},
373-
"memory": {},
387+
"memory": {
388+
"web": "128M"
389+
},
374390
"cpu": {
375-
"web": "100m"
391+
"web": "125m"
376392
},
377393
"tags": {},
378394
"registry": {},
@@ -385,18 +401,18 @@ func TestLimitsUnset(t *testing.T) {
385401
var b bytes.Buffer
386402
cmdr := DryccCmd{WOut: &b, ConfigFile: cf}
387403

388-
err = cmdr.LimitsUnset("foo", []string{"web"}, "memory")
404+
err = cmdr.LimitsUnset("foo", []string{}, []string{"web"})
389405
assert.NoErr(t, err)
390406

391407
assert.Equal(t, testutil.StripProgress(b.String()), `Applying limits... done
392408
393409
=== foo Limits
394410
395411
--- Memory
396-
Default
412+
web 128M
397413
398414
--- CPU
399-
web 100m
415+
web 125m
400416
`, "output")
401417

402418
server.Mux.HandleFunc("/v2/apps/franklin/config/", func(w http.ResponseWriter, r *http.Request) {
@@ -406,16 +422,17 @@ web 100m
406422
CPU: map[string]interface{}{
407423
"web": nil,
408424
},
425+
Memory: map[string]interface{}{
426+
"web": nil,
427+
},
409428
}, r)
410429
}
411430

412431
fmt.Fprintf(w, `{
413432
"owner": "bedison",
414433
"app": "franklin",
415434
"values": {},
416-
"memory": {
417-
"web": "1G"
418-
},
435+
"memory": {},
419436
"cpu": {},
420437
"tags": {},
421438
"registry": {},
@@ -426,17 +443,15 @@ web 100m
426443
})
427444
b.Reset()
428445

429-
err = cmdr.LimitsUnset("franklin", []string{"web"}, "cpu")
446+
err = cmdr.LimitsUnset("franklin", []string{"web"}, []string{"web"})
430447
assert.NoErr(t, err)
431448

432449
assert.Equal(t, testutil.StripProgress(b.String()), `Applying limits... done
433450
434451
=== franklin Limits
435452
436453
--- Memory
437-
web 1G
438454
439455
--- CPU
440-
Default
441456
`, "output")
442457
}

0 commit comments

Comments
 (0)