Skip to content

Commit ab62d80

Browse files
author
Jerop Kipruto
committed
Make feature-flags config map name customizable
The config maps used by Tekton Pipeline should be able to take custom names to avoid collisions with other services. However, the feature-flags config map wasn't customizable because its name hardcoded its usages. By defining an env var in controller.yaml, from which the feature-flags config map name can be derived, we enable it to be customizable. Fixes #1805.
1 parent 2b93304 commit ab62d80

File tree

3 files changed

+52
-9
lines changed

3 files changed

+52
-9
lines changed

config/controller.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ spec:
7171
value: config-artifact-bucket
7272
- name: CONFIG_ARTIFACT_PVC_NAME
7373
value: config-artifact-pvc
74+
- name: CONFIG_FEATURE_FLAGS_NAME
75+
value: feature-flags
7476
- name: METRICS_DOMAIN
7577
value: tekton.dev/pipeline
7678
volumes:

pkg/pod/pod.go

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package pod
1818

1919
import (
2020
"fmt"
21+
"os"
2122
"path/filepath"
2223

2324
"github.com/tektoncd/pipeline/pkg/apis/pipeline"
@@ -31,13 +32,21 @@ import (
3132
"k8s.io/client-go/kubernetes"
3233
)
3334

35+
// GetFeatureFlagsConfigName returns the name of the configmap containing all
36+
// customizations for the feature flags.
37+
func GetFeatureFlagsConfigName() string {
38+
if e := os.Getenv("CONFIG_FEATURE_FLAGS_NAME"); e != "" {
39+
return e
40+
}
41+
return "feature-flags"
42+
}
43+
3444
const (
3545
homeDir = "/tekton/home"
3646

3747
// ResultsDir is the folder used by default to create the results file
3848
ResultsDir = "/tekton/results"
3949

40-
featureFlagConfigMapName = "feature-flags"
4150
featureFlagDisableHomeEnvKey = "disable-home-env-overwrite"
4251
featureFlagDisableWorkingDirKey = "disable-working-directory-overwrite"
4352

@@ -323,7 +332,7 @@ func getLimitRangeMinimum(namespace string, kubeclient kubernetes.Interface) (co
323332
//
324333
// For further reference see https://github.com/tektoncd/pipeline/issues/2013
325334
func ShouldOverrideHomeEnv(kubeclient kubernetes.Interface) bool {
326-
configMap, err := kubeclient.CoreV1().ConfigMaps(system.GetNamespace()).Get(featureFlagConfigMapName, metav1.GetOptions{})
335+
configMap, err := kubeclient.CoreV1().ConfigMaps(system.GetNamespace()).Get(GetFeatureFlagsConfigName(), metav1.GetOptions{})
327336
if err == nil && configMap != nil && configMap.Data != nil && configMap.Data[featureFlagDisableHomeEnvKey] == "true" {
328337
return false
329338
}
@@ -337,7 +346,7 @@ func ShouldOverrideHomeEnv(kubeclient kubernetes.Interface) bool {
337346
//
338347
// For further reference see https://github.com/tektoncd/pipeline/issues/1836
339348
func shouldOverrideWorkingDir(kubeclient kubernetes.Interface) bool {
340-
configMap, err := kubeclient.CoreV1().ConfigMaps(system.GetNamespace()).Get(featureFlagConfigMapName, metav1.GetOptions{})
349+
configMap, err := kubeclient.CoreV1().ConfigMaps(system.GetNamespace()).Get(GetFeatureFlagsConfigName(), metav1.GetOptions{})
341350
if err == nil && configMap != nil && configMap.Data != nil && configMap.Data[featureFlagDisableWorkingDirKey] == "true" {
342351
return false
343352
}

pkg/pod/pod_test.go

Lines changed: 38 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ package pod
1818

1919
import (
2020
"fmt"
21+
"os"
2122
"path/filepath"
2223
"strings"
2324
"testing"
@@ -813,14 +814,14 @@ func TestShouldOverrideHomeEnv(t *testing.T) {
813814
}{{
814815
description: "Default behaviour: A missing disable-home-env-overwrite flag should result in true",
815816
configMap: &corev1.ConfigMap{
816-
ObjectMeta: metav1.ObjectMeta{Name: featureFlagConfigMapName, Namespace: system.GetNamespace()},
817+
ObjectMeta: metav1.ObjectMeta{Name: GetFeatureFlagsConfigName(), Namespace: system.GetNamespace()},
817818
Data: map[string]string{},
818819
},
819820
expected: true,
820821
}, {
821822
description: "Setting disable-home-env-overwrite to false should result in true",
822823
configMap: &corev1.ConfigMap{
823-
ObjectMeta: metav1.ObjectMeta{Name: featureFlagConfigMapName, Namespace: system.GetNamespace()},
824+
ObjectMeta: metav1.ObjectMeta{Name: GetFeatureFlagsConfigName(), Namespace: system.GetNamespace()},
824825
Data: map[string]string{
825826
featureFlagDisableHomeEnvKey: "false",
826827
},
@@ -829,7 +830,7 @@ func TestShouldOverrideHomeEnv(t *testing.T) {
829830
}, {
830831
description: "Setting disable-home-env-overwrite to true should result in false",
831832
configMap: &corev1.ConfigMap{
832-
ObjectMeta: metav1.ObjectMeta{Name: featureFlagConfigMapName, Namespace: system.GetNamespace()},
833+
ObjectMeta: metav1.ObjectMeta{Name: GetFeatureFlagsConfigName(), Namespace: system.GetNamespace()},
833834
Data: map[string]string{
834835
featureFlagDisableHomeEnvKey: "true",
835836
},
@@ -847,6 +848,37 @@ func TestShouldOverrideHomeEnv(t *testing.T) {
847848
}
848849
}
849850

851+
func TestGetFeatureFlagsConfigName(t *testing.T) {
852+
for _, tc := range []struct {
853+
description string
854+
featureFlagEnvValue string
855+
expected string
856+
}{{
857+
description: "Feature flags config value not set",
858+
featureFlagEnvValue: "",
859+
expected: "feature-flags",
860+
}, {
861+
description: "Feature flags config value set",
862+
featureFlagEnvValue: "feature-flags-test",
863+
expected: "feature-flags-test",
864+
}} {
865+
t.Run(tc.description, func(t *testing.T) {
866+
original := os.Getenv("CONFIG_FEATURE_FLAGS_NAME")
867+
defer t.Cleanup(func() {
868+
os.Setenv("CONFIG_FEATURE_FLAGS_NAME", original)
869+
})
870+
if tc.featureFlagEnvValue != "" {
871+
os.Setenv("CONFIG_FEATURE_FLAGS_NAME", tc.featureFlagEnvValue)
872+
}
873+
got := GetFeatureFlagsConfigName()
874+
want := tc.expected
875+
if got != want {
876+
t.Errorf("GetFeatureFlagsConfigName() = %s, want %s", got, want)
877+
}
878+
})
879+
}
880+
}
881+
850882
func TestShouldOverrideWorkingDir(t *testing.T) {
851883
for _, tc := range []struct {
852884
description string
@@ -855,14 +887,14 @@ func TestShouldOverrideWorkingDir(t *testing.T) {
855887
}{{
856888
description: "Default behaviour: A missing disable-working-directory-overwrite flag should result in true",
857889
configMap: &corev1.ConfigMap{
858-
ObjectMeta: metav1.ObjectMeta{Name: featureFlagConfigMapName, Namespace: system.GetNamespace()},
890+
ObjectMeta: metav1.ObjectMeta{Name: GetFeatureFlagsConfigName(), Namespace: system.GetNamespace()},
859891
Data: map[string]string{},
860892
},
861893
expected: true,
862894
}, {
863895
description: "Setting disable-working-directory-overwrite to false should result in true",
864896
configMap: &corev1.ConfigMap{
865-
ObjectMeta: metav1.ObjectMeta{Name: featureFlagConfigMapName, Namespace: system.GetNamespace()},
897+
ObjectMeta: metav1.ObjectMeta{Name: GetFeatureFlagsConfigName(), Namespace: system.GetNamespace()},
866898
Data: map[string]string{
867899
featureFlagDisableWorkingDirKey: "false",
868900
},
@@ -871,7 +903,7 @@ func TestShouldOverrideWorkingDir(t *testing.T) {
871903
}, {
872904
description: "Setting disable-working-directory-overwrite to true should result in false",
873905
configMap: &corev1.ConfigMap{
874-
ObjectMeta: metav1.ObjectMeta{Name: featureFlagConfigMapName, Namespace: system.GetNamespace()},
906+
ObjectMeta: metav1.ObjectMeta{Name: GetFeatureFlagsConfigName(), Namespace: system.GetNamespace()},
875907
Data: map[string]string{
876908
featureFlagDisableWorkingDirKey: "true",
877909
},

0 commit comments

Comments
 (0)