Skip to content

Commit fdeb2cb

Browse files
committed
[usage] Deploy usage by default
1 parent bf165cb commit fdeb2cb

File tree

17 files changed

+5107
-20
lines changed

17 files changed

+5107
-20
lines changed

install/installer/cmd/testdata/render/aws-setup/output.golden

Lines changed: 401 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/azure-setup/output.golden

Lines changed: 401 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/customization/output.golden

Lines changed: 444 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/external-registry/output.golden

Lines changed: 401 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/gcp-setup/output.golden

Lines changed: 389 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/http-proxy/output.golden

Lines changed: 521 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/insecure-s3-setup/output.golden

Lines changed: 401 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/minimal/output.golden

Lines changed: 401 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/shortname/output.golden

Lines changed: 401 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/statefulset-customization/output.golden

Lines changed: 401 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/use-pod-security-policies/output.golden

Lines changed: 401 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/cmd/testdata/render/workspace-requests-limits/output.golden

Lines changed: 401 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

install/installer/pkg/components/usage/configmap.go

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ import (
2121

2222
func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
2323
cfg := server.Config{
24-
LedgerSchedule: "", // By default controller is disabled
24+
LedgerSchedule: time.Duration(15 * time.Minute).String(),
2525
ResetUsageSchedule: time.Duration(15 * time.Minute).String(),
2626
Server: &baseserver.Configuration{
2727
Services: baseserver.ServicesConfiguration{
@@ -36,6 +36,12 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
3636
ForUsers: 1_000_000_000,
3737
MinForUsersOnStripe: 0,
3838
},
39+
40+
// This is the default configuration, used in self-hosted installs.
41+
// For SaaS, we explicitly configure it based on workspace classes below.
42+
CreditsPerMinuteByWorkspaceClass: map[string]float64{
43+
"default": 0.1666666667,
44+
},
3945
}
4046

4147
expWebAppConfig := getExperimentalWebAppConfig(ctx)
@@ -55,22 +61,23 @@ func configmap(ctx *common.RenderContext) ([]runtime.Object, error) {
5561
expUsageConfig := getExperimentalUsageConfig(ctx)
5662

5763
if expUsageConfig != nil {
58-
if expUsageConfig.Schedule != "" {
59-
cfg.LedgerSchedule = expUsageConfig.Schedule
60-
}
64+
cfg.LedgerSchedule = expUsageConfig.Schedule
6165
cfg.ResetUsageSchedule = expUsageConfig.ResetUsageSchedule
66+
6267
if expUsageConfig.DefaultSpendingLimit != nil {
6368
cfg.DefaultSpendingLimit = *expUsageConfig.DefaultSpendingLimit
6469
}
6570
}
6671

6772
workspaceClassConfig := getExperimentalWorkspaceClassConfig(ctx)
68-
69-
cfg.CreditsPerMinuteByWorkspaceClass = make(map[string]float64)
70-
for _, v := range workspaceClassConfig {
71-
if v.Credits != nil {
72-
cfg.CreditsPerMinuteByWorkspaceClass[v.Id] = v.Credits.PerMinute
73+
if len(workspaceClassConfig) > 0 {
74+
creditsPerMinuteByWorkspaceClass := make(map[string]float64)
75+
for _, v := range workspaceClassConfig {
76+
if v.Credits != nil {
77+
cfg.CreditsPerMinuteByWorkspaceClass[v.Id] = v.Credits.PerMinute
78+
}
7379
}
80+
cfg.CreditsPerMinuteByWorkspaceClass = creditsPerMinuteByWorkspaceClass
7481
}
7582

7683
_ = ctx.WithExperimental(func(ucfg *experimental.Config) error {

install/installer/pkg/components/usage/configmap_test.go

Lines changed: 127 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,29 @@ package usage
55

66
import (
77
"testing"
8+
"time"
89

10+
"github.com/gitpod-io/gitpod/installer/pkg/common"
11+
config "github.com/gitpod-io/gitpod/installer/pkg/config/v1"
912
"github.com/gitpod-io/gitpod/installer/pkg/config/v1/experimental"
13+
"github.com/gitpod-io/gitpod/installer/pkg/config/versions"
14+
"github.com/gitpod-io/gitpod/usage/pkg/db"
1015
"github.com/stretchr/testify/require"
1116
corev1 "k8s.io/api/core/v1"
1217
)
1318

14-
func TestConfigMap_ContainsSchedule(t *testing.T) {
15-
ctx := renderContextWithUsageConfig(t, &experimental.UsageConfig{Enabled: true, Schedule: "2m", ResetUsageSchedule: "5m"})
19+
func TestConfigMap_WithExperimentalOptions(t *testing.T) {
20+
billinstancesAfter := time.Date(2022, 10, 10, 10, 10, 10, 0, time.UTC)
21+
ctx := renderContextWithUsageConfig(t, &experimental.UsageConfig{
22+
Schedule: "2m",
23+
ResetUsageSchedule: "5m",
24+
BillInstancesAfter: &billinstancesAfter,
25+
DefaultSpendingLimit: &db.DefaultSpendingLimit{
26+
ForTeams: 123,
27+
ForUsers: 456,
28+
MinForUsersOnStripe: 7,
29+
},
30+
})
1631

1732
objs, err := configmap(ctx)
1833
require.NoError(t, err)
@@ -25,6 +40,116 @@ func TestConfigMap_ContainsSchedule(t *testing.T) {
2540
"controllerSchedule": "2m",
2641
"resetUsageSchedule": "5m",
2742
"stripeCredentialsFile": "stripe-secret/apikeys",
43+
"creditsPerMinuteByWorkspaceClass": {
44+
"default": 0.1666666667
45+
},
46+
"defaultSpendingLimit": {
47+
"forUsers": 456,
48+
"forTeams": 123,
49+
"minForUsersOnStripe": 7
50+
},
51+
"stripePrices": {
52+
"individualUsagePriceIds": {
53+
"eur": "",
54+
"usd": ""
55+
},
56+
"teamUsagePriceIds": {
57+
"eur": "",
58+
"usd": ""
59+
}
60+
},
61+
"server": {
62+
"services": {
63+
"grpc": {
64+
"address": "0.0.0.0:9001"
65+
}
66+
}
67+
}
68+
}`,
69+
cfgmap.Data[configJSONFilename],
70+
)
71+
}
72+
73+
func TestConfigMap_WithExperimentalOptions_EmptySchedule(t *testing.T) {
74+
billinstancesAfter := time.Date(2022, 10, 10, 10, 10, 10, 0, time.UTC)
75+
ctx := renderContextWithUsageConfig(t, &experimental.UsageConfig{
76+
Schedule: "", // empty specifies job is disabled
77+
ResetUsageSchedule: "", // empty specifies job is disabled
78+
BillInstancesAfter: &billinstancesAfter,
79+
DefaultSpendingLimit: &db.DefaultSpendingLimit{
80+
ForTeams: 123,
81+
ForUsers: 456,
82+
MinForUsersOnStripe: 7,
83+
},
84+
})
85+
86+
objs, err := configmap(ctx)
87+
require.NoError(t, err)
88+
89+
cfgmap, ok := objs[0].(*corev1.ConfigMap)
90+
require.True(t, ok)
91+
92+
require.JSONEq(t,
93+
`{
94+
"stripeCredentialsFile": "stripe-secret/apikeys",
95+
"creditsPerMinuteByWorkspaceClass": {
96+
"default": 0.1666666667
97+
},
98+
"defaultSpendingLimit": {
99+
"forUsers": 456,
100+
"forTeams": 123,
101+
"minForUsersOnStripe": 7
102+
},
103+
"stripePrices": {
104+
"individualUsagePriceIds": {
105+
"eur": "",
106+
"usd": ""
107+
},
108+
"teamUsagePriceIds": {
109+
"eur": "",
110+
"usd": ""
111+
}
112+
},
113+
"server": {
114+
"services": {
115+
"grpc": {
116+
"address": "0.0.0.0:9001"
117+
}
118+
}
119+
}
120+
}`,
121+
cfgmap.Data[configJSONFilename],
122+
)
123+
}
124+
125+
func TestConfigMap_DefaultOptions(t *testing.T) {
126+
ctx, err := common.NewRenderContext(config.Config{
127+
Domain: "test.domain.everything.awesome.is",
128+
}, versions.Manifest{
129+
Components: versions.Components{
130+
Usage: versions.Versioned{
131+
Version: "commit-test-latest",
132+
},
133+
ServiceWaiter: versions.Versioned{
134+
Version: "commit-test-latest",
135+
},
136+
},
137+
}, "test-namespace")
138+
require.NoError(t, err)
139+
140+
objs, err := configmap(ctx)
141+
require.NoError(t, err)
142+
143+
cfgmap, ok := objs[0].(*corev1.ConfigMap)
144+
require.True(t, ok)
145+
146+
require.JSONEq(t,
147+
`{
148+
"controllerSchedule": "15m0s",
149+
"resetUsageSchedule": "15m0s",
150+
"creditsPerMinuteByWorkspaceClass": {
151+
"default": 0.1666666667
152+
},
28153
"defaultSpendingLimit": {
29154
"forUsers": 1000000000,
30155
"forTeams": 1000000000,

install/installer/pkg/components/usage/objects.go

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,19 +4,12 @@
44
package usage
55

66
import (
7-
"github.com/gitpod-io/gitpod/common-go/log"
87
"github.com/gitpod-io/gitpod/installer/pkg/common"
98
"github.com/gitpod-io/gitpod/installer/pkg/config/v1/experimental"
109
"k8s.io/apimachinery/pkg/runtime"
1110
)
1211

1312
func Objects(ctx *common.RenderContext) ([]runtime.Object, error) {
14-
cfg := getExperimentalUsageConfig(ctx)
15-
if cfg == nil {
16-
return nil, nil
17-
}
18-
19-
log.Debug("Detected experimental.WebApp.Usage configuration", cfg)
2013
return common.CompositeRenderFunc(
2114
deployment,
2215
rolebinding,

install/installer/pkg/components/usage/objects_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ func renderContextWithUsageConfig(t *testing.T, usage *experimental.UsageConfig)
6464
}
6565

6666
func renderContextWithUsageEnabled(t *testing.T) *common.RenderContext {
67-
return renderContextWithUsageConfig(t, &experimental.UsageConfig{Enabled: true})
67+
return renderContextWithUsageConfig(t, &experimental.UsageConfig{})
6868
}
6969

7070
func renderContextWithStripeSecretSet(t *testing.T) *common.RenderContext {

install/installer/pkg/config/v1/experimental/experimental.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,6 @@ type PublicAPIConfig struct {
267267
}
268268

269269
type UsageConfig struct {
270-
Enabled bool `json:"enabled"`
271270
Schedule string `json:"schedule"`
272271
ResetUsageSchedule string `json:"resetUsageSchedule"`
273272
BillInstancesAfter *time.Time `json:"billInstancesAfter"`

0 commit comments

Comments
 (0)