From 51b1ac2e4548e8f6945c71a4ab3f8955d9a086dd Mon Sep 17 00:00:00 2001 From: James Milligan Date: Thu, 23 Mar 2023 12:18:08 +0000 Subject: [PATCH 1/2] nil pointer fix + export constructors Signed-off-by: James Milligan --- core/pkg/runtime/from_config.go | 24 ++++++++++++---------- core/pkg/sync-store/sync_store.go | 34 ++++++++++--------------------- 2 files changed, 24 insertions(+), 34 deletions(-) diff --git a/core/pkg/runtime/from_config.go b/core/pkg/runtime/from_config.go index cccf8df3d..ace7c9af2 100644 --- a/core/pkg/runtime/from_config.go +++ b/core/pkg/runtime/from_config.go @@ -17,6 +17,7 @@ import ( "github.com/open-feature/flagd/core/pkg/sync" "github.com/open-feature/flagd/core/pkg/sync/file" "github.com/open-feature/flagd/core/pkg/sync/grpc" + "github.com/open-feature/flagd/core/pkg/sync/grpc/credentials" httpSync "github.com/open-feature/flagd/core/pkg/sync/http" "github.com/open-feature/flagd/core/pkg/sync/kubernetes" "github.com/robfig/cron" @@ -96,11 +97,11 @@ func (r *Runtime) setSyncImplFromConfig(logger *logger.Logger) error { case syncProviderFile: r.SyncImpl = append( r.SyncImpl, - r.newFile(syncProvider, logger), + NewFile(syncProvider, logger), ) rtLogger.Debug(fmt.Sprintf("using filepath sync-provider for: %q", syncProvider.URI)) case syncProviderKubernetes: - k, err := r.newK8s(syncProvider.URI, logger) + k, err := NewK8s(syncProvider.URI, logger) if err != nil { return err } @@ -112,13 +113,13 @@ func (r *Runtime) setSyncImplFromConfig(logger *logger.Logger) error { case syncProviderHTTP: r.SyncImpl = append( r.SyncImpl, - r.newHTTP(syncProvider, logger), + NewHTTP(syncProvider, logger), ) rtLogger.Debug(fmt.Sprintf("using remote sync-provider for: %s", syncProvider.URI)) case syncProviderGrpc: r.SyncImpl = append( r.SyncImpl, - r.newGRPC(syncProvider, logger), + NewGRPC(syncProvider, logger), ) default: return fmt.Errorf("invalid sync uri argument: %s, must start with 'file:', 'http(s)://', 'grpc://',"+ @@ -128,20 +129,21 @@ func (r *Runtime) setSyncImplFromConfig(logger *logger.Logger) error { return nil } -func (r *Runtime) newGRPC(config sync.SourceConfig, logger *logger.Logger) *grpc.Sync { +func NewGRPC(config sync.SourceConfig, logger *logger.Logger) *grpc.Sync { return &grpc.Sync{ URI: config.URI, Logger: logger.WithFields( zap.String("component", "sync"), zap.String("sync", "grpc"), ), - CertPath: config.CertPath, - ProviderID: config.ProviderID, - Selector: config.Selector, + CertPath: config.CertPath, + ProviderID: config.ProviderID, + Selector: config.Selector, + CredentialBuilder: &credentials.CredentialBuilder{}, } } -func (r *Runtime) newHTTP(config sync.SourceConfig, logger *logger.Logger) *httpSync.Sync { +func NewHTTP(config sync.SourceConfig, logger *logger.Logger) *httpSync.Sync { return &httpSync.Sync{ URI: config.URI, Client: &http.Client{ @@ -156,7 +158,7 @@ func (r *Runtime) newHTTP(config sync.SourceConfig, logger *logger.Logger) *http } } -func (r *Runtime) newK8s(uri string, logger *logger.Logger) (*kubernetes.Sync, error) { +func NewK8s(uri string, logger *logger.Logger) (*kubernetes.Sync, error) { reader, dynamic, err := kubernetes.GetClients() if err != nil { return nil, err @@ -172,7 +174,7 @@ func (r *Runtime) newK8s(uri string, logger *logger.Logger) (*kubernetes.Sync, e ), nil } -func (r *Runtime) newFile(config sync.SourceConfig, logger *logger.Logger) *file.Sync { +func NewFile(config sync.SourceConfig, logger *logger.Logger) *file.Sync { return &file.Sync{ URI: config.URI, Logger: logger.WithFields( diff --git a/core/pkg/sync-store/sync_store.go b/core/pkg/sync-store/sync_store.go index f0d6b5697..165701bcb 100644 --- a/core/pkg/sync-store/sync_store.go +++ b/core/pkg/sync-store/sync_store.go @@ -9,9 +9,8 @@ import ( "time" "github.com/open-feature/flagd/core/pkg/logger" + "github.com/open-feature/flagd/core/pkg/runtime" isync "github.com/open-feature/flagd/core/pkg/sync" - "github.com/open-feature/flagd/core/pkg/sync/file" - "github.com/open-feature/flagd/core/pkg/sync/kubernetes" "go.uber.org/zap" ) @@ -265,29 +264,18 @@ func (sb *SyncBuilder) SyncFromURI(uri string, logger *logger.Logger) (isync.ISy switch uriB := []byte(uri); { // filepath may be used for debugging, not recommended in deployment case regFile.Match(uriB): - return &file.Sync{ + return runtime.NewFile(isync.SourceConfig{ URI: regFile.ReplaceAllString(uri, ""), - Logger: logger.WithFields( - zap.String("component", "sync"), - zap.String("sync", "filepath"), - zap.String("target", "target"), - ), - Mux: &sync.RWMutex{}, - }, nil + }, logger.WithFields( + zap.String("component", "sync"), + zap.String("sync", "filepath"), + zap.String("target", "target"), + )), nil case regCrd.Match(uriB): - reader, dynamic, err := kubernetes.GetClients() - if err != nil { - return nil, err - } - return kubernetes.NewK8sSync( - logger.WithFields( - zap.String("component", "sync"), - zap.String("sync", "kubernetes"), - ), - regCrd.ReplaceAllString(uri, ""), - reader, - dynamic, - ), nil + return runtime.NewK8s(uri, logger.WithFields( + zap.String("component", "sync"), + zap.String("sync", "kubernetes"), + )) } return nil, fmt.Errorf("unrecognized URI: %s", uri) } From 3faddd71fb4f37f9e95978bb7ea8e0f76f690146 Mon Sep 17 00:00:00 2001 From: James Milligan Date: Fri, 24 Mar 2023 13:18:10 +0000 Subject: [PATCH 2/2] fix conflicts Signed-off-by: James Milligan --- core/pkg/sync-store/sync_store.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/pkg/sync-store/sync_store.go b/core/pkg/sync-store/sync_store.go index 45a9cded6..eac416bb4 100644 --- a/core/pkg/sync-store/sync_store.go +++ b/core/pkg/sync-store/sync_store.go @@ -264,7 +264,7 @@ func (sb *SyncBuilder) SyncFromURI(uri string, logger *logger.Logger) (isync.ISy switch uriB := []byte(uri); { // filepath may be used for debugging, not recommended in deployment case regFile.Match(uriB): - return runtime.NewFile(isync.SourceConfig{ + return runtime.NewFile(runtime.SourceConfig{ URI: regFile.ReplaceAllString(uri, ""), }, logger.WithFields( zap.String("component", "sync"),