소스 검색

Improved Tags to string mechanism

Signed-off-by: Sebastián Gómez <sebastiangomezcorrea@gmail.com>
Sebastián Gómez 3 년 전
부모
커밋
1ddce0733a
2개의 변경된 파일20개의 추가작업 그리고 11개의 파일을 삭제
  1. 13 7
      pkg/provider/aws/secretsmanager/secretsmanager.go
  2. 7 4
      pkg/provider/aws/secretsmanager/secretsmanager_test.go

+ 13 - 7
pkg/provider/aws/secretsmanager/secretsmanager.go

@@ -109,11 +109,15 @@ func (sm *SecretsManager) fetch(ctx context.Context, ref esv1beta1.ExternalSecre
 		}
 		log.Info("found metadata secret", "key", ref.Key, "output", descOutput)
 
+		jsonTags, err := TagsToJSONString(descOutput.Tags)
+		if err != nil {
+			return nil, err
+		}
 		secretOut = &awssm.GetSecretValueOutput{
 			ARN:          descOutput.ARN,
 			CreatedDate:  descOutput.CreatedDate,
 			Name:         descOutput.Name,
-			SecretString: TagsToJSONString(descOutput.Tags),
+			SecretString: &jsonTags,
 			VersionId:    &ver,
 		}
 	} else {
@@ -144,16 +148,18 @@ func (sm *SecretsManager) fetch(ctx context.Context, ref esv1beta1.ExternalSecre
 	return secretOut, nil
 }
 
-func TagsToJSONString(tags []*awssm.Tag) *string {
-	jsonString := "{"
+func TagsToJSONString(tags []*awssm.Tag) (string, error) {
+	tagMap := make(map[string]string, len(tags))
 	for _, tag := range tags {
-		jsonString += "\"" + *tag.Key + "\":\"" + *tag.Value + "\","
+		tagMap[*tag.Key] = *tag.Value
 	}
 
-	jsonString = strings.TrimSuffix(jsonString, ",")
-	jsonString += "}"
+	byteArr, err := json.Marshal(tagMap)
+	if err != nil {
+		return "", err
+	}
 
-	return &jsonString
+	return string(byteArr[:]), nil
 }
 
 func (sm *SecretsManager) DeleteSecret(ctx context.Context, remoteRef esv1beta1.PushRemoteRef) error {

+ 7 - 4
pkg/provider/aws/secretsmanager/secretsmanager_test.go

@@ -187,8 +187,9 @@ func TestSecretsManagerGetSecret(t *testing.T) {
 			Tags: getTagSlice(),
 		}
 		smtc.fakeClient.DescribeSecretWithContextFn = fakesm.NewDescribeSecretWithContextFn(describeSecretOutput, nil)
-		smtc.apiOutput.SecretString = TagsToJSONString(getTagSlice())
-		smtc.expectedSecret = *TagsToJSONString(getTagSlice())
+		jsonTags, _ := TagsToJSONString(getTagSlice())
+		smtc.apiOutput.SecretString = &jsonTags
+		smtc.expectedSecret = jsonTags
 	}
 
 	fetchMetadataProperty := func(smtc *secretsManagerTestCase) {
@@ -198,7 +199,8 @@ func TestSecretsManagerGetSecret(t *testing.T) {
 		}
 		smtc.fakeClient.DescribeSecretWithContextFn = fakesm.NewDescribeSecretWithContextFn(describeSecretOutput, nil)
 		smtc.remoteRef.Property = tagname2
-		smtc.apiOutput.SecretString = TagsToJSONString(getTagSlice())
+		jsonTags, _ := TagsToJSONString(getTagSlice())
+		smtc.apiOutput.SecretString = &jsonTags
 		smtc.expectedSecret = tagvalue2
 	}
 
@@ -209,7 +211,8 @@ func TestSecretsManagerGetSecret(t *testing.T) {
 		}
 		smtc.fakeClient.DescribeSecretWithContextFn = fakesm.NewDescribeSecretWithContextFn(describeSecretOutput, nil)
 		smtc.remoteRef.Property = "fail"
-		smtc.apiOutput.SecretString = TagsToJSONString(getTagSlice())
+		jsonTags, _ := TagsToJSONString(getTagSlice())
+		smtc.apiOutput.SecretString = &jsonTags
 		smtc.expectError = "key fail does not exist in secret /baz"
 	}