Skip to content

Commit c7d44f9

Browse files
committed
Move AutoScaleSpec and RecommendedResources to types
1 parent 676dd66 commit c7d44f9

File tree

11 files changed

+134
-122
lines changed

11 files changed

+134
-122
lines changed

api/scale.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ import (
1010
"github.com/tsuru/tsuru/event"
1111
"github.com/tsuru/tsuru/permission"
1212
"github.com/tsuru/tsuru/provision"
13+
14+
provTypes "github.com/tsuru/tsuru/types/provision"
1315
)
1416

1517
// title: units autoscale info
@@ -66,7 +68,7 @@ func addAutoScaleUnits(w http.ResponseWriter, r *http.Request, t auth.Token) (er
6668
if !allowed {
6769
return permission.ErrUnauthorized
6870
}
69-
var spec provision.AutoScaleSpec
71+
var spec provTypes.AutoScaleSpec
7072
err = ParseInput(r, &spec)
7173
if err != nil {
7274
return &errors.HTTP{
@@ -78,7 +80,7 @@ func addAutoScaleUnits(w http.ResponseWriter, r *http.Request, t auth.Token) (er
7880
if err != nil {
7981
return err
8082
}
81-
err = spec.Validate(quota.Limit, &a)
83+
err = provision.ValidateAutoScaleSpec(&spec, quota.Limit, &a)
8284
if err != nil {
8385
return &errors.HTTP{
8486
Code: http.StatusBadRequest,

api/scale_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/tsuru/tsuru/provision"
1414
"github.com/tsuru/tsuru/provision/provisiontest"
1515
permTypes "github.com/tsuru/tsuru/types/permission"
16+
provTypes "github.com/tsuru/tsuru/types/provision"
1617
"github.com/tsuru/tsuru/types/quota"
1718
check "gopkg.in/check.v1"
1819
)
@@ -28,7 +29,7 @@ func (s *S) TestAutoScaleUnitsInfo(c *check.C) {
2829
err := app.CreateApp(context.TODO(), &a, s.user)
2930
c.Assert(err, check.IsNil)
3031

31-
autoscaleSpec := provision.AutoScaleSpec{
32+
autoscaleSpec := provTypes.AutoScaleSpec{
3233
Process: "p1",
3334
AverageCPU: "300m",
3435
MaxUnits: 10,
@@ -50,7 +51,7 @@ func (s *S) TestAutoScaleUnitsInfo(c *check.C) {
5051
c.Assert(recorder.Code, check.Equals, http.StatusOK)
5152
c.Assert(recorder.Header().Get("Content-Type"), check.Equals, "application/json")
5253

53-
var autoscales []provision.AutoScaleSpec
54+
var autoscales []provTypes.AutoScaleSpec
5455
err = json.Unmarshal(recorder.Body.Bytes(), &autoscales)
5556
c.Assert(err, check.IsNil)
5657
c.Assert(autoscales, check.HasLen, 1)
@@ -89,7 +90,7 @@ func (s *S) TestAddAutoScaleUnits(c *check.C) {
8990
c.Assert(recorder.Code, check.Equals, http.StatusOK)
9091
spec, err := a.AutoScaleInfo()
9192
c.Assert(err, check.IsNil)
92-
c.Assert(spec, check.DeepEquals, []provision.AutoScaleSpec{
93+
c.Assert(spec, check.DeepEquals, []provTypes.AutoScaleSpec{
9394
{Process: "p1", MinUnits: 2, MaxUnits: 10, AverageCPU: "600m"},
9495
})
9596
c.Assert(eventtest.EventDesc{
@@ -115,7 +116,7 @@ func (s *S) TestRemoveAutoScaleUnits(c *check.C) {
115116
a := app.App{Name: "myapp", Platform: "zend", TeamOwner: s.team.Name}
116117
err := app.CreateApp(context.TODO(), &a, s.user)
117118
c.Assert(err, check.IsNil)
118-
err = a.AutoScale(provision.AutoScaleSpec{
119+
err = a.AutoScale(provTypes.AutoScaleSpec{
119120
Process: "p1",
120121
AverageCPU: "300m",
121122
MaxUnits: 10,

app/app.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2789,7 +2789,7 @@ buildResult:
27892789
return result
27902790
}
27912791

2792-
func (app *App) AutoScaleInfo() ([]provision.AutoScaleSpec, error) {
2792+
func (app *App) AutoScaleInfo() ([]provTypes.AutoScaleSpec, error) {
27932793
prov, err := app.getProvisioner()
27942794
if err != nil {
27952795
return nil, err
@@ -2801,7 +2801,7 @@ func (app *App) AutoScaleInfo() ([]provision.AutoScaleSpec, error) {
28012801
return autoscaleProv.GetAutoScale(app.ctx, app)
28022802
}
28032803

2804-
func (app *App) VerticalAutoScaleRecommendations() ([]provision.RecommendedResources, error) {
2804+
func (app *App) VerticalAutoScaleRecommendations() ([]provTypes.RecommendedResources, error) {
28052805
prov, err := app.getProvisioner()
28062806
if err != nil {
28072807
return nil, err
@@ -2825,7 +2825,7 @@ func (app *App) UnitsMetrics() ([]provTypes.UnitMetric, error) {
28252825
return metricsProv.UnitsMetrics(app.ctx, app)
28262826
}
28272827

2828-
func (app *App) AutoScale(spec provision.AutoScaleSpec) error {
2828+
func (app *App) AutoScale(spec provTypes.AutoScaleSpec) error {
28292829
prov, err := app.getProvisioner()
28302830
if err != nil {
28312831
return err

app/app_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2653,7 +2653,7 @@ func (s *S) TestAppMarshalJSONWithAutoscaleProv(c *check.C) {
26532653
Routers: []appTypes.AppRouter{{Name: "fake", Opts: map[string]string{"opt1": "val1"}}},
26542654
Tags: []string{"tag a", "tag b"},
26552655
}
2656-
err = app.AutoScale(provision.AutoScaleSpec{Process: "p1"})
2656+
err = app.AutoScale(provTypes.AutoScaleSpec{Process: "p1"})
26572657
c.Assert(err, check.IsNil)
26582658
err = routertest.FakeRouter.AddBackend(context.TODO(), &app)
26592659
c.Assert(err, check.IsNil)
@@ -4220,7 +4220,7 @@ func (s *S) TestAppUnitsWithAutoscaler(c *check.C) {
42204220
err := CreateApp(context.TODO(), &a, s.user)
42214221
c.Assert(err, check.IsNil)
42224222

4223-
err = provisioner.SetAutoScale(context.TODO(), &a, provision.AutoScaleSpec{
4223+
err = provisioner.SetAutoScale(context.TODO(), &a, provTypes.AutoScaleSpec{
42244224
Process: "web",
42254225
Version: 1,
42264226
MinUnits: 1,
@@ -6202,21 +6202,21 @@ func (s *S) TestAutoscaleWithAutoscaleProvisioner(c *check.C) {
62026202
})
62036203
defer provision.Unregister("autoscaleProv")
62046204
a := App{Name: "my-test-app", TeamOwner: s.team.Name}
6205-
err := a.AutoScale(provision.AutoScaleSpec{Process: "p1"})
6205+
err := a.AutoScale(provTypes.AutoScaleSpec{Process: "p1"})
62066206
c.Assert(err, check.IsNil)
6207-
err = a.AutoScale(provision.AutoScaleSpec{Process: "p2"})
6207+
err = a.AutoScale(provTypes.AutoScaleSpec{Process: "p2"})
62086208
c.Assert(err, check.IsNil)
62096209
scales, err := a.AutoScaleInfo()
62106210
c.Assert(err, check.IsNil)
6211-
c.Assert(scales, check.DeepEquals, []provision.AutoScaleSpec{
6211+
c.Assert(scales, check.DeepEquals, []provTypes.AutoScaleSpec{
62126212
{Process: "p1"},
62136213
{Process: "p2"},
62146214
})
62156215
err = a.RemoveAutoScale("p1")
62166216
c.Assert(err, check.IsNil)
62176217
scales, err = a.AutoScaleInfo()
62186218
c.Assert(err, check.IsNil)
6219-
c.Assert(scales, check.DeepEquals, []provision.AutoScaleSpec{
6219+
c.Assert(scales, check.DeepEquals, []provTypes.AutoScaleSpec{
62206220
{Process: "p2"},
62216221
})
62226222
}

provision/kubernetes/autoscale.go

Lines changed: 24 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/pkg/errors"
1515
tsuruErrors "github.com/tsuru/tsuru/errors"
1616
"github.com/tsuru/tsuru/provision"
17+
provTypes "github.com/tsuru/tsuru/types/provision"
1718
appsv1 "k8s.io/api/apps/v1"
1819
autoscalingv1 "k8s.io/api/autoscaling/v1"
1920
autoscalingv2 "k8s.io/api/autoscaling/v2"
@@ -32,7 +33,7 @@ const (
3233

3334
var errNoDeploy = errors.New("no routable version found for app, at least one deploy is required before configuring autoscale")
3435

35-
func (p *kubernetesProvisioner) GetVerticalAutoScaleRecommendations(ctx context.Context, a provision.App) ([]provision.RecommendedResources, error) {
36+
func (p *kubernetesProvisioner) GetVerticalAutoScaleRecommendations(ctx context.Context, a provision.App) ([]provTypes.RecommendedResources, error) {
3637
client, err := clusterForPool(ctx, a.GetPool())
3738
if err != nil {
3839
return nil, err
@@ -74,16 +75,16 @@ func (p *kubernetesProvisioner) GetVerticalAutoScaleRecommendations(ctx context.
7475
return nil, errors.WithStack(err)
7576
}
7677

77-
var specs []provision.RecommendedResources
78+
var specs []provTypes.RecommendedResources
7879
for _, vpa := range vpas {
7980
specs = append(specs, vpaToRecommended(*vpa))
8081
}
8182
return specs, nil
8283
}
8384

84-
func vpaToRecommended(vpa vpav1.VerticalPodAutoscaler) provision.RecommendedResources {
85+
func vpaToRecommended(vpa vpav1.VerticalPodAutoscaler) provTypes.RecommendedResources {
8586
ls := labelSetFromMeta(&vpa.ObjectMeta)
86-
rec := provision.RecommendedResources{
87+
rec := provTypes.RecommendedResources{
8788
Process: ls.AppProcess(),
8889
}
8990
if vpa.Status.Recommendation == nil {
@@ -93,22 +94,22 @@ func vpaToRecommended(vpa vpav1.VerticalPodAutoscaler) provision.RecommendedReso
9394
if contRec.ContainerName != vpa.Name {
9495
continue
9596
}
96-
rec.Recommendations = append(rec.Recommendations, provision.RecommendedProcessResources{
97+
rec.Recommendations = append(rec.Recommendations, provTypes.RecommendedProcessResources{
9798
Type: "target",
9899
CPU: contRec.Target.Cpu().String(),
99100
Memory: contRec.Target.Memory().String(),
100101
})
101-
rec.Recommendations = append(rec.Recommendations, provision.RecommendedProcessResources{
102+
rec.Recommendations = append(rec.Recommendations, provTypes.RecommendedProcessResources{
102103
Type: "uncappedTarget",
103104
CPU: contRec.UncappedTarget.Cpu().String(),
104105
Memory: contRec.UncappedTarget.Memory().String(),
105106
})
106-
rec.Recommendations = append(rec.Recommendations, provision.RecommendedProcessResources{
107+
rec.Recommendations = append(rec.Recommendations, provTypes.RecommendedProcessResources{
107108
Type: "lowerBound",
108109
CPU: contRec.LowerBound.Cpu().String(),
109110
Memory: contRec.LowerBound.Memory().String(),
110111
})
111-
rec.Recommendations = append(rec.Recommendations, provision.RecommendedProcessResources{
112+
rec.Recommendations = append(rec.Recommendations, provTypes.RecommendedProcessResources{
112113
Type: "upperBound",
113114
CPU: contRec.UpperBound.Cpu().String(),
114115
Memory: contRec.UpperBound.Memory().String(),
@@ -117,7 +118,7 @@ func vpaToRecommended(vpa vpav1.VerticalPodAutoscaler) provision.RecommendedReso
117118
return rec
118119
}
119120

120-
func (p *kubernetesProvisioner) GetAutoScale(ctx context.Context, a provision.App) ([]provision.AutoScaleSpec, error) {
121+
func (p *kubernetesProvisioner) GetAutoScale(ctx context.Context, a provision.App) ([]provTypes.AutoScaleSpec, error) {
121122
client, err := clusterForPool(ctx, a.GetPool())
122123
if err != nil {
123124
return nil, err
@@ -153,7 +154,7 @@ func (p *kubernetesProvisioner) GetAutoScale(ctx context.Context, a provision.Ap
153154
return nil, err
154155
}
155156

156-
var specs []provision.AutoScaleSpec
157+
var specs []provTypes.AutoScaleSpec
157158

158159
hpas, err := hpaInformer.Lister().HorizontalPodAutoscalers(ns).List(labels.SelectorFromSet(labels.Set(ls.ToHPASelector())))
159160
if err != nil {
@@ -179,9 +180,9 @@ func kedaScaledObjectName(hpa autoscalingv2.HorizontalPodAutoscaler) string {
179180
return hpa.Labels["scaledobject.keda.sh/name"]
180181
}
181182

182-
func scaledObjectToSpec(scaledObject kedav1alpha1.ScaledObject) provision.AutoScaleSpec {
183+
func scaledObjectToSpec(scaledObject kedav1alpha1.ScaledObject) provTypes.AutoScaleSpec {
183184
ls := labelSetFromMeta(&scaledObject.ObjectMeta)
184-
spec := provision.AutoScaleSpec{
185+
spec := provTypes.AutoScaleSpec{
185186
MaxUnits: uint(*scaledObject.Spec.MaxReplicaCount),
186187
MinUnits: uint(*scaledObject.Spec.MinReplicaCount),
187188
Process: ls.AppProcess(),
@@ -192,7 +193,7 @@ func scaledObjectToSpec(scaledObject kedav1alpha1.ScaledObject) provision.AutoSc
192193
if metric.Type == "cron" {
193194
minReplicas, _ := strconv.Atoi(metric.Metadata["desiredReplicas"])
194195

195-
spec.Schedules = append(spec.Schedules, provision.AutoScaleSchedule{
196+
spec.Schedules = append(spec.Schedules, provTypes.AutoScaleSchedule{
196197
MinReplicas: minReplicas,
197198
Start: metric.Metadata["start"],
198199
End: metric.Metadata["end"],
@@ -213,9 +214,9 @@ func scaledObjectToSpec(scaledObject kedav1alpha1.ScaledObject) provision.AutoSc
213214
return spec
214215
}
215216

216-
func hpaToSpec(hpa autoscalingv2.HorizontalPodAutoscaler) provision.AutoScaleSpec {
217+
func hpaToSpec(hpa autoscalingv2.HorizontalPodAutoscaler) provTypes.AutoScaleSpec {
217218
ls := labelSetFromMeta(&hpa.ObjectMeta)
218-
spec := provision.AutoScaleSpec{
219+
spec := provTypes.AutoScaleSpec{
219220
MaxUnits: uint(hpa.Spec.MaxReplicas),
220221
Process: ls.AppProcess(),
221222
Version: ls.AppVersion(),
@@ -316,15 +317,15 @@ func removeKEDAScaleObject(ctx context.Context, client *ClusterClient, ns string
316317
return nil
317318
}
318319

319-
func (p *kubernetesProvisioner) SetAutoScale(ctx context.Context, a provision.App, spec provision.AutoScaleSpec) error {
320+
func (p *kubernetesProvisioner) SetAutoScale(ctx context.Context, a provision.App, spec provTypes.AutoScaleSpec) error {
320321
client, err := clusterForPool(ctx, a.GetPool())
321322
if err != nil {
322323
return err
323324
}
324325
return setAutoScale(ctx, client, a, spec)
325326
}
326327

327-
func setAutoScale(ctx context.Context, client *ClusterClient, a provision.App, spec provision.AutoScaleSpec) error {
328+
func setAutoScale(ctx context.Context, client *ClusterClient, a provision.App, spec provTypes.AutoScaleSpec) error {
328329
depInfo, err := minimumAutoScaleVersion(ctx, client, a, spec.Process)
329330
if err != nil {
330331
return err
@@ -356,7 +357,7 @@ func setAutoScale(ctx context.Context, client *ClusterClient, a provision.App, s
356357

357358
minUnits := int32(spec.MinUnits)
358359

359-
cpuValue, err := spec.ToCPUValue(a)
360+
cpuValue, err := provision.CPUValueOfAutoScaleSpec(&spec, a)
360361
if err != nil {
361362
return errors.WithStack(err)
362363
}
@@ -433,7 +434,7 @@ func setAutoScale(ctx context.Context, client *ClusterClient, a provision.App, s
433434
return nil
434435
}
435436

436-
func setKEDAAutoscale(ctx context.Context, client *ClusterClient, spec provision.AutoScaleSpec, a provision.App, depInfo *deploymentInfo, hpaName string, labels *provision.LabelSet) error {
437+
func setKEDAAutoscale(ctx context.Context, client *ClusterClient, spec provTypes.AutoScaleSpec, a provision.App, depInfo *deploymentInfo, hpaName string, labels *provision.LabelSet) error {
437438
kedaClient, err := KEDAClientForConfig(client.restConfig)
438439
if err != nil {
439440
return err
@@ -469,11 +470,11 @@ func setKEDAAutoscale(ctx context.Context, client *ClusterClient, spec provision
469470
return err
470471
}
471472

472-
func newKEDAScaledObject(ctx context.Context, spec provision.AutoScaleSpec, a provision.App, depInfo *deploymentInfo, ns string, hpaName string, labels *provision.LabelSet) (*kedav1alpha1.ScaledObject, error) {
473+
func newKEDAScaledObject(ctx context.Context, spec provTypes.AutoScaleSpec, a provision.App, depInfo *deploymentInfo, ns string, hpaName string, labels *provision.LabelSet) (*kedav1alpha1.ScaledObject, error) {
473474
kedaTriggers := []kedav1alpha1.ScaleTriggers{}
474475

475476
if spec.AverageCPU != "" {
476-
cpu, err := spec.ToCPUValue(a)
477+
cpu, err := provision.CPUValueOfAutoScaleSpec(&spec, a)
477478
if err != nil {
478479
return nil, err
479480
}
@@ -743,7 +744,7 @@ func ensureHPA(ctx context.Context, client *ClusterClient, a provision.App, proc
743744
return multiErr.ToError()
744745
}
745746

746-
func getAutoScale(ctx context.Context, client *ClusterClient, a provision.App, process string) ([]provision.AutoScaleSpec, error) {
747+
func getAutoScale(ctx context.Context, client *ClusterClient, a provision.App, process string) ([]provTypes.AutoScaleSpec, error) {
747748
ns, err := client.AppNamespace(ctx, a)
748749
if err != nil {
749750
return nil, err
@@ -768,7 +769,7 @@ func getAutoScale(ctx context.Context, client *ClusterClient, a provision.App, p
768769
return nil, errors.WithStack(err)
769770
}
770771

771-
var specs []provision.AutoScaleSpec
772+
var specs []provTypes.AutoScaleSpec
772773
for _, hpa := range hpas.Items {
773774
scaledObjectName := kedaScaledObjectName(hpa)
774775
if scaledObjectName != "" {

0 commit comments

Comments
 (0)