Skip to content

Commit 233be79

Browse files
authored
feat: restricting sidecar image and tag setup (#550)
Signed-off-by: odubajDT <[email protected]>
1 parent 726a7f7 commit 233be79

File tree

19 files changed

+206
-141
lines changed

19 files changed

+206
-141
lines changed

common/common.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,29 @@ const (
2020
OpenFeatureAnnotationRoot = "openfeature.dev"
2121
)
2222

23+
type EnvConfig struct {
24+
PodNamespace string `envconfig:"POD_NAMESPACE" default:"open-feature-operator-system"`
25+
FlagdProxyImage string `envconfig:"FLAGD_PROXY_IMAGE" default:"ghcr.io/open-feature/flagd-proxy"`
26+
// renovate: datasource=github-tags depName=open-feature/flagd/flagd-proxy
27+
FlagdProxyTag string `envconfig:"FLAGD_PROXY_TAG" default:"v0.3.0"`
28+
FlagdProxyPort int `envconfig:"FLAGD_PROXY_PORT" default:"8015"`
29+
FlagdProxyManagementPort int `envconfig:"FLAGD_PROXY_MANAGEMENT_PORT" default:"8016"`
30+
FlagdProxyDebugLogging bool `envconfig:"FLAGD_PROXY_DEBUG_LOGGING" default:"false"`
31+
32+
SidecarEnvVarPrefix string `envconfig:"SIDECAR_ENV_VAR_PREFIX" default:"FLAGD"`
33+
SidecarManagementPort int `envconfig:"SIDECAR_MANAGEMENT_PORT" default:"8014"`
34+
SidecarPort int `envconfig:"SIDECAR_PORT" default:"8013"`
35+
SidecarImage string `envconfig:"SIDECAR_IMAGE" default:"ghcr.io/open-feature/flagd"`
36+
// renovate: datasource=github-tags depName=open-feature/flagd/flagd-proxy
37+
SidecarTag string `envconfig:"SIDECAR_TAG" default:"v0.7.0"`
38+
SidecarSocketPath string `envconfig:"SIDECAR_SOCKET_PATH" default:""`
39+
SidecarEvaluator string `envconfig:"SIDECAR_EVALUATOR" default:"json"`
40+
SidecarProviderArgs string `envconfig:"SIDECAR_PROVIDER_ARGS" default:""`
41+
SidecarSyncProvider string `envconfig:"SIDECAR_SYNC_PROVIDER" default:"kubernetes"`
42+
SidecarLogFormat string `envconfig:"SIDECAR_LOG_FORMAT" default:"json"`
43+
SidecarProbesEnabled bool `envconfig:"SIDECAR_PROBES_ENABLED" default:"true"`
44+
}
45+
2346
func FeatureFlagSourceIndex(o client.Object) []string {
2447
deployment, ok := o.(*appsV1.Deployment)
2548
if !ok {

common/flagdinjector/flagdinjector.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,8 @@ type FlagdContainerInjector struct {
4747
Logger logr.Logger
4848
FlagdProxyConfig *flagdproxy.FlagdProxyConfiguration
4949
FlagDResourceRequirements corev1.ResourceRequirements
50+
Image string
51+
Tag string
5052
}
5153

5254
//nolint:gocyclo
@@ -76,7 +78,7 @@ func (fi *FlagdContainerInjector) InjectFlagd(
7678
}
7779

7880
// append sync provider args
79-
if flagSourceConfig.SyncProviderArgs != nil {
81+
if len(flagSourceConfig.SyncProviderArgs) > 0 {
8082
for _, v := range flagSourceConfig.SyncProviderArgs {
8183
flagdContainer.Args = append(
8284
flagdContainer.Args,
@@ -375,7 +377,7 @@ func (fi *FlagdContainerInjector) toKubernetesProviderConfig(ctx context.Context
375377
func (fi *FlagdContainerInjector) generateBasicFlagdContainer(flagSourceConfig *api.FeatureFlagSourceSpec) corev1.Container {
376378
return corev1.Container{
377379
Name: "flagd",
378-
Image: fmt.Sprintf("%s:%s", flagSourceConfig.Image, flagSourceConfig.Tag),
380+
Image: fmt.Sprintf("%s:%s", fi.Image, fi.Tag),
379381
Args: []string{
380382
"start",
381383
},

common/flagdinjector/flagdinjector_test.go

Lines changed: 45 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,11 @@ import (
2626
"sigs.k8s.io/controller-runtime/pkg/client/fake"
2727
)
2828

29+
const (
30+
testTag = "0.5.0"
31+
testImage = "flagd"
32+
)
33+
2934
func TestFlagdContainerInjector_InjectDefaultSyncProvider(t *testing.T) {
3035

3136
namespace, fakeClient := initContainerInjectionTestEnv()
@@ -35,6 +40,8 @@ func TestFlagdContainerInjector_InjectDefaultSyncProvider(t *testing.T) {
3540
Logger: testr.New(t),
3641
FlagdProxyConfig: getProxyConfig(),
3742
FlagDResourceRequirements: getResourceRequirements(),
43+
Image: testImage,
44+
Tag: testTag,
3845
}
3946

4047
deployment := appsV1.Deployment{
@@ -72,6 +79,8 @@ func TestFlagdContainerInjector_InjectDefaultSyncProvider_WithDebugLogging(t *te
7279
Logger: testr.New(t),
7380
FlagdProxyConfig: getProxyConfig(),
7481
FlagDResourceRequirements: getResourceRequirements(),
82+
Image: testImage,
83+
Tag: testTag,
7584
}
7685

7786
deployment := appsV1.Deployment{
@@ -111,6 +120,8 @@ func TestFlagdContainerInjector_InjectDefaultSyncProvider_WithOtelCollectorUri(t
111120
Logger: testr.New(t),
112121
FlagdProxyConfig: getProxyConfig(),
113122
FlagDResourceRequirements: getResourceRequirements(),
123+
Image: testImage,
124+
Tag: testTag,
114125
}
115126

116127
deployment := appsV1.Deployment{
@@ -150,6 +161,8 @@ func TestFlagdContainerInjector_InjectDefaultSyncProvider_WithResources(t *testi
150161
Logger: testr.New(t),
151162
FlagdProxyConfig: getProxyConfig(),
152163
FlagDResourceRequirements: getResourceRequirements(),
164+
Image: testImage,
165+
Tag: testTag,
153166
}
154167

155168
deployment := appsV1.Deployment{
@@ -199,6 +212,8 @@ func TestFlagdContainerInjector_InjectDefaultSyncProvider_WithSyncProviderArgs(t
199212
Logger: testr.New(t),
200213
FlagdProxyConfig: getProxyConfig(),
201214
FlagDResourceRequirements: getResourceRequirements(),
215+
Image: testImage,
216+
Tag: testTag,
202217
}
203218

204219
deployment := appsV1.Deployment{
@@ -238,6 +253,8 @@ func TestFlagdContainerInjector_InjectFlagdKubernetesSource(t *testing.T) {
238253
Logger: testr.New(t),
239254
FlagdProxyConfig: getProxyConfig(),
240255
FlagDResourceRequirements: getResourceRequirements(),
256+
Image: testImage,
257+
Tag: testTag,
241258
}
242259

243260
deployment := appsV1.Deployment{
@@ -289,6 +306,8 @@ func TestFlagdContainerInjector_InjectFlagdFilePathSource(t *testing.T) {
289306
Logger: testr.New(t),
290307
FlagdProxyConfig: getProxyConfig(),
291308
FlagDResourceRequirements: getResourceRequirements(),
309+
Image: testImage,
310+
Tag: testTag,
292311
}
293312

294313
deployment := appsV1.Deployment{
@@ -365,6 +384,8 @@ func TestFlagdContainerInjector_InjectFlagdFilePathSource_UpdateReferencedConfig
365384
Logger: testr.New(t),
366385
FlagdProxyConfig: getProxyConfig(),
367386
FlagDResourceRequirements: getResourceRequirements(),
387+
Image: testImage,
388+
Tag: testTag,
368389
}
369390

370391
ownerRef := metav1.OwnerReference{
@@ -444,6 +465,8 @@ func TestFlagdContainerInjector_InjectHttpSource(t *testing.T) {
444465
Logger: testr.New(t),
445466
FlagdProxyConfig: getProxyConfig(),
446467
FlagDResourceRequirements: getResourceRequirements(),
468+
Image: testImage,
469+
Tag: testTag,
447470
}
448471

449472
deployment := appsV1.Deployment{
@@ -486,6 +509,8 @@ func TestFlagdContainerInjector_InjectGrpcSource(t *testing.T) {
486509
Logger: testr.New(t),
487510
FlagdProxyConfig: getProxyConfig(),
488511
FlagDResourceRequirements: getResourceRequirements(),
512+
Image: testImage,
513+
Tag: testTag,
489514
}
490515

491516
deployment := appsV1.Deployment{
@@ -531,6 +556,8 @@ func TestFlagdContainerInjector_InjectProxySource_ProxyNotAvailable(t *testing.T
531556
Logger: testr.New(t),
532557
FlagdProxyConfig: getProxyConfig(),
533558
FlagDResourceRequirements: getResourceRequirements(),
559+
Image: testImage,
560+
Tag: testTag,
534561
}
535562

536563
deployment := appsV1.Deployment{
@@ -572,6 +599,8 @@ func TestFlagdContainerInjector_InjectProxySource_ProxyNotReady(t *testing.T) {
572599
Logger: testr.New(t),
573600
FlagdProxyConfig: getProxyConfig(),
574601
FlagDResourceRequirements: getResourceRequirements(),
602+
Image: testImage,
603+
Tag: testTag,
575604
}
576605

577606
deployment := appsV1.Deployment{
@@ -616,6 +645,8 @@ func TestFlagdContainerInjector_InjectProxySource_ProxyIsReady(t *testing.T) {
616645
Logger: testr.New(t),
617646
FlagdProxyConfig: getProxyConfig(),
618647
FlagDResourceRequirements: getResourceRequirements(),
648+
Image: testImage,
649+
Tag: testTag,
619650
}
620651

621652
deployment := appsV1.Deployment{
@@ -655,6 +686,8 @@ func TestFlagdContainerInjector_Inject_FlagdContainerAlreadyPresent(t *testing.T
655686
Logger: testr.New(t),
656687
FlagdProxyConfig: getProxyConfig(),
657688
FlagDResourceRequirements: getResourceRequirements(),
689+
Image: testImage,
690+
Tag: testTag,
658691
}
659692

660693
deployment := appsV1.Deployment{
@@ -697,6 +730,8 @@ func TestFlagdContainerInjector_InjectUnknownSyncProvider(t *testing.T) {
697730
Logger: testr.New(t),
698731
FlagdProxyConfig: getProxyConfig(),
699732
FlagDResourceRequirements: getResourceRequirements(),
733+
Image: testImage,
734+
Tag: testTag,
700735
}
701736

702737
deployment := appsV1.Deployment{
@@ -833,8 +868,6 @@ func getFlagSourceConfigSpec() *api.FeatureFlagSourceSpec {
833868
return &api.FeatureFlagSourceSpec{
834869
ManagementPort: 8014,
835870
Port: 8013,
836-
Image: "flagd",
837-
Tag: "0.5.0",
838871
EnvVars: []v1.EnvVar{
839872
{
840873
Name: "my-env-var",
@@ -951,8 +984,8 @@ func getProxyConfig() *flagdproxy.FlagdProxyConfiguration {
951984
Port: 8013,
952985
ManagementPort: 8014,
953986
DebugLogging: false,
954-
Image: "flagd",
955-
Tag: "0.5.0",
987+
Image: testImage,
988+
Tag: testTag,
956989
Namespace: "my-namespace",
957990
}
958991
}
@@ -1031,6 +1064,8 @@ func TestFlagdContainerInjector_EnableClusterRoleBinding_AddDefaultServiceAccoun
10311064
Logger: testr.New(t),
10321065
FlagdProxyConfig: getProxyConfig(),
10331066
FlagDResourceRequirements: getResourceRequirements(),
1067+
Image: testImage,
1068+
Tag: testTag,
10341069
}
10351070

10361071
err = fi.EnableClusterRoleBinding(context.Background(), namespace, "")
@@ -1075,6 +1110,8 @@ func TestFlagdContainerInjector_EnableClusterRoleBinding_ServiceAccountName(t *t
10751110
Logger: testr.New(t),
10761111
FlagdProxyConfig: getProxyConfig(),
10771112
FlagDResourceRequirements: getResourceRequirements(),
1113+
Image: testImage,
1114+
Tag: testTag,
10781115
}
10791116

10801117
err = fi.EnableClusterRoleBinding(context.Background(), namespace, "my-serviceaccount")
@@ -1125,6 +1162,8 @@ func TestFlagdContainerInjector_EnableClusterRoleBinding_ServiceAccountAlreadyIn
11251162
Logger: testr.New(t),
11261163
FlagdProxyConfig: getProxyConfig(),
11271164
FlagDResourceRequirements: getResourceRequirements(),
1165+
Image: testImage,
1166+
Tag: testTag,
11281167
}
11291168

11301169
err = fi.EnableClusterRoleBinding(context.Background(), namespace, "my-serviceaccount")
@@ -1159,6 +1198,8 @@ func TestFlagdContainerInjector_EnableClusterRoleBinding_ClusterRoleBindingNotFo
11591198
Logger: testr.New(t),
11601199
FlagdProxyConfig: getProxyConfig(),
11611200
FlagDResourceRequirements: getResourceRequirements(),
1201+
Image: testImage,
1202+
Tag: testTag,
11621203
}
11631204

11641205
err = fi.EnableClusterRoleBinding(context.Background(), namespace, "my-serviceaccount")

common/flagdproxy/flagdproxy.go

Lines changed: 10 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,9 @@ package flagdproxy
33
import (
44
"context"
55
"fmt"
6-
"os"
76

87
"github.com/go-logr/logr"
9-
"github.com/open-feature/open-feature-operator/common/utils"
8+
"github.com/open-feature/open-feature-operator/common"
109
appsV1 "k8s.io/api/apps/v1"
1110
corev1 "k8s.io/api/core/v1"
1211
"k8s.io/apimachinery/pkg/api/errors"
@@ -20,21 +19,7 @@ const (
2019
FlagdProxyDeploymentName = "flagd-proxy"
2120
FlagdProxyServiceAccountName = "open-feature-operator-flagd-proxy"
2221
FlagdProxyServiceName = "flagd-proxy-svc"
23-
// renovate: datasource=github-tags depName=open-feature/flagd/flagd-proxy
24-
DefaultFlagdProxyTag = "v0.3.0"
25-
DefaultFlagdProxyImage = "ghcr.io/open-feature/flagd-proxy"
26-
DefaultFlagdProxyPort = 8015
27-
DefaultFlagdProxyManagementPort = 8016
28-
DefaultFlagdProxyDebugLogging = false
29-
DefaultFlagdProxyNamespace = "open-feature-operator-system"
30-
31-
envVarPodNamespace = "POD_NAMESPACE"
32-
envVarProxyImage = "FLAGD_PROXY_IMAGE"
33-
envVarProxyTag = "FLAGD_PROXY_TAG"
34-
envVarProxyPort = "FLAGD_PROXY_PORT"
35-
envVarProxyManagementPort = "FLAGD_PROXY_MANAGEMENT_PORT"
36-
envVarProxyDebugLogging = "FLAGD_PROXY_DEBUG_LOGGING"
37-
operatorDeploymentName = "open-feature-operator-controller-manager"
22+
operatorDeploymentName = "open-feature-operator-controller-manager"
3823
)
3924

4025
type FlagdProxyHandler struct {
@@ -53,44 +38,16 @@ type FlagdProxyConfiguration struct {
5338
OperatorDeploymentName string
5439
}
5540

56-
func NewFlagdProxyConfiguration() (*FlagdProxyConfiguration, error) {
57-
config := &FlagdProxyConfiguration{
58-
Image: DefaultFlagdProxyImage,
59-
Tag: DefaultFlagdProxyTag,
60-
Namespace: DefaultFlagdProxyNamespace,
41+
func NewFlagdProxyConfiguration(env common.EnvConfig) *FlagdProxyConfiguration {
42+
return &FlagdProxyConfiguration{
43+
Image: env.FlagdProxyImage,
44+
Tag: env.FlagdProxyTag,
45+
Namespace: env.PodNamespace,
6146
OperatorDeploymentName: operatorDeploymentName,
47+
Port: env.FlagdProxyPort,
48+
ManagementPort: env.FlagdProxyManagementPort,
49+
DebugLogging: env.FlagdProxyDebugLogging,
6250
}
63-
ns, ok := os.LookupEnv(envVarPodNamespace)
64-
if ok {
65-
config.Namespace = ns
66-
}
67-
kpi, ok := os.LookupEnv(envVarProxyImage)
68-
if ok {
69-
config.Image = kpi
70-
}
71-
kpt, ok := os.LookupEnv(envVarProxyTag)
72-
if ok {
73-
config.Tag = kpt
74-
}
75-
port, err := utils.GetIntEnvVar(envVarProxyPort, DefaultFlagdProxyPort)
76-
if err != nil {
77-
return config, err
78-
}
79-
config.Port = port
80-
81-
managementPort, err := utils.GetIntEnvVar(envVarProxyManagementPort, DefaultFlagdProxyManagementPort)
82-
if err != nil {
83-
return config, err
84-
}
85-
config.ManagementPort = managementPort
86-
87-
kpDebugLogging, err := utils.GetBoolEnvVar(envVarProxyDebugLogging, DefaultFlagdProxyDebugLogging)
88-
if err != nil {
89-
return config, err
90-
}
91-
config.DebugLogging = kpDebugLogging
92-
93-
return config, nil
9451
}
9552

9653
func NewFlagdProxyHandler(config *FlagdProxyConfiguration, client client.Client, logger logr.Logger) *FlagdProxyHandler {

0 commit comments

Comments
 (0)