From 777953ddaf10a4e82c87e7da38511d8e458ca978 Mon Sep 17 00:00:00 2001 From: Ricardo Weir Date: Fri, 15 Apr 2022 16:22:46 -0700 Subject: [PATCH] Update template to use no change update env var --- generator/funcs.go | 23 +++++++++++++++++++++++ generator/k8s_client_template.go | 6 +++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/generator/funcs.go b/generator/funcs.go index 14af9a0c..04155ee0 100644 --- a/generator/funcs.go +++ b/generator/funcs.go @@ -2,6 +2,7 @@ package generator import ( "net/http" + "os" "strings" "text/template" @@ -9,6 +10,10 @@ import ( "github.com/rancher/norman/types/convert" ) +const ( + managementContextType = "mgmt" +) + func funcs() template.FuncMap { return template.FuncMap{ "capitalize": convert.Capitalize, @@ -53,3 +58,21 @@ func getCollectionOutput(output, codeName string) string { } return convert.Capitalize(output) } + +// SyncOnlyChangedObjects check whether the CATTLE_SKIP_NO_CHANGE_UPDATE env var is +// configured to skip the update handler for events on the management context +// that do not contain a change to the object. +func SyncOnlyChangedObjects() bool { + skipNoChangeUpdate := os.Getenv("CATTLE_SYNC_ONLY_CHANGED_OBJECTS") + if skipNoChangeUpdate == "" { + return false + } + parts := strings.Split(skipNoChangeUpdate, ",") + + for _, part := range parts { + if part == managementContextType { + return true + } + } + return false +} diff --git a/generator/k8s_client_template.go b/generator/k8s_client_template.go index aec8d633..7506efc8 100644 --- a/generator/k8s_client_template.go +++ b/generator/k8s_client_template.go @@ -6,6 +6,7 @@ import ( "github.com/rancher/lasso/pkg/client" "github.com/rancher/lasso/pkg/controller" "github.com/rancher/norman/objectclient" + "github.com/rancher/norman/generator" "k8s.io/apimachinery/pkg/runtime" "k8s.io/client-go/rest" {{.importPackage}} @@ -26,7 +27,10 @@ func NewForConfig(cfg rest.Config) (Interface, error) { if err := {{.prefix}}AddToScheme(scheme); err != nil { return nil, err } - controllerFactory, err := controller.NewSharedControllerFactoryFromConfig(&cfg, scheme) + sharedOpts := &controller.SharedControllerFactoryOptions{ + SyncOnlyChangedObjects: generator.SyncOnlyChangedObjects(), + } + controllerFactory, err := controller.NewSharedControllerFactoryFromConfigWithOptions(&cfg, scheme, sharedOpts) if err != nil { return nil, err }