Skip to content
Merged
Show file tree
Hide file tree
Changes from 34 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
1196aa2
SecretFieldClusterId to CmFieldClusterId
prakash100198 May 21, 2025
17673c3
replace secret informer with field selector to configmap informer wit…
prakash100198 May 22, 2025
405943c
CreateConfigMapObject
prakash100198 May 22, 2025
d504346
ClusterModifyEventSecretTypeKey
prakash100198 May 22, 2025
18ca4a3
DeleteConfigMap k8s util func
prakash100198 May 22, 2025
0edc8f8
correct label selector
prakash100198 May 22, 2025
28fd5f0
add extra validation in add , update and delete func
prakash100198 May 22, 2025
dce8d68
cm informer instead of secret informer for cluster
prakash100198 May 22, 2025
e1121de
develop sync
prakash100198 May 23, 2025
9a252fc
bump common lib
prakash100198 May 23, 2025
1b6fc97
bump common lib
prakash100198 May 23, 2025
c0371be
Merge branch 'develop' into rename-secret-to-cm-cluster
prakash100198 May 23, 2025
df280dc
bump common lib
prakash100198 May 23, 2025
1041940
bump common lib
prakash100198 May 23, 2025
96556fe
fix
prakash100198 May 23, 2025
68ba8f2
bump common lib
prakash100198 May 23, 2025
996f82c
bump common lib
prakash100198 May 23, 2025
60bd924
r
prakash100198 May 23, 2025
c5591ad
ClusterModifyEventCmLabelValue = "cluster-request-modify"
prakash100198 May 23, 2025
48b990c
ClusterModifyEventCmLabelValue = "type=cluster-request-modify"
prakash100198 May 23, 2025
93c5820
import label selector from commonb lib
prakash100198 May 23, 2025
5ed7eaa
import label selector from commonb lib
prakash100198 May 23, 2025
17f2964
ClusterModifyEventCmLabelKeyValue and ClusterModifyEventCmLabelValue
prakash100198 May 23, 2025
1205ee2
small fix
prakash100198 May 23, 2025
01ed8fb
small fix
prakash100198 May 23, 2025
222f1e0
add logger for ignoring cluster change event in case label not found
prakash100198 May 27, 2025
556a5a9
fix
prakash100198 May 27, 2025
d40f917
logger
prakash100198 May 27, 2025
5f0ce09
refactoring of CreateConfigMapObject
prakash100198 May 27, 2025
f3a156d
fix
prakash100198 May 27, 2025
ddb036d
Merge branch 'develop' into rename-secret-to-cm-cluster
prakash100198 May 27, 2025
323af49
bump common lib
prakash100198 May 27, 2025
b13ea5f
bump common lib
prakash100198 May 27, 2025
626bf7f
remove WithCmName and make cmname as func signature
prakash100198 May 27, 2025
2439202
code review incorporation
prakash100198 May 27, 2025
483d6a2
bump common lib
prakash100198 May 27, 2025
8a47b97
Merge branch 'develop' into rename-secret-to-cm-cluster
prakash100198 May 28, 2025
b913d2d
make
prakash100198 May 28, 2025
aa57ae9
bump common lib
prakash100198 May 28, 2025
2650af5
Merge branch 'develop' into rename-secret-to-cm-cluster
prakash100198 Jun 9, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 9 additions & 6 deletions common-lib/informer/bean.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,15 @@
package informer

const (
ClusterModifyEventSecretType = "cluster.request/modify"
ClusterActionAdd = "add"
ClusterActionUpdate = "update"
ClusterActionDelete = "delete"
SecretFieldAction = "action"
SecretFieldClusterId = "cluster_id"
ClusterModifyEventSecretType = "cluster.request/modify"
ClusterModifyEventSecretTypeKey = "type"
ClusterActionAdd = "add"
ClusterActionUpdate = "update"
ClusterActionDelete = "delete"
CmFieldAction = "action"
CmFieldClusterId = "cluster_id"
ClusterModifyEventCmLabelKeyValue = "type=cluster-request-modify"
ClusterModifyEventCmLabelValue = "cluster-request-modify"
)

