diff --git a/vault/resource_generic_secret.go b/vault/resource_generic_secret.go index 4f659b37cc..04119f1f13 100644 --- a/vault/resource_generic_secret.go +++ b/vault/resource_generic_secret.go @@ -146,6 +146,11 @@ func genericSecretResourceRead(d *schema.ResourceData, meta interface{}) error { if err != nil { return fmt.Errorf("error reading from Vault: %s", err) } + if secret == nil { + log.Printf("[WARN] secret (%s) not found, removing from state", path) + d.SetId("") + return nil + } log.Printf("[DEBUG] secret: %#v", secret) diff --git a/vault/resource_generic_secret_test.go b/vault/resource_generic_secret_test.go index 2640b83011..03131bf4f8 100644 --- a/vault/resource_generic_secret_test.go +++ b/vault/resource_generic_secret_test.go @@ -28,6 +28,31 @@ func TestResourceGenericSecret(t *testing.T) { }) } +func TestResourceGenericSecret_deleted(t *testing.T) { + path := acctest.RandomWithPrefix("secret/test") + resource.Test(t, resource.TestCase{ + Providers: testProviders, + PreCheck: func() { testAccPreCheck(t) }, + Steps: []resource.TestStep{ + resource.TestStep{ + Config: testResourceGenericSecret_initialConfig(path), + Check: testResourceGenericSecret_initialCheck(path), + }, + resource.TestStep{ + PreConfig: func() { + client := testProvider.Meta().(*api.Client) + _, err := client.Logical().Delete(path) + if err != nil { + t.Fatalf("unable to manually delete the secret via the SDK: %s", err) + } + }, + Config: testResourceGenericSecret_initialConfig(path), + Check: testResourceGenericSecret_initialCheck(path), + }, + }, + }) +} + func testResourceGenericSecret_initialConfig(path string) string { return fmt.Sprintf(` resource "vault_generic_secret" "test" {