0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-07-01 02:52:58 +00:00

fix(file): handle missing file on state refresh (#649)

* fix(file): handle missing file on state refresh

---------

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
This commit is contained in:
Pavel Boldyrev 2023-10-24 22:22:13 -04:00 committed by GitHub
parent a30f96c348
commit 2a56c23f52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 24 deletions

View File

@ -17,6 +17,7 @@ import (
"testing"
"github.com/brianvoe/gofakeit/v6"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
"github.com/stretchr/testify/require"
@ -26,6 +27,7 @@ import (
)
const (
accTestFileRawName = "proxmox_virtual_environment_file.test_raw"
accTestFileName = "proxmox_virtual_environment_file.test"
)
@ -94,8 +96,11 @@ func TestAccResourceFile(t *testing.T) {
},
// Update testing
{
Config: testAccResourceFileSnippetRawUpdatedConfig(snippetRaw),
Check: testAccResourceFileSnippetUpdatedCheck(snippetRaw),
PreConfig: func() {
deleteSnippet(t, filepath.Base(snippetFile1.Name()))
},
Config: testAccResourceFileSnippetUpdateConfig(snippetFile1.Name()),
Check: testAccResourceFileSnippetUpdatedCheck(snippetFile1.Name()),
},
// ImportState testing
{
@ -165,9 +170,16 @@ func createFile(t *testing.T, namePattern string, content string) *os.File {
return f
}
func deleteSnippet(t *testing.T, fname string) {
t.Helper()
err := getNodesClient().DeleteDatastoreFile(context.Background(), "local", fmt.Sprintf("snippets/%s", fname))
require.NoError(t, err)
}
func testAccResourceFileSnippetRawCreatedConfig(fname string) string {
return fmt.Sprintf(`
resource "proxmox_virtual_environment_file" "test" {
resource "proxmox_virtual_environment_file" "test_raw" {
content_type = "snippets"
datastore_id = "local"
node_name = "%s"
@ -223,11 +235,11 @@ resource "proxmox_virtual_environment_file" "test" {
func testAccResourceFileSnippetRawCreatedCheck(fname string) resource.TestCheckFunc {
return resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(accTestFileName, "content_type", "snippets"),
resource.TestCheckResourceAttr(accTestFileName, "file_name", fname),
resource.TestCheckResourceAttr(accTestFileName, "source_raw.0.file_name", fname),
resource.TestCheckResourceAttr(accTestFileName, "source_raw.0.data", "test snippet\n"),
resource.TestCheckResourceAttr(accTestFileName, "id", fmt.Sprintf("local:snippets/%s", fname)),
resource.TestCheckResourceAttr(accTestFileRawName, "content_type", "snippets"),
resource.TestCheckResourceAttr(accTestFileRawName, "file_name", fname),
resource.TestCheckResourceAttr(accTestFileRawName, "source_raw.0.file_name", fname),
resource.TestCheckResourceAttr(accTestFileRawName, "source_raw.0.data", "test snippet\n"),
resource.TestCheckResourceAttr(accTestFileRawName, "id", fmt.Sprintf("local:snippets/%s", fname)),
)
}
@ -239,19 +251,13 @@ func testAccResourceFileCreatedCheck(ctype string, fname string) resource.TestCh
)
}
func testAccResourceFileSnippetRawUpdatedConfig(fname string) string {
func testAccResourceFileSnippetUpdateConfig(fname string) string {
return fmt.Sprintf(`
resource "proxmox_virtual_environment_file" "test" {
content_type = "snippets"
datastore_id = "local"
node_name = "%s"
source_raw {
data = <<EOF
test snippet - updated
EOF
file_name = "%s"
source_file {
path = "%s"
}
}
`, accTestNodeName, fname)
@ -260,9 +266,7 @@ test snippet - updated
func testAccResourceFileSnippetUpdatedCheck(fname string) resource.TestCheckFunc {
return resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr(accTestFileName, "content_type", "snippets"),
resource.TestCheckResourceAttr(accTestFileName, "file_name", fname),
resource.TestCheckResourceAttr(accTestFileName, "source_raw.0.file_name", fname),
resource.TestCheckResourceAttr(accTestFileName, "source_raw.0.data", "test snippet - updated\n"),
resource.TestCheckResourceAttr(accTestFileName, "id", fmt.Sprintf("local:snippets/%s", fname)),
resource.TestCheckResourceAttr(accTestFileName, "file_name", filepath.Base(fname)),
resource.TestCheckResourceAttr(accTestFileName, "id", fmt.Sprintf("local:%s/%s", "snippets", filepath.Base(fname))),
)
}

View File

@ -780,8 +780,9 @@ func fileRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.D
}
if !found {
diags = append(diags, diag.Errorf("no such file: %q", d.Id())...)
return diags
// an empty ID is used to signal that the resource does not exist when provider reads the state
// back after creation, or on the state refresh.
d.SetId("")
}
return nil