|
|
@@ -22,6 +22,7 @@ import (
|
|
|
"strings"
|
|
|
|
|
|
"github.com/aws/aws-sdk-go/aws"
|
|
|
+ "github.com/aws/aws-sdk-go/aws/request"
|
|
|
"github.com/aws/aws-sdk-go/aws/session"
|
|
|
awssm "github.com/aws/aws-sdk-go/service/secretsmanager"
|
|
|
"github.com/tidwall/gjson"
|
|
|
@@ -49,6 +50,7 @@ type SecretsManager struct {
|
|
|
type SMInterface interface {
|
|
|
GetSecretValue(*awssm.GetSecretValueInput) (*awssm.GetSecretValueOutput, error)
|
|
|
ListSecrets(*awssm.ListSecretsInput) (*awssm.ListSecretsOutput, error)
|
|
|
+ CreateSecretWithContext(aws.Context, *awssm.CreateSecretInput, ...request.Option) (*awssm.CreateSecretOutput, error)
|
|
|
}
|
|
|
|
|
|
const (
|
|
|
@@ -105,9 +107,19 @@ func (sm *SecretsManager) fetch(_ context.Context, ref esv1beta1.ExternalSecretD
|
|
|
return secretOut, nil
|
|
|
}
|
|
|
|
|
|
-// Not Implemented SetSecret.
|
|
|
func (sm *SecretsManager) SetSecret(ctx context.Context, value []byte, remoteRef esv1beta1.PushRemoteRef) error {
|
|
|
- return fmt.Errorf("not implemented")
|
|
|
+ secretName := remoteRef.GetRemoteKey()
|
|
|
+ secretRequest := awssm.CreateSecretInput{
|
|
|
+ Name: &secretName,
|
|
|
+ SecretBinary: value,
|
|
|
+ }
|
|
|
+
|
|
|
+ _, err := sm.client.CreateSecretWithContext(ctx, &secretRequest)
|
|
|
+
|
|
|
+ if err != nil {
|
|
|
+ return err
|
|
|
+ }
|
|
|
+ return nil
|
|
|
}
|
|
|
|
|
|
// GetAllSecrets syncs multiple secrets from aws provider into a single Kubernetes Secret.
|
|
|
@@ -311,3 +323,7 @@ func (sm *SecretsManager) Validate() (esv1beta1.ValidationResult, error) {
|
|
|
}
|
|
|
return esv1beta1.ValidationResultReady, nil
|
|
|
}
|
|
|
+
|
|
|
+func (sm *SecretsManager) Capabilities() esv1beta1.SecretStoreCapabilities {
|
|
|
+ return esv1beta1.SecretStoreReadOnly
|
|
|
+}
|