From b5eb36e519fc456368054931a742c84b5aa5c39f Mon Sep 17 00:00:00 2001 From: Pavel Okhlopkov Date: Fri, 15 Nov 2024 17:22:35 +0300 Subject: [PATCH] remove sdk Signed-off-by: Pavel Okhlopkov --- sdk/registry/registry.go | 142 ------------------ sdk/registry/registry_test.go | 74 --------- sdk/registry/test/sdk_test.go | 41 ----- .../simple_operator/global-hooks/go-hook.go | 15 -- .../001-module-one/hooks/module-one-hook.go | 13 -- .../hooks/level1/sublevel/sub-sub-hook.go | 13 -- sdk/sdk.go | 9 -- 7 files changed, 307 deletions(-) delete mode 100644 sdk/registry/registry.go delete mode 100644 sdk/registry/registry_test.go delete mode 100644 sdk/registry/test/sdk_test.go delete mode 100644 sdk/registry/test/simple_operator/global-hooks/go-hook.go delete mode 100644 sdk/registry/test/simple_operator/modules/001-module-one/hooks/module-one-hook.go delete mode 100644 sdk/registry/test/simple_operator/modules/002-module-two/hooks/level1/sublevel/sub-sub-hook.go diff --git a/sdk/registry/registry.go b/sdk/registry/registry.go deleted file mode 100644 index b6b621a2..00000000 --- a/sdk/registry/registry.go +++ /dev/null @@ -1,142 +0,0 @@ -package registry - -import ( - "regexp" - "runtime" - "sync" - - gohook "github.com/flant/addon-operator/pkg/module_manager/go-hook" - "github.com/flant/addon-operator/pkg/module_manager/models/hooks/kind" -) - -const bindingsPanicMsg = "OnStartup hook always has binding context without Kubernetes snapshots. To prevent logic errors, don't use OnStartup and Kubernetes bindings in the same Go hook configuration." - -// /path/.../global-hooks/a/b/c/Hook-name.go -// $1 - Hook path for sorting (/global/hooks/subdir/v1-hook-onstartup.go) -// $2 - Hook name for identification (subdir/v1-hook-onstartup.go) -var globalRe = regexp.MustCompile(`(/global[\/\-]hooks/(([^/]+/)*([^/]+)))$`) - -// /path/.../modules/module-name/hooks/a/b/c/Hook-name.go -// $1 - Hook path for sorting (/modules/002-helm-and-hooks/hooks/subdir/some_hook) -// $2 - Hook name for identification (002-helm-and-hooks/hooks/subdir/some_hook) -// $3 - Path element with module name (002-helm-and-hooks) -var moduleRe = regexp.MustCompile(`(/modules/(([^/]+)/hooks/([^/]+/)*([^/]+)))$`) - -// TODO: This regexp should be changed. We shouldn't force users to name modules with a number prefix. -var moduleNameRe = regexp.MustCompile(`^[0-9][0-9][0-9]-(.*)$`) - -var RegisterFunc = func(config *gohook.HookConfig, reconcileFunc kind.ReconcileFunc) bool { - Registry().Add(kind.NewGoHook(config, reconcileFunc)) - return true -} - -type HookRegistry struct { - m sync.Mutex - globalHooks []*kind.GoHook - embeddedModuleHooks map[string][]*kind.GoHook // [] - moduleHooks map[string][]*kind.GoHook // [] -} - -var ( - instance *HookRegistry - once sync.Once -) - -func Registry() *HookRegistry { - once.Do(func() { - instance = &HookRegistry{ - globalHooks: make([]*kind.GoHook, 0), - embeddedModuleHooks: make(map[string][]*kind.GoHook), - } - }) - return instance -} - -func (h *HookRegistry) GetModuleHooks(moduleName string) []*kind.GoHook { - return h.embeddedModuleHooks[moduleName] -} - -func (h *HookRegistry) GetGlobalHooks() []*kind.GoHook { - return h.globalHooks -} - -// Hooks returns all (module and global) hooks -// Deprecated: method exists for backward compatibility, use GetGlobalHooks or GetModuleHooks instead -func (h *HookRegistry) Hooks() []*kind.GoHook { - res := make([]*kind.GoHook, 0, len(h.globalHooks)+len(h.embeddedModuleHooks)) - - for _, hooks := range h.embeddedModuleHooks { - res = append(res, hooks...) - } - - res = append(res, h.globalHooks...) - - return res -} - -func (h *HookRegistry) Add(hook *kind.GoHook) { - config := hook.GetConfig() - if config.OnStartup != nil && len(config.Kubernetes) > 0 { - panic(bindingsPanicMsg) - } - - hookMeta := &gohook.HookMetadata{} - - pc := make([]uintptr, 50) - n := runtime.Callers(0, pc) - if n == 0 { - panic("runtime.Callers is empty") - } - pc = pc[:n] // pass only valid pcs to runtime.CallersFrames - frames := runtime.CallersFrames(pc) - - for { - frame, more := frames.Next() - matches := globalRe.FindStringSubmatch(frame.File) - if matches != nil { - hookMeta.Global = true - hookMeta.Name = matches[2] - hookMeta.Path = matches[1] - break - } - - matches = moduleRe.FindStringSubmatch(frame.File) - if matches != nil { - hookMeta.EmbeddedModule = true - hookMeta.Name = matches[2] - hookMeta.Path = matches[1] - modNameMatches := moduleNameRe.FindStringSubmatch(matches[3]) - if modNameMatches != nil { - hookMeta.ModuleName = modNameMatches[1] - } - break - } - - if !more { - break - } - } - - if len(hookMeta.Name) == 0 { - panic("cannot extract metadata from GoHook") - } - - hook.AddMetadata(hookMeta) - - h.m.Lock() - defer h.m.Unlock() - - switch { - case hookMeta.Global: - h.globalHooks = append(h.globalHooks, hook) - - case hookMeta.EmbeddedModule: - h.embeddedModuleHooks[hookMeta.ModuleName] = append(h.embeddedModuleHooks[hookMeta.ModuleName], hook) - - case hookMeta.Module: - h.moduleHooks[hookMeta.ModuleName] = append(h.moduleHooks[hookMeta.ModuleName], hook) - - default: - panic("neither module nor global hook. Who are you?") - } -} diff --git a/sdk/registry/registry_test.go b/sdk/registry/registry_test.go deleted file mode 100644 index 23816a8c..00000000 --- a/sdk/registry/registry_test.go +++ /dev/null @@ -1,74 +0,0 @@ -package registry - -import ( - "testing" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" - - gohook "github.com/flant/addon-operator/pkg/module_manager/go-hook" - "github.com/flant/addon-operator/pkg/module_manager/models/hooks/kind" -) - -func TestRegister(t *testing.T) { - t.Run("Hook with OnStartup and Kubernetes bindings should panic", func(t *testing.T) { - hook := kind.NewGoHook( - &gohook.HookConfig{ - OnStartup: &gohook.OrderedConfig{Order: 1}, - Kubernetes: []gohook.KubernetesConfig{ - { - Name: "test", - ApiVersion: "v1", - Kind: "Pod", - FilterFunc: nil, - }, - }, - }, - nil, - ) - - defer func() { - r := recover() - require.NotEmpty(t, r) - assert.Equal(t, bindingsPanicMsg, r) - }() - Registry().Add(hook) - }) - - t.Run("Hook with OnStartup should not panic", func(t *testing.T) { - hook := kind.NewGoHook( - &gohook.HookConfig{ - OnStartup: &gohook.OrderedConfig{Order: 1}, - }, - nil, - ) - - defer func() { - r := recover() - assert.NotEqual(t, bindingsPanicMsg, r) - }() - Registry().Add(hook) - }) - - t.Run("Hook with Kubernetes binding should not panic", func(t *testing.T) { - hook := kind.NewGoHook( - &gohook.HookConfig{ - Kubernetes: []gohook.KubernetesConfig{ - { - Name: "test", - ApiVersion: "v1", - Kind: "Pod", - FilterFunc: nil, - }, - }, - }, - nil, - ) - - defer func() { - r := recover() - assert.NotEqual(t, bindingsPanicMsg, r) - }() - Registry().Add(hook) - }) -} diff --git a/sdk/registry/test/sdk_test.go b/sdk/registry/test/sdk_test.go deleted file mode 100644 index b8499f38..00000000 --- a/sdk/registry/test/sdk_test.go +++ /dev/null @@ -1,41 +0,0 @@ -package test - -import ( - "testing" - - . "github.com/onsi/gomega" - - "github.com/flant/addon-operator/pkg/module_manager/models/hooks/kind" - "github.com/flant/addon-operator/sdk/registry" - _ "github.com/flant/addon-operator/sdk/registry/test/simple_operator/global-hooks" - _ "github.com/flant/addon-operator/sdk/registry/test/simple_operator/modules/001-module-one/hooks" - _ "github.com/flant/addon-operator/sdk/registry/test/simple_operator/modules/002-module-two/hooks/level1/sublevel" -) - -func Test_HookMetadata_from_runtime(t *testing.T) { - g := NewWithT(t) - - hookList := registry.Registry().Hooks() - g.Expect(len(hookList)).Should(Equal(3)) - - globalHooks := registry.Registry().GetGlobalHooks() - g.Expect(len(globalHooks)).Should(Equal(1)) - - hooks := map[string]*kind.GoHook{} - - for _, h := range hookList { - hooks[h.GetName()] = h - } - - hm, ok := hooks["go-hook.go"] - g.Expect(ok).To(BeTrue(), "global go-hook.go should be registered") - g.Expect(hm.GetPath()).To(Equal("/global-hooks/go-hook.go")) - - hm, ok = hooks["001-module-one/hooks/module-one-hook.go"] - g.Expect(ok).To(BeTrue(), "module-one-hook.go should be registered") - g.Expect(hm.GetPath()).To(Equal("/modules/001-module-one/hooks/module-one-hook.go")) - - hm, ok = hooks["002-module-two/hooks/level1/sublevel/sub-sub-hook.go"] - g.Expect(ok).To(BeTrue(), "sub-sub-hook.go should be registered") - g.Expect(hm.GetPath()).To(Equal("/modules/002-module-two/hooks/level1/sublevel/sub-sub-hook.go")) -} diff --git a/sdk/registry/test/simple_operator/global-hooks/go-hook.go b/sdk/registry/test/simple_operator/global-hooks/go-hook.go deleted file mode 100644 index be01b6fa..00000000 --- a/sdk/registry/test/simple_operator/global-hooks/go-hook.go +++ /dev/null @@ -1,15 +0,0 @@ -package global_hooks - -import ( - gohook "github.com/flant/addon-operator/pkg/module_manager/go-hook" - "github.com/flant/addon-operator/sdk" -) - -func init() { - // TODO: remove global logger? - sdk.RegisterFunc(&gohook.HookConfig{}, main) -} - -func main(_ *gohook.HookInput) error { - return nil -} diff --git a/sdk/registry/test/simple_operator/modules/001-module-one/hooks/module-one-hook.go b/sdk/registry/test/simple_operator/modules/001-module-one/hooks/module-one-hook.go deleted file mode 100644 index 70c2beab..00000000 --- a/sdk/registry/test/simple_operator/modules/001-module-one/hooks/module-one-hook.go +++ /dev/null @@ -1,13 +0,0 @@ -package hooks - -import ( - gohook "github.com/flant/addon-operator/pkg/module_manager/go-hook" - "github.com/flant/addon-operator/sdk" -) - -// TODO: remove global logger? -var _ = sdk.RegisterFunc(&gohook.HookConfig{}, main) - -func main(_ *gohook.HookInput) error { - return nil -} diff --git a/sdk/registry/test/simple_operator/modules/002-module-two/hooks/level1/sublevel/sub-sub-hook.go b/sdk/registry/test/simple_operator/modules/002-module-two/hooks/level1/sublevel/sub-sub-hook.go deleted file mode 100644 index 3b7c5ab3..00000000 --- a/sdk/registry/test/simple_operator/modules/002-module-two/hooks/level1/sublevel/sub-sub-hook.go +++ /dev/null @@ -1,13 +0,0 @@ -package sublevel - -import ( - gohook "github.com/flant/addon-operator/pkg/module_manager/go-hook" - "github.com/flant/addon-operator/sdk" -) - -// TODO: remove global logger? -var _ = sdk.RegisterFunc(&gohook.HookConfig{}, main) - -func main(_ *gohook.HookInput) error { - return nil -} diff --git a/sdk/sdk.go b/sdk/sdk.go index f8f916f9..d76f8dde 100644 --- a/sdk/sdk.go +++ b/sdk/sdk.go @@ -3,17 +3,8 @@ package sdk import ( "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" "k8s.io/apimachinery/pkg/runtime" - - gohook "github.com/flant/addon-operator/pkg/module_manager/go-hook" - "github.com/flant/addon-operator/pkg/module_manager/models/hooks/kind" - "github.com/flant/addon-operator/sdk/registry" ) -var RegisterFunc = func(config *gohook.HookConfig, reconcileFunc kind.ReconcileFunc) bool { - registry.Registry().Add(kind.NewGoHook(config, reconcileFunc)) - return true -} - func ToUnstructured(obj interface{}) (*unstructured.Unstructured, error) { content, err := runtime.DefaultUnstructuredConverter.ToUnstructured(obj) return &unstructured.Unstructured{Object: content}, err