ソースを参照

WIP: SetSecret checks if secret key exists

Signed-off-by: Adrienne Galloway <adrienne.galloway@engineerbetter.com>
Co-authored-by: Dominic Meddick <dom.meddick@engineerbetter.com>
Co-authored-by: William Young <will.young@engineerbetter.com>
Co-authored-by: Amr Fawzy <amr.fawzy@container-solutions.com>
Co-authored-by: Lilly Daniell <lilly.daniell@engineerbetter.com>
Co-authored-by: Marcus Dantas <Marcus.dantas@engineerbetter.com>
Adrienne Galloway 3 年 前
コミット
a0835482df
2 ファイル変更32 行追加9 行削除
  1. 7 9
      pkg/provider/vault/vault.go
  2. 25 0
      pkg/provider/vault/vault_test.go

+ 7 - 9
pkg/provider/vault/vault.go

@@ -371,20 +371,18 @@ func (v *client) SetSecret(ctx context.Context, value []byte, remoteRef esv1beta
 
 
 	_, err := v.GetSecret(ctx, esv1beta1.ExternalSecretDataRemoteRef{Key: path})
 	_, err := v.GetSecret(ctx, esv1beta1.ExternalSecretDataRemoteRef{Key: path})
 
 
-	var vaultErr *vault.ResponseError
+	if err == nil {
+		return errors.New("cannot push - secret already exists")
+	}
+	
+	pError := err.Error()
 
 
-	if errors.As(err, &vaultErr) {
-		if err != nil && vaultErr.StatusCode == 404 {
-			_, err = v.logical.WriteWithContext(ctx, path, secretData)
-			if err != nil {
-				return err
-			}
-		}
+	if pError == "secret not found" {
+		_, err = v.logical.WriteWithContext(ctx, path, secretData)
 		if err != nil {
 		if err != nil {
 			return err
 			return err
 		}
 		}
 	}
 	}
-
 	return nil
 	return nil
 }
 }
 
 

+ 25 - 0
pkg/provider/vault/vault_test.go

@@ -1441,3 +1441,28 @@ func TestSetSecret(t *testing.T) {
 
 
 	assert.Equal(t, err, nil)
 	assert.Equal(t, err, nil)
 }
 }
+
+func TestSetSecretUpdate(t *testing.T) {
+    // if an identical secret is found (ie not 404) throw error
+    path := "secret"
+    secretData := map[string]interface{}{
+        "data": map[string]interface{}{
+            "fake key": "fake value",
+        },
+    }
+    client1 := client{
+        store: &esv1beta1.VaultProvider{
+            Path: &path,
+        },
+        logical: fake.Logical{
+            WriteWithContextFn: fake.NewWriteWithContextFn(secretData, fmt.Errorf("error")),
+            ReadWithDataWithContextFn: fake.NewReadWithContextFn(secretData, fmt.Errorf("error can't read data")),
+        },
+    }
+    ref := fakeRef{key: "I'm a key"}
+	
+    err := client1.SetSecret(context.Background(), []byte("HI"), ref)
+    err = client1.SetSecret(context.Background(), []byte("HI"), ref)
+
+    assert.Equal(t, err, "not equal to nil")
+}