Skip to content

Commit 583ff4e

Browse files
committed
[public-api] Ensure no objects are rendered by installer without experimental config
1 parent 5d57819 commit 583ff4e

File tree

3 files changed

+77
-23
lines changed

3 files changed

+77
-23
lines changed

install/installer/pkg/components/public-api-server/deployment.go

-17
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,8 @@
44
package public_api_server
55

66
import (
7-
"github.com/gitpod-io/gitpod/common-go/log"
87
"github.com/gitpod-io/gitpod/installer/pkg/cluster"
98
"github.com/gitpod-io/gitpod/installer/pkg/common"
10-
"github.com/gitpod-io/gitpod/installer/pkg/config/v1/experimental"
119
appsv1 "k8s.io/api/apps/v1"
1210
corev1 "k8s.io/api/core/v1"
1311
"k8s.io/apimachinery/pkg/api/resource"
@@ -18,21 +16,6 @@ import (
1816
)
1917

2018
func deployment(ctx *common.RenderContext) ([]runtime.Object, error) {
21-
var experimentalCfg *experimental.Config
22-
23-
_ = ctx.WithExperimental(func(ucfg *experimental.Config) error {
24-
experimentalCfg = ucfg
25-
return nil
26-
})
27-
28-
if experimentalCfg == nil || experimentalCfg.WebApp == nil || experimentalCfg.WebApp.PublicAPI == nil {
29-
// We don't want to render anything for this deployment
30-
return nil, nil
31-
}
32-
33-
publicAPIConfig := experimentalCfg.WebApp.PublicAPI
34-
log.Debug("Detected experimental.WebApp.PublicApi configuration", publicAPIConfig)
35-
3619
labels := common.DefaultLabels(Component)
3720
return []runtime.Object{
3821
&appsv1.Deployment{

install/installer/pkg/components/public-api-server/objects.go

+34-6
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,38 @@
33

44
package public_api_server
55

6-
import "github.com/gitpod-io/gitpod/installer/pkg/common"
7-
8-
var Objects = common.CompositeRenderFunc(
9-
deployment,
10-
rolebinding,
11-
common.DefaultServiceAccount(Component),
6+
import (
7+
"github.com/gitpod-io/gitpod/common-go/log"
8+
"github.com/gitpod-io/gitpod/installer/pkg/common"
9+
"github.com/gitpod-io/gitpod/installer/pkg/config/v1/experimental"
10+
"k8s.io/apimachinery/pkg/runtime"
1211
)
12+
13+
func Objects(ctx *common.RenderContext) ([]runtime.Object, error) {
14+
cfg := getExperimentalPublicAPIConfig(ctx)
15+
if cfg == nil {
16+
return nil, nil
17+
}
18+
19+
log.Debug("Detected experimental.WebApp.PublicApi configuration", cfg)
20+
return common.CompositeRenderFunc(
21+
deployment,
22+
rolebinding,
23+
common.DefaultServiceAccount(Component),
24+
)(ctx)
25+
}
26+
27+
func getExperimentalPublicAPIConfig(ctx *common.RenderContext) *experimental.PublicAPIConfig {
28+
var experimentalCfg *experimental.Config
29+
30+
_ = ctx.WithExperimental(func(ucfg *experimental.Config) error {
31+
experimentalCfg = ucfg
32+
return nil
33+
})
34+
35+
if experimentalCfg == nil || experimentalCfg.WebApp == nil || experimentalCfg.WebApp.PublicAPI == nil {
36+
return nil
37+
}
38+
39+
return experimentalCfg.WebApp.PublicAPI
40+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// Copyright (c) 2022 Gitpod GmbH. All rights reserved.
2+
// Licensed under the MIT License. See License-MIT.txt in the project root for license information.
3+
4+
package public_api_server
5+
6+
import (
7+
"github.com/gitpod-io/gitpod/installer/pkg/common"
8+
"github.com/gitpod-io/gitpod/installer/pkg/config/v1"
9+
"github.com/gitpod-io/gitpod/installer/pkg/config/v1/experimental"
10+
"github.com/gitpod-io/gitpod/installer/pkg/config/versions"
11+
"github.com/stretchr/testify/require"
12+
"testing"
13+
)
14+
15+
func TestObjects_NotRenderedDefault(t *testing.T) {
16+
ctx, err := common.NewRenderContext(config.Config{}, versions.Manifest{}, "test-namespace")
17+
require.NoError(t, err)
18+
19+
objects, err := Objects(ctx)
20+
require.NoError(t, err)
21+
require.Empty(t, objects, "no objects should be rendered with default config")
22+
}
23+
24+
func TestObjects_RenderedWhenExperimentalConfigSet(t *testing.T) {
25+
ctx, err := common.NewRenderContext(config.Config{
26+
Experimental: &experimental.Config{
27+
WebApp: &experimental.WebAppConfig{
28+
PublicAPI: &experimental.PublicAPIConfig{Enabled: true},
29+
},
30+
},
31+
}, versions.Manifest{
32+
Components: versions.Components{
33+
PublicAPIServer: versions.Versioned{
34+
Version: "commit-test-latest",
35+
},
36+
},
37+
}, "test-namespace")
38+
require.NoError(t, err)
39+
40+
objects, err := Objects(ctx)
41+
require.NoError(t, err)
42+
require.NotEmpty(t, objects, "must render objects because experimental config is specified")
43+
}

0 commit comments

Comments
 (0)