Просмотр исходного кода

SetSecretWillNotPushSameSecret

Signed-off-by: Lilly Daniell <lilly.daniell@engineerbetter.com>
Co-authored-by: William Young <will.young@engineerbetter.com>
Lilly Daniell 3 лет назад
Родитель
Сommit
dcd66eb625

+ 8 - 1
pkg/provider/aws/secretsmanager/secretsmanager.go

@@ -19,6 +19,7 @@ import (
 	"encoding/json"
 	"errors"
 	"fmt"
+	"reflect"
 	"strings"
 
 	"github.com/aws/aws-sdk-go/aws"
@@ -122,7 +123,13 @@ func (sm *SecretsManager) SetSecret(ctx context.Context, value []byte, remoteRef
 	secretValue := awssm.GetSecretValueInput{
 		SecretId: &secretName,
 	}
-	_, err := sm.client.GetSecretValueWithContext(ctx, &secretValue)
+
+	awsSecret, err := sm.client.GetSecretValueWithContext(ctx, &secretValue)
+	fmt.Println(awsSecret)
+
+	if awsSecret != nil &&  reflect.DeepEqual(awsSecret.SecretBinary, secretRequest.SecretBinary) {
+		return nil
+	}
 
 	if reqerr, ok := err.(RequestFailure); ok {
 		if reqerr.StatusCode() == 400 {

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

@@ -331,6 +331,7 @@ func (f fakeRef) GetRemoteKey() string {
 
 func TestSetSecret(t *testing.T) {
 	secretName := "fake-key"
+	secretValue := []byte("fake-value")
 	noPermission := errors.New("no permission")
 	versionID := "384898A7-A5AE-4775-A08D-B417B059ED11"
 	versionStages := "AWSCURRENT"
@@ -346,6 +347,13 @@ func TestSetSecret(t *testing.T) {
 		VersionStages: versionOutput,
 	}
 
+	secretValueOutput2 := &awssm.GetSecretValueOutput{
+		Name:          &secretName,
+		VersionId:     &versionID,
+		VersionStages: versionOutput,
+		SecretBinary:  secretValue,
+	}
+
 	notFoundErr := &awssm.ResourceExistsException{
 		RespMetadata: protocol.ResponseMetadata{
 			StatusCode: 400,
@@ -417,6 +425,18 @@ func TestSetSecret(t *testing.T) {
 				err: noPermission,
 			},
 		},
+		"SetSecretWillNotPushSameSecret": {
+			reason: "secret with the same value will not be pushed",
+			args: args{
+				store: makeValidSecretStore().Spec.Provider.AWS,
+				client: fakesm.Client{
+					GetSecretValueWithContextFn: fakesm.NewGetSecretValueWithContextFn(secretValueOutput2, nil),
+				},
+			},
+			want: want{
+				err: nil,
+			},
+		},
 	}
 
 	for name, tc := range tests {