const (
Expand Down
3 changes: 3 additions & 0 deletions common-lib/utils/k8s/K8sService.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ package k8s
import (
"context"
"flag"
"github.com/devtron-labs/common-lib/utils/k8s/configMap"
"go.uber.org/zap"
"io"
batchV1 "k8s.io/api/batch/v1"
Expand Down Expand Up @@ -76,7 +77,9 @@ type K8sService interface {
PatchConfigMap(namespace string, clusterConfig *ClusterConfig, name string, data map[string]interface{}) (*v1.ConfigMap, error)
UpdateConfigMap(namespace string, cm *v1.ConfigMap, client *v12.CoreV1Client) (*v1.ConfigMap, error)
CreateConfigMap(namespace string, cm *v1.ConfigMap, client *v12.CoreV1Client) (*v1.ConfigMap, error)
CreateConfigMapObject(name, namespace string, client *v12.CoreV1Client, opts ...configMap.Option) (*v1.ConfigMap, error)
GetConfigMap(namespace string, name string, client *v12.CoreV1Client) (*v1.ConfigMap, error)
DeleteConfigMap(namespace string, name string, client *v12.CoreV1Client) error
GetConfigMapWithCtx(ctx context.Context, namespace string, name string, client *v12.CoreV1Client) (*v1.ConfigMap, error)
GetNsIfExists(namespace string, client *v12.CoreV1Client) (ns *v1.Namespace, exists bool, err error)
CreateNsIfNotExists(namespace string, clusterConfig *ClusterConfig) (ns *v1.Namespace, nsCreated bool, err error)
Expand Down
22 changes: 22 additions & 0 deletions common-lib/utils/k8s/K8sUtil.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ import (
"github.com/devtron-labs/common-lib/utils"
http2 "github.com/devtron-labs/common-lib/utils/http"
"github.com/devtron-labs/common-lib/utils/k8s/commonBean"
"github.com/devtron-labs/common-lib/utils/k8s/configMap"
"io"
"k8s.io/client-go/dynamic"
"k8s.io/kubernetes/pkg/api/legacyscheme"
Expand Down Expand Up @@ -236,6 +237,27 @@ func (impl *K8sServiceImpl) CreateConfigMap(namespace string, cm *v1.ConfigMap,
}
}

func (impl *K8sServiceImpl) CreateConfigMapObject(name, namespace string, client *v12.CoreV1Client, opts ...configMap.Option) (*v1.ConfigMap, error) {
configMap := &v1.ConfigMap{
ObjectMeta: metav1.ObjectMeta{
Name: name,
},
}
for _, option := range opts {
option(configMap)
}
return impl.CreateConfigMap(namespace, configMap, client)
}

func (impl *K8sServiceImpl) DeleteConfigMap(namespace string, name string, client *v12.CoreV1Client) error {
err := client.ConfigMaps(namespace).Delete(context.Background(), name, metav1.DeleteOptions{})
if err != nil {
impl.logger.Errorw("error in deleting cm", "namespace", namespace, "err", err)
return err
}
return nil
}

func (impl *K8sServiceImpl) UpdateConfigMap(namespace string, cm *v1.ConfigMap, client *v12.CoreV1Client) (*v1.ConfigMap, error) {
cm, err := client.ConfigMaps(namespace).Update(context.Background(), cm, metav1.UpdateOptions{})
if err != nil {
Expand Down
43 changes: 43 additions & 0 deletions common-lib/utils/k8s/configMap/Options.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
package configMap

import (
v1 "k8s.io/api/core/v1"
)

type Option func(*v1.ConfigMap)

// WithLabels adds labels to a ConfigMap
func WithLabels(labels map[string]string) Option {
return func(cm *v1.ConfigMap) {
if labels != nil && len(labels) > 0 {
cm.ObjectMeta.Labels = labels
}
}
}

// WithAnnotations adds annotations to a ConfigMap
func WithAnnotations(annotations map[string]string) Option {
return func(cm *v1.ConfigMap) {
if annotations != nil && len(annotations) > 0 {
cm.ObjectMeta.Annotations = annotations
}
}
}

// WithData adds string data to a ConfigMap
func WithData(data map[string]string) Option {
return func(cm *v1.ConfigMap) {
if data != nil && len(data) > 0 {
cm.Data = data
}
}
}

// WithBinaryData adds binary data to a ConfigMap
func WithBinaryData(binaryData map[string][]byte) Option {
return func(cm *v1.ConfigMap) {
if binaryData != nil && len(binaryData) > 0 {
cm.BinaryData = binaryData
}
}
}
2 changes: 1 addition & 1 deletion kubelink/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -177,7 +177,7 @@ require (
)

replace (
github.com/devtron-labs/common-lib => github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250521214453-c735fc26a0fe
github.com/devtron-labs/common-lib => github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250527080653-ddb036d5ca0a
go.opentelemetry.io/otel/metric => go.opentelemetry.io/otel/metric v1.18.0
// https://github.com/kubernetes/kubernetes/issues/79384#issuecomment-505627280
k8s.io/api => k8s.io/api v0.29.0
Expand Down
4 changes: 2 additions & 2 deletions kubelink/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -79,8 +79,8 @@ github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxG
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250521214453-c735fc26a0fe h1:jVbCesVCeOSZgSdnR9Rl8Hsx6wZemF+QsHn7XXVOTp0=
github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250521214453-c735fc26a0fe/go.mod h1:HQVUnQI7WHwVq89Bib/18xJqM89S1+xI0O7REctMMrA=
github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250527080653-ddb036d5ca0a h1:6E0BTI4Pr/zEqd5TVOV9lpbCIV/u9/cRfseu7Ae291w=
github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250527080653-ddb036d5ca0a/go.mod h1:HQVUnQI7WHwVq89Bib/18xJqM89S1+xI0O7REctMMrA=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/distribution/distribution/v3 v3.0.0-beta.1 h1:X+ELTxPuZ1Xe5MsD3kp2wfGUhc8I+MPfRis8dZ818Ic=
Expand Down
34 changes: 18 additions & 16 deletions kubelink/pkg/k8sInformer/K8sInformer.go
Original file line number Diff line number Diff line change
Expand Up @@ -192,21 +192,21 @@ func (impl *K8sInformerImpl) startInformer(clusterInfo bean.ClusterInfo) error {
if clusterInfo.ClusterName == commonBean.DEFAULT_CLUSTER {
impl.logger.Debugw("starting informer, reading new cluster request for default cluster")
labelOptions := kubeinformers.WithTweakListOptions(func(opts *metav1.ListOptions) {
//kubectl get secret --field-selector type==cluster.request/modify --all-namespaces
opts.FieldSelector = "type==cluster.request/modify"
opts.LabelSelector = informerBean.ClusterModifyEventCmLabelKeyValue
})
informerFactory := kubeinformers.NewSharedInformerFactoryWithOptions(clusterClient, 15*time.Minute, labelOptions)
stopper := make(chan struct{})
secretInformer := informerFactory.Core().V1().Secrets()
_, err = secretInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
cmInformer := informerFactory.Core().V1().ConfigMaps()
_, err = cmInformer.Informer().AddEventHandler(cache.ResourceEventHandlerFuncs{
AddFunc: func(obj interface{}) {
startTime := time.Now()
impl.logger.Debugw("CLUSTER_ADD_INFORMER: cluster secret add event received", "obj", obj, "time", time.Now())
if secretObject, ok := obj.(*coreV1.Secret); ok {
if secretObject.Type != informerBean.ClusterModifyEventSecretType {
impl.logger.Debugw("CLUSTER_ADD_INFORMER: cluster cm add event received", "obj", obj, "time", time.Now())
if cmObject, ok := obj.(*coreV1.ConfigMap); ok {
if labelValue, exists := cmObject.Labels[informerBean.ClusterModifyEventSecretTypeKey]; !exists || labelValue != informerBean.ClusterModifyEventCmLabelValue {
impl.logger.Infow("label value not found in cm, hence ignoring cluster add event", "labelKey", informerBean.ClusterModifyEventSecretTypeKey, "labelValue", labelValue)
return
}
data := secretObject.Data
data := cmObject.Data
action := data["action"]
id := string(data["cluster_id"])
var idInt int
Expand Down Expand Up @@ -234,12 +234,13 @@ func (impl *K8sInformerImpl) startInformer(clusterInfo bean.ClusterInfo) error {
},
UpdateFunc: func(oldObj, newObj interface{}) {
startTime := time.Now()
impl.logger.Debugw("CLUSTER_UPDATE_INFORMER: cluster secret update event received", "oldObj", oldObj, "newObj", newObj, "time", time.Now())
if secretObject, ok := newObj.(*coreV1.Secret); ok {
if secretObject.Type != informerBean.ClusterModifyEventSecretType {
impl.logger.Debugw("CLUSTER_UPDATE_INFORMER: cluster cm update event received", "oldObj", oldObj, "newObj", newObj, "time", time.Now())
if cmObject, ok := newObj.(*coreV1.ConfigMap); ok {
if labelValue, exists := cmObject.Labels[informerBean.ClusterModifyEventSecretTypeKey]; !exists || labelValue != informerBean.ClusterModifyEventCmLabelValue {
impl.logger.Infow("label value not found in cm, hence ignoring cluster update event", "labelKey", informerBean.ClusterModifyEventSecretTypeKey, "labelValue", labelValue)
return
}
data := secretObject.Data
data := cmObject.Data
action := data["action"]
id := string(data["cluster_id"])
var idInt int
Expand All @@ -264,12 +265,13 @@ func (impl *K8sInformerImpl) startInformer(clusterInfo bean.ClusterInfo) error {
},
DeleteFunc: func(obj interface{}) {
startTime := time.Now()
impl.logger.Debugw("CLUSTER_DELETE_INFORMER: secret delete event received", "obj", obj, "time", time.Now())
if secretObject, ok := obj.(*coreV1.Secret); ok {
if secretObject.Type != informerBean.ClusterModifyEventSecretType {
impl.logger.Debugw("CLUSTER_DELETE_INFORMER: cm delete event received", "obj", obj, "time", time.Now())
if cmObject, ok := obj.(*coreV1.ConfigMap); ok {
if labelValue, exists := cmObject.Labels[informerBean.ClusterModifyEventSecretTypeKey]; !exists || labelValue != informerBean.ClusterModifyEventCmLabelValue {
impl.logger.Infow("label value not found in cm, hence ignoring cluster delete event", "labelKey", informerBean.ClusterModifyEventSecretTypeKey, "labelValue", labelValue)
return
}
data := secretObject.Data
data := cmObject.Data
action := data["action"]
id := string(data["cluster_id"])
idInt, err := strconv.Atoi(id)
Expand Down

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions kubelink/vendor/modules.txt
Original file line number Diff line number Diff line change
Expand Up @@ -127,7 +127,7 @@ github.com/cyphar/filepath-securejoin
# github.com/davecgh/go-spew v1.1.1
## explicit
github.com/davecgh/go-spew/spew
# github.com/devtron-labs/common-lib v0.0.0 => github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250521214453-c735fc26a0fe
# github.com/devtron-labs/common-lib v0.0.0 => github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250527080653-ddb036d5ca0a
## explicit; go 1.21
github.com/devtron-labs/common-lib/async
github.com/devtron-labs/common-lib/constants
Expand All @@ -148,6 +148,7 @@ github.com/devtron-labs/common-lib/utils/grpc
github.com/devtron-labs/common-lib/utils/http
github.com/devtron-labs/common-lib/utils/k8s
github.com/devtron-labs/common-lib/utils/k8s/commonBean
github.com/devtron-labs/common-lib/utils/k8s/configMap
github.com/devtron-labs/common-lib/utils/k8s/health
github.com/devtron-labs/common-lib/utils/k8sObjectsUtil
github.com/devtron-labs/common-lib/utils/reflectUtils
Expand Down Expand Up @@ -1361,7 +1362,7 @@ sigs.k8s.io/structured-merge-diff/v4/value
# sigs.k8s.io/yaml v1.3.0
## explicit; go 1.12
sigs.k8s.io/yaml
# github.com/devtron-labs/common-lib => github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250521214453-c735fc26a0fe
# github.com/devtron-labs/common-lib => github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250527080653-ddb036d5ca0a
# go.opentelemetry.io/otel/metric => go.opentelemetry.io/otel/metric v1.18.0
# k8s.io/api => k8s.io/api v0.29.0
# k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.29.0
Expand Down
2 changes: 1 addition & 1 deletion kubewatch/go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -245,4 +245,4 @@ replace (
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.29.7
)

replace github.com/devtron-labs/common-lib => github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250521214453-c735fc26a0fe
replace github.com/devtron-labs/common-lib => github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250527082212-323af49b03f0
4 changes: 2 additions & 2 deletions kubewatch/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -719,8 +719,8 @@ github.com/cyphar/filepath-securejoin v0.3.6/go.mod h1:Sdj7gXlvMcPZsbhwhQ33GguGL
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250521214453-c735fc26a0fe h1:jVbCesVCeOSZgSdnR9Rl8Hsx6wZemF+QsHn7XXVOTp0=
github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250521214453-c735fc26a0fe/go.mod h1:HQVUnQI7WHwVq89Bib/18xJqM89S1+xI0O7REctMMrA=
github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250527082212-323af49b03f0 h1:l8Ym2QGKO1V6VfAA0aD7Er3mYnkKmJzliFtfk1zmDJQ=
github.com/devtron-labs/devtron-services/common-lib v0.0.0-20250527082212-323af49b03f0/go.mod h1:HQVUnQI7WHwVq89Bib/18xJqM89S1+xI0O7REctMMrA=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
Expand Down
3 changes: 1 addition & 2 deletions kubewatch/pkg/informer/bean/bean.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,7 @@ type ClusterInfo struct {
}

const (
ClusterModifyEventFieldSelector = "type==cluster.request/modify"
InformerAlreadyExistMessage = "INFORMER_ALREADY_EXIST"
InformerAlreadyExistMessage = "INFORMER_ALREADY_EXIST"

ExitCode143Error = "Error (exit code 143)"
NodeNoLongerExists = "PodGC: node no longer exists"
Expand Down
Loading
Loading