Skip to content

Commit 6e874c4

Browse files
committed
chore: add managed by label to namespace
1 parent e850d9d commit 6e874c4

File tree

7 files changed

+43
-8
lines changed

7 files changed

+43
-8
lines changed

api/turing/api/appcontext.go

+1
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ func NewAppContext(
8181
// Initialise Labeller
8282
labeller.InitKubernetesLabeller(
8383
cfg.KubernetesLabelConfigs.LabelPrefix,
84+
cfg.KubernetesLabelConfigs.NamespaceLabelPrefix,
8485
cfg.KubernetesLabelConfigs.Environment,
8586
)
8687

api/turing/cluster/controller.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
sparkclient "github.com/GoogleCloudPlatform/spark-on-k8s-operator/pkg/client/clientset/versioned"
1212
sparkoperatorv1beta2 "github.com/GoogleCloudPlatform/spark-on-k8s-operator/pkg/client/clientset/versioned/typed/sparkoperator.k8s.io/v1beta2" //nolint
1313
mlpcluster "github.com/caraml-dev/mlp/api/pkg/cluster"
14+
"github.com/caraml-dev/turing/api/turing/cluster/labeller"
1415
"github.com/pkg/errors"
1516
networkingv1beta1 "istio.io/client-go/pkg/clientset/versioned/typed/networking/v1beta1"
1617
apiappsv1 "k8s.io/api/apps/v1"
@@ -211,7 +212,8 @@ func (c *controller) CreateNamespace(ctx context.Context, name string) error {
211212
}
212213
ns := apicorev1.Namespace{
213214
ObjectMeta: metav1.ObjectMeta{
214-
Name: name,
215+
Name: name,
216+
Labels: labeller.BuildNamespaceLabels(labeller.KubernetesLabelsRequest{}),
215217
},
216218
}
217219
_, err = c.k8sCoreClient.Namespaces().Create(ctx, &ns, metav1.CreateOptions{})

api/turing/cluster/controller_test.go

+6
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88
"testing"
99
"time"
1010

11+
"github.com/caraml-dev/turing/api/turing/cluster/labeller"
1112
"istio.io/client-go/pkg/apis/networking/v1beta1"
1213
"k8s.io/apimachinery/pkg/api/resource"
1314

@@ -1224,6 +1225,8 @@ func TestDeleteSparkApplication(t *testing.T) {
12241225
}
12251226

12261227
func TestCreateNamespace(t *testing.T) {
1228+
labeller.InitKubernetesLabeller("", "caraml.dev/", "")
1229+
12271230
namespace := "test-ns"
12281231
nsResource := schema.GroupVersionResource{
12291232
Version: "v1",
@@ -1268,6 +1271,9 @@ func TestCreateNamespace(t *testing.T) {
12681271
expectedAction := k8stesting.NewCreateAction(nsResource, "", &corev1.Namespace{
12691272
ObjectMeta: metav1.ObjectMeta{
12701273
Name: namespace,
1274+
Labels: map[string]string{
1275+
"caraml.dev/managed": "true",
1276+
},
12711277
},
12721278
})
12731279
assert.Equal(t, expectedAction, action)

api/turing/cluster/labeller/labeller.go

+26-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package labeller
33
import (
44
"fmt"
55
"regexp"
6+
"strconv"
67

78
mlp "github.com/caraml-dev/mlp/api/client"
89
)
@@ -20,10 +21,13 @@ const (
2021
orchestratorLabel = "orchestrator"
2122
// AppLabel refers to application of the Kubernetes Object
2223
AppLabel = "app"
24+
// managedLabel mark the kubernetes object as being managed by specific dev
25+
managedLabel = "managed"
2326
)
2427

2528
var (
2629
prefix string
30+
nsPrefix string
2731
environment string
2832
)
2933

@@ -53,8 +57,9 @@ func IsValidLabel(name string) error {
5357
}
5458

5559
// InitKubernetesLabeller builds a new KubernetesLabeller Singleton
56-
func InitKubernetesLabeller(p, e string) {
60+
func InitKubernetesLabeller(p, ns, e string) {
5761
prefix = p
62+
nsPrefix = ns
5863
environment = e
5964
}
6065

@@ -71,6 +76,11 @@ func GetLabelName(name string) string {
7176
return fmt.Sprintf("%s%s", prefix, name)
7277
}
7378

79+
// GetNamespaceLabelName prefixes the label with the specified label and returns the formatted label name
80+
func GetNamespaceLabelName(name string) string {
81+
return fmt.Sprintf("%s%s", nsPrefix, name)
82+
}
83+
7484
// BuildLabels builds the labels for the Kubernetes object
7585
// Combines resource labels with project labels
7686
func BuildLabels(r KubernetesLabelsRequest) map[string]string {
@@ -81,6 +91,21 @@ func BuildLabels(r KubernetesLabelsRequest) map[string]string {
8191
GetLabelName(AppLabel): r.App,
8292
GetLabelName(environmentLabel): environment,
8393
}
94+
appendFromLabelsRequest(labels, r)
95+
return labels
96+
}
97+
98+
// BuildNamespaceLabels builds the labels for a Kubernetes namespace.
99+
// Combines resource labels with project labels
100+
func BuildNamespaceLabels(r KubernetesLabelsRequest) map[string]string {
101+
labels := map[string]string{
102+
GetNamespaceLabelName(managedLabel): strconv.FormatBool(true),
103+
}
104+
appendFromLabelsRequest(labels, r)
105+
return labels
106+
}
107+
108+
func appendFromLabelsRequest(labels map[string]string, r KubernetesLabelsRequest) {
84109
for _, label := range r.Labels {
85110
// skip label that is trying to override reserved key
86111
if _, usingReservedKeys := reservedKeys[prefix+label.Key]; usingReservedKeys {
@@ -99,5 +124,4 @@ func BuildLabels(r KubernetesLabelsRequest) map[string]string {
99124

100125
labels[label.Key] = label.Value
101126
}
102-
return labels
103127
}

api/turing/cluster/labeller/labeller_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,10 @@ func TestLabeller(t *testing.T) {
3838
for name, tt := range tests {
3939
t.Run(name, func(t *testing.T) {
4040
// Always reset singleton objects.
41-
defer InitKubernetesLabeller("", "dev")
41+
defer InitKubernetesLabeller("", "", "dev")
4242

4343
if tt.doInit {
44-
InitKubernetesLabeller(tt.prefix, "dev")
44+
InitKubernetesLabeller(tt.prefix, "caraml.dev/", "dev")
4545
}
4646

4747
labels := BuildLabels(KubernetesLabelsRequest{})
@@ -121,7 +121,7 @@ func TestBuildLabels(t *testing.T) {
121121

122122
for _, tt := range tests {
123123
// Always reset singleton objects.
124-
defer InitKubernetesLabeller("", "dev")
124+
defer InitKubernetesLabeller("", "", "dev")
125125
t.Run(tt.name, func(t *testing.T) {
126126
got := BuildLabels(tt.request)
127127
if diff := cmp.Diff(got, tt.expected); diff != "" {

api/turing/config/config.go

+2
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,8 @@ type KubernetesLabelConfigs struct {
255255
// orchestrator: turing
256256
// app: my-model-app
257257
LabelPrefix string
258+
// NamespaceLabelPrefix is the prefix used for tagging kubernetes namespace.
259+
NamespaceLabelPrefix string
258260
// Environment is the value for the environment label
259261
Environment string `validate:"required"`
260262
}

api/turing/service/ensembling_job_service_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -648,8 +648,8 @@ func TestGetNamespaceByComponent(t *testing.T) {
648648
}
649649

650650
func TestCreatePodLabelSelector(t *testing.T) {
651-
labeller.InitKubernetesLabeller("prefix/", "dev")
652-
defer labeller.InitKubernetesLabeller("", "dev")
651+
labeller.InitKubernetesLabeller("prefix/", "", "dev")
652+
defer labeller.InitKubernetesLabeller("", "", "dev")
653653

654654
ensemblerName := "name"
655655
tests := map[string]struct {

0 commit comments

Comments
 (0)