Browse Source

Add SetSecret logic + start of test

Signed-off-by: William Young <will.young@engineerbetter.com>
Co-authored-by: Adrienne Galloway <adrienne.galloway@engineerbetter.com>
Co-authored-by: Dominic Meddick <dom.meddick@engineerbetter.com>
William Young 3 years ago
parent
commit
5a96ee6ad3

+ 15 - 2
pkg/provider/aws/secretsmanager/secretsmanager.go

@@ -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 (
@@ -107,7 +109,18 @@ func (sm *SecretsManager) fetch(_ context.Context, ref esv1beta1.ExternalSecretD
 
 // 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,
+	}
+
+	secretOutput, err := sm.client.CreateSecretWithContext(ctx, &secretRequest)
+	fmt.Println(secretOutput)
+	if err != nil {
+		return err
+	}
+	return nil
 }
 
 // GetAllSecrets syncs multiple secrets from aws provider into a single Kubernetes Secret.
@@ -314,4 +327,4 @@ func (sm *SecretsManager) Validate() (esv1beta1.ValidationResult, error) {
 
 func (sm *SecretsManager) Capabilities() esv1beta1.SecretStoreCapabilities {
 	return esv1beta1.SecretStoreReadOnly
-}
+}

+ 14 - 0
pkg/provider/aws/secretsmanager/secretsmanager_test.go

@@ -316,3 +316,17 @@ func ErrorContains(out error, want string) bool {
 	}
 	return strings.Contains(out.Error(), want)
 }
+
+type fakeRef struct {
+	key string
+}
+
+func (f fakeRef) GetRemoteKey() string {
+	return f.key
+}
+
+func TestSetSecret(t *testing.T) {
+	sm := SecretsManager{}
+	ref := fakeRef{key: "I'm a key"}
+	sm.SetSecret(context.Background(), []byte("HI"), ref)
+}