diff --git a/pkg/secrets/context.go b/pkg/secrets/context.go index a65815c0..53cf3495 100644 --- a/pkg/secrets/context.go +++ b/pkg/secrets/context.go @@ -3,11 +3,14 @@ package secrets import ( "context" "errors" - "k8s.io/client-go/rest" "os" + "sync" + + "k8s.io/client-go/rest" ) type SecretContext struct { + mutex *sync.RWMutex Cache map[string]string FileCache map[string]string RestConfig *rest.Config @@ -19,6 +22,7 @@ var secretContextKey = "secretContext" func NewContext(ctx context.Context, c *rest.Config, namespace string) context.Context { return context.WithValue(ctx, secretContextKey, &SecretContext{ + mutex: &sync.RWMutex{}, Cache: make(map[string]string), FileCache: make(map[string]string), RestConfig: c, diff --git a/pkg/secrets/secrets.go b/pkg/secrets/secrets.go index 21c2c63e..498f9850 100644 --- a/pkg/secrets/secrets.go +++ b/pkg/secrets/secrets.go @@ -3,8 +3,9 @@ package secrets import ( "context" "fmt" - "github.com/armory/go-yaml-tools/pkg/secrets" "os" + + "github.com/armory/go-yaml-tools/pkg/secrets" ) func init() { @@ -45,11 +46,14 @@ func Decode(ctx context.Context, val string) (string, bool, error) { } // If we could get the cache, update it + c.mutex.Lock() if dec.IsFile() { c.FileCache[val] = v } else { c.Cache[val] = v } + c.mutex.Unlock() + return v, dec.IsFile(), nil } diff --git a/pkg/validate/parallel.go b/pkg/validate/parallel.go index e1283b0d..d98d7413 100644 --- a/pkg/validate/parallel.go +++ b/pkg/validate/parallel.go @@ -3,6 +3,7 @@ package validate import ( "context" "fmt" + "github.com/armory/spinnaker-operator/pkg/apis/spinnaker/interfaces" "k8s.io/apimachinery/pkg/util/wait" )