|
@@ -24,6 +24,7 @@ import (
|
|
|
"fmt"
|
|
"fmt"
|
|
|
"net/http"
|
|
"net/http"
|
|
|
"os"
|
|
"os"
|
|
|
|
|
+ "reflect"
|
|
|
"strconv"
|
|
"strconv"
|
|
|
"strings"
|
|
"strings"
|
|
|
|
|
|
|
@@ -50,15 +51,16 @@ import (
|
|
|
"github.com/external-secrets/external-secrets/pkg/feature"
|
|
"github.com/external-secrets/external-secrets/pkg/feature"
|
|
|
"github.com/external-secrets/external-secrets/pkg/find"
|
|
"github.com/external-secrets/external-secrets/pkg/find"
|
|
|
"github.com/external-secrets/external-secrets/pkg/provider/metrics"
|
|
"github.com/external-secrets/external-secrets/pkg/provider/metrics"
|
|
|
|
|
+ "github.com/external-secrets/external-secrets/pkg/provider/vault/util"
|
|
|
"github.com/external-secrets/external-secrets/pkg/utils"
|
|
"github.com/external-secrets/external-secrets/pkg/utils"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
var (
|
|
var (
|
|
|
- _ esv1beta1.Provider = &connector{}
|
|
|
|
|
|
|
+ _ esv1beta1.Provider = &Connector{}
|
|
|
_ esv1beta1.SecretsClient = &client{}
|
|
_ esv1beta1.SecretsClient = &client{}
|
|
|
enableCache bool
|
|
enableCache bool
|
|
|
logger = ctrl.Log.WithName("provider").WithName("vault")
|
|
logger = ctrl.Log.WithName("provider").WithName("vault")
|
|
|
- clientCache *cache.Cache[Client]
|
|
|
|
|
|
|
+ clientCache *cache.Cache[util.Client]
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
const (
|
|
const (
|
|
@@ -76,7 +78,7 @@ const (
|
|
|
errDataField = "failed to find data field"
|
|
errDataField = "failed to find data field"
|
|
|
errJSONUnmarshall = "failed to unmarshall JSON"
|
|
errJSONUnmarshall = "failed to unmarshall JSON"
|
|
|
errPathInvalid = "provided Path isn't a valid kv v2 path"
|
|
errPathInvalid = "provided Path isn't a valid kv v2 path"
|
|
|
- errSecretFormat = "secret data not in expected format"
|
|
|
|
|
|
|
+ errSecretFormat = "secret data for property %s not in expected format: %s"
|
|
|
errUnexpectedKey = "unexpected key in data: %s"
|
|
errUnexpectedKey = "unexpected key in data: %s"
|
|
|
errVaultToken = "cannot parse Vault authentication token: %w"
|
|
errVaultToken = "cannot parse Vault authentication token: %w"
|
|
|
errVaultRequest = "error from Vault request: %w"
|
|
errVaultRequest = "error from Vault request: %w"
|
|
@@ -119,92 +121,22 @@ const (
|
|
|
|
|
|
|
|
// https://github.com/external-secrets/external-secrets/issues/644
|
|
// https://github.com/external-secrets/external-secrets/issues/644
|
|
|
var _ esv1beta1.SecretsClient = &client{}
|
|
var _ esv1beta1.SecretsClient = &client{}
|
|
|
-var _ esv1beta1.Provider = &connector{}
|
|
|
|
|
-
|
|
|
|
|
-type Auth interface {
|
|
|
|
|
- Login(ctx context.Context, authMethod vault.AuthMethod) (*vault.Secret, error)
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-type Token interface {
|
|
|
|
|
- RevokeSelfWithContext(ctx context.Context, token string) error
|
|
|
|
|
- LookupSelfWithContext(ctx context.Context) (*vault.Secret, error)
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-type Logical interface {
|
|
|
|
|
- ReadWithDataWithContext(ctx context.Context, path string, data map[string][]string) (*vault.Secret, error)
|
|
|
|
|
- ListWithContext(ctx context.Context, path string) (*vault.Secret, error)
|
|
|
|
|
- WriteWithContext(ctx context.Context, path string, data map[string]interface{}) (*vault.Secret, error)
|
|
|
|
|
- DeleteWithContext(ctx context.Context, path string) (*vault.Secret, error)
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-type Client interface {
|
|
|
|
|
- SetToken(v string)
|
|
|
|
|
- Token() string
|
|
|
|
|
- ClearToken()
|
|
|
|
|
- Auth() Auth
|
|
|
|
|
- Logical() Logical
|
|
|
|
|
- AuthToken() Token
|
|
|
|
|
- SetNamespace(namespace string)
|
|
|
|
|
- AddHeader(key, value string)
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-type VClient struct {
|
|
|
|
|
- setToken func(v string)
|
|
|
|
|
- token func() string
|
|
|
|
|
- clearToken func()
|
|
|
|
|
- auth Auth
|
|
|
|
|
- logical Logical
|
|
|
|
|
- authToken Token
|
|
|
|
|
- setNamespace func(namespace string)
|
|
|
|
|
- addHeader func(key, value string)
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v VClient) AddHeader(key, value string) {
|
|
|
|
|
- v.addHeader(key, value)
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v VClient) SetNamespace(namespace string) {
|
|
|
|
|
- v.setNamespace(namespace)
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v VClient) ClearToken() {
|
|
|
|
|
- v.clearToken()
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v VClient) Token() string {
|
|
|
|
|
- return v.token()
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v VClient) SetToken(token string) {
|
|
|
|
|
- v.setToken(token)
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v VClient) Auth() Auth {
|
|
|
|
|
- return v.auth
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v VClient) AuthToken() Token {
|
|
|
|
|
- return v.authToken
|
|
|
|
|
-}
|
|
|
|
|
-
|
|
|
|
|
-func (v VClient) Logical() Logical {
|
|
|
|
|
- return v.logical
|
|
|
|
|
-}
|
|
|
|
|
|
|
+var _ esv1beta1.Provider = &Connector{}
|
|
|
|
|
|
|
|
type client struct {
|
|
type client struct {
|
|
|
kube kclient.Client
|
|
kube kclient.Client
|
|
|
store *esv1beta1.VaultProvider
|
|
store *esv1beta1.VaultProvider
|
|
|
log logr.Logger
|
|
log logr.Logger
|
|
|
corev1 typedcorev1.CoreV1Interface
|
|
corev1 typedcorev1.CoreV1Interface
|
|
|
- client Client
|
|
|
|
|
- auth Auth
|
|
|
|
|
- logical Logical
|
|
|
|
|
- token Token
|
|
|
|
|
|
|
+ client util.Client
|
|
|
|
|
+ auth util.Auth
|
|
|
|
|
+ logical util.Logical
|
|
|
|
|
+ token util.Token
|
|
|
namespace string
|
|
namespace string
|
|
|
storeKind string
|
|
storeKind string
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func newVaultClient(c *vault.Config) (Client, error) {
|
|
|
|
|
|
|
+func NewVaultClient(c *vault.Config) (util.Client, error) {
|
|
|
cl, err := vault.NewClient(c)
|
|
cl, err := vault.NewClient(c)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return nil, err
|
|
return nil, err
|
|
@@ -212,20 +144,20 @@ func newVaultClient(c *vault.Config) (Client, error) {
|
|
|
auth := cl.Auth()
|
|
auth := cl.Auth()
|
|
|
logical := cl.Logical()
|
|
logical := cl.Logical()
|
|
|
token := cl.Auth().Token()
|
|
token := cl.Auth().Token()
|
|
|
- out := VClient{
|
|
|
|
|
- setToken: cl.SetToken,
|
|
|
|
|
- token: cl.Token,
|
|
|
|
|
- clearToken: cl.ClearToken,
|
|
|
|
|
- auth: auth,
|
|
|
|
|
- authToken: token,
|
|
|
|
|
- logical: logical,
|
|
|
|
|
- setNamespace: cl.SetNamespace,
|
|
|
|
|
- addHeader: cl.AddHeader,
|
|
|
|
|
- }
|
|
|
|
|
- return out, nil
|
|
|
|
|
|
|
+ out := util.VClient{
|
|
|
|
|
+ SetTokenFunc: cl.SetToken,
|
|
|
|
|
+ TokenFunc: cl.Token,
|
|
|
|
|
+ ClearTokenFunc: cl.ClearToken,
|
|
|
|
|
+ AuthField: auth,
|
|
|
|
|
+ AuthTokenField: token,
|
|
|
|
|
+ LogicalField: logical,
|
|
|
|
|
+ SetNamespaceFunc: cl.SetNamespace,
|
|
|
|
|
+ AddHeaderFunc: cl.AddHeader,
|
|
|
|
|
+ }
|
|
|
|
|
+ return &out, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func getVaultClient(c *connector, store esv1beta1.GenericStore, cfg *vault.Config) (Client, error) {
|
|
|
|
|
|
|
+func getVaultClient(c *Connector, store esv1beta1.GenericStore, cfg *vault.Config) (util.Client, error) {
|
|
|
isStaticToken := store.GetSpec().Provider.Vault.Auth.TokenSecretRef != nil
|
|
isStaticToken := store.GetSpec().Provider.Vault.Auth.TokenSecretRef != nil
|
|
|
useCache := enableCache && !isStaticToken
|
|
useCache := enableCache && !isStaticToken
|
|
|
|
|
|
|
@@ -241,7 +173,7 @@ func getVaultClient(c *connector, store esv1beta1.GenericStore, cfg *vault.Confi
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- client, err := c.newVaultClient(cfg)
|
|
|
|
|
|
|
+ client, err := c.NewVaultClient(cfg)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return nil, fmt.Errorf(errVaultClient, err)
|
|
return nil, fmt.Errorf(errVaultClient, err)
|
|
|
}
|
|
}
|
|
@@ -252,16 +184,15 @@ func getVaultClient(c *connector, store esv1beta1.GenericStore, cfg *vault.Confi
|
|
|
return client, nil
|
|
return client, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-type connector struct {
|
|
|
|
|
- newVaultClient func(c *vault.Config) (Client, error)
|
|
|
|
|
|
|
+type Connector struct {
|
|
|
|
|
+ NewVaultClient func(c *vault.Config) (util.Client, error)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// Capabilities return the provider supported capabilities (ReadOnly, WriteOnly, ReadWrite).
|
|
// Capabilities return the provider supported capabilities (ReadOnly, WriteOnly, ReadWrite).
|
|
|
-func (c *connector) Capabilities() esv1beta1.SecretStoreCapabilities {
|
|
|
|
|
|
|
+func (c *Connector) Capabilities() esv1beta1.SecretStoreCapabilities {
|
|
|
return esv1beta1.SecretStoreReadWrite
|
|
return esv1beta1.SecretStoreReadWrite
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
-func (c *connector) NewClient(ctx context.Context, store esv1beta1.GenericStore, kube kclient.Client, namespace string) (esv1beta1.SecretsClient, error) {
|
|
|
|
|
|
|
+func (c *Connector) NewClient(ctx context.Context, store esv1beta1.GenericStore, kube kclient.Client, namespace string) (esv1beta1.SecretsClient, error) {
|
|
|
// controller-runtime/client does not support TokenRequest or other subresource APIs
|
|
// controller-runtime/client does not support TokenRequest or other subresource APIs
|
|
|
// so we need to construct our own client and use it to fetch tokens
|
|
// so we need to construct our own client and use it to fetch tokens
|
|
|
// (for Kubernetes service account token auth)
|
|
// (for Kubernetes service account token auth)
|
|
@@ -277,32 +208,63 @@ func (c *connector) NewClient(ctx context.Context, store esv1beta1.GenericStore,
|
|
|
return c.newClient(ctx, store, kube, clientset.CoreV1(), namespace)
|
|
return c.newClient(ctx, store, kube, clientset.CoreV1(), namespace)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (c *connector) newClient(ctx context.Context, store esv1beta1.GenericStore, kube kclient.Client, corev1 typedcorev1.CoreV1Interface, namespace string) (esv1beta1.SecretsClient, error) {
|
|
|
|
|
|
|
+func (c *Connector) newClient(ctx context.Context, store esv1beta1.GenericStore, kube kclient.Client, corev1 typedcorev1.CoreV1Interface, namespace string) (esv1beta1.SecretsClient, error) {
|
|
|
storeSpec := store.GetSpec()
|
|
storeSpec := store.GetSpec()
|
|
|
if storeSpec == nil || storeSpec.Provider == nil || storeSpec.Provider.Vault == nil {
|
|
if storeSpec == nil || storeSpec.Provider == nil || storeSpec.Provider.Vault == nil {
|
|
|
return nil, errors.New(errVaultStore)
|
|
return nil, errors.New(errVaultStore)
|
|
|
}
|
|
}
|
|
|
vaultSpec := storeSpec.Provider.Vault
|
|
vaultSpec := storeSpec.Provider.Vault
|
|
|
|
|
|
|
|
|
|
+ vStore, cfg, err := c.prepareConfig(kube, corev1, vaultSpec, namespace, store.GetObjectKind().GroupVersionKind().Kind)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ client, err := getVaultClient(c, store, cfg)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, fmt.Errorf(errVaultClient, err)
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return c.initClient(ctx, vStore, client, cfg, vaultSpec)
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (c *Connector) NewGeneratorClient(ctx context.Context, kube kclient.Client, corev1 typedcorev1.CoreV1Interface, vaultSpec *esv1beta1.VaultProvider, namespace string) (util.Client, error) {
|
|
|
|
|
+ vStore, cfg, err := c.prepareConfig(kube, corev1, vaultSpec, namespace, "Generator")
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ client, err := c.NewVaultClient(cfg)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ _, err = c.initClient(ctx, vStore, client, cfg, vaultSpec)
|
|
|
|
|
+ if err != nil {
|
|
|
|
|
+ return nil, err
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return client, nil
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
|
|
+func (c *Connector) prepareConfig(kube kclient.Client, corev1 typedcorev1.CoreV1Interface, vaultSpec *esv1beta1.VaultProvider, namespace, storeKind string) (*client, *vault.Config, error) {
|
|
|
vStore := &client{
|
|
vStore := &client{
|
|
|
kube: kube,
|
|
kube: kube,
|
|
|
corev1: corev1,
|
|
corev1: corev1,
|
|
|
store: vaultSpec,
|
|
store: vaultSpec,
|
|
|
log: logger,
|
|
log: logger,
|
|
|
namespace: namespace,
|
|
namespace: namespace,
|
|
|
- storeKind: store.GetObjectKind().GroupVersionKind().Kind,
|
|
|
|
|
|
|
+ storeKind: storeKind,
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
cfg, err := vStore.newConfig()
|
|
cfg, err := vStore.newConfig()
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
- return nil, err
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- client, err := getVaultClient(c, store, cfg)
|
|
|
|
|
- if err != nil {
|
|
|
|
|
- return nil, fmt.Errorf(errVaultClient, err)
|
|
|
|
|
|
|
+ return nil, nil, err
|
|
|
}
|
|
}
|
|
|
|
|
+ return vStore, cfg, nil
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
|
|
+func (c *Connector) initClient(ctx context.Context, vStore *client, client util.Client, cfg *vault.Config, vaultSpec *esv1beta1.VaultProvider) (esv1beta1.SecretsClient, error) {
|
|
|
if vaultSpec.Namespace != nil {
|
|
if vaultSpec.Namespace != nil {
|
|
|
client.SetNamespace(*vaultSpec.Namespace)
|
|
client.SetNamespace(*vaultSpec.Namespace)
|
|
|
}
|
|
}
|
|
@@ -327,7 +289,7 @@ func (c *connector) newClient(ctx context.Context, store esv1beta1.GenericStore,
|
|
|
return vStore, nil
|
|
return vStore, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func (c *connector) ValidateStore(store esv1beta1.GenericStore) error {
|
|
|
|
|
|
|
+func (c *Connector) ValidateStore(store esv1beta1.GenericStore) error {
|
|
|
if store == nil {
|
|
if store == nil {
|
|
|
return fmt.Errorf(errInvalidStore)
|
|
return fmt.Errorf(errInvalidStore)
|
|
|
}
|
|
}
|
|
@@ -669,7 +631,7 @@ func (v *client) GetSecret(ctx context.Context, ref esv1beta1.ExternalSecretData
|
|
|
// actual keys to take precedence over gjson syntax
|
|
// actual keys to take precedence over gjson syntax
|
|
|
// (2): extract key from secret with property
|
|
// (2): extract key from secret with property
|
|
|
if _, ok := data[ref.Property]; ok {
|
|
if _, ok := data[ref.Property]; ok {
|
|
|
- return getTypedKey(data, ref.Property)
|
|
|
|
|
|
|
+ return GetTypedKey(data, ref.Property)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// (3): extract key from secret using gjson
|
|
// (3): extract key from secret using gjson
|
|
@@ -696,7 +658,7 @@ func (v *client) GetSecretMap(ctx context.Context, ref esv1beta1.ExternalSecretD
|
|
|
}
|
|
}
|
|
|
byteMap := make(map[string][]byte, len(secretData))
|
|
byteMap := make(map[string][]byte, len(secretData))
|
|
|
for k := range secretData {
|
|
for k := range secretData {
|
|
|
- byteMap[k], err = getTypedKey(secretData, k)
|
|
|
|
|
|
|
+ byteMap[k], err = GetTypedKey(secretData, k)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return nil, err
|
|
return nil, err
|
|
|
}
|
|
}
|
|
@@ -705,7 +667,7 @@ func (v *client) GetSecretMap(ctx context.Context, ref esv1beta1.ExternalSecretD
|
|
|
return byteMap, nil
|
|
return byteMap, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func getTypedKey(data map[string]interface{}, key string) ([]byte, error) {
|
|
|
|
|
|
|
+func GetTypedKey(data map[string]interface{}, key string) ([]byte, error) {
|
|
|
v, ok := data[key]
|
|
v, ok := data[key]
|
|
|
if !ok {
|
|
if !ok {
|
|
|
return nil, fmt.Errorf(errUnexpectedKey, key)
|
|
return nil, fmt.Errorf(errUnexpectedKey, key)
|
|
@@ -715,17 +677,23 @@ func getTypedKey(data map[string]interface{}, key string) ([]byte, error) {
|
|
|
return []byte(t), nil
|
|
return []byte(t), nil
|
|
|
case map[string]interface{}:
|
|
case map[string]interface{}:
|
|
|
return json.Marshal(t)
|
|
return json.Marshal(t)
|
|
|
|
|
+ case []string:
|
|
|
|
|
+ return []byte(strings.Join(t, "\n")), nil
|
|
|
case []byte:
|
|
case []byte:
|
|
|
return t, nil
|
|
return t, nil
|
|
|
// also covers int and float32 due to json.Marshal
|
|
// also covers int and float32 due to json.Marshal
|
|
|
case float64:
|
|
case float64:
|
|
|
return []byte(strconv.FormatFloat(t, 'f', -1, 64)), nil
|
|
return []byte(strconv.FormatFloat(t, 'f', -1, 64)), nil
|
|
|
|
|
+ case json.Number:
|
|
|
|
|
+ return []byte(t.String()), nil
|
|
|
|
|
+ case []interface{}:
|
|
|
|
|
+ return json.Marshal(t)
|
|
|
case bool:
|
|
case bool:
|
|
|
return []byte(strconv.FormatBool(t)), nil
|
|
return []byte(strconv.FormatBool(t)), nil
|
|
|
case nil:
|
|
case nil:
|
|
|
return []byte(nil), nil
|
|
return []byte(nil), nil
|
|
|
default:
|
|
default:
|
|
|
- return nil, errors.New(errSecretFormat)
|
|
|
|
|
|
|
+ return nil, fmt.Errorf(errSecretFormat, key, reflect.TypeOf(t))
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -1220,7 +1188,7 @@ func (v *client) serviceAccountToken(ctx context.Context, serviceAccountRef esme
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// checkToken does a lookup and checks if the provided token exists.
|
|
// checkToken does a lookup and checks if the provided token exists.
|
|
|
-func checkToken(ctx context.Context, token Token) (bool, error) {
|
|
|
|
|
|
|
+func checkToken(ctx context.Context, token util.Token) (bool, error) {
|
|
|
// https://www.vaultproject.io/api-docs/auth/token#lookup-a-token-self
|
|
// https://www.vaultproject.io/api-docs/auth/token#lookup-a-token-self
|
|
|
resp, err := token.LookupSelfWithContext(ctx)
|
|
resp, err := token.LookupSelfWithContext(ctx)
|
|
|
metrics.ObserveAPICall(metrics.ProviderHCVault, metrics.CallHCVaultLookupSelf, err)
|
|
metrics.ObserveAPICall(metrics.ProviderHCVault, metrics.CallHCVaultLookupSelf, err)
|
|
@@ -1238,7 +1206,7 @@ func checkToken(ctx context.Context, token Token) (bool, error) {
|
|
|
return true, nil
|
|
return true, nil
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
-func revokeTokenIfValid(ctx context.Context, client Client) error {
|
|
|
|
|
|
|
+func revokeTokenIfValid(ctx context.Context, client util.Client) error {
|
|
|
valid, err := checkToken(ctx, client.AuthToken())
|
|
valid, err := checkToken(ctx, client.AuthToken())
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
return fmt.Errorf(errVaultRevokeToken, err)
|
|
return fmt.Errorf(errVaultRevokeToken, err)
|
|
@@ -1441,7 +1409,7 @@ func init() {
|
|
|
fs.IntVar(&vaultTokenCacheSize, "experimental-vault-token-cache-size", 2<<17, "Maximum size of Vault token cache. When more tokens than Only used if --experimental-enable-vault-token-cache is set.")
|
|
fs.IntVar(&vaultTokenCacheSize, "experimental-vault-token-cache-size", 2<<17, "Maximum size of Vault token cache. When more tokens than Only used if --experimental-enable-vault-token-cache is set.")
|
|
|
lateInit := func() {
|
|
lateInit := func() {
|
|
|
logger.Info("initializing vault cache with size=%d", vaultTokenCacheSize)
|
|
logger.Info("initializing vault cache with size=%d", vaultTokenCacheSize)
|
|
|
- clientCache = cache.Must(vaultTokenCacheSize, func(client Client) {
|
|
|
|
|
|
|
+ clientCache = cache.Must(vaultTokenCacheSize, func(client util.Client) {
|
|
|
err := revokeTokenIfValid(context.Background(), client)
|
|
err := revokeTokenIfValid(context.Background(), client)
|
|
|
if err != nil {
|
|
if err != nil {
|
|
|
logger.Error(err, "unable to revoke cached token on eviction")
|
|
logger.Error(err, "unable to revoke cached token on eviction")
|
|
@@ -1453,8 +1421,8 @@ func init() {
|
|
|
Initialize: lateInit,
|
|
Initialize: lateInit,
|
|
|
})
|
|
})
|
|
|
|
|
|
|
|
- esv1beta1.Register(&connector{
|
|
|
|
|
- newVaultClient: newVaultClient,
|
|
|
|
|
|
|
+ esv1beta1.Register(&Connector{
|
|
|
|
|
+ NewVaultClient: NewVaultClient,
|
|
|
}, &esv1beta1.SecretStoreProvider{
|
|
}, &esv1beta1.SecretStoreProvider{
|
|
|
Vault: &esv1beta1.VaultProvider{},
|
|
Vault: &esv1beta1.VaultProvider{},
|
|
|
})
|
|
})
|