diff --git a/fwprovider/test/resource_file_test.go b/fwprovider/test/resource_file_test.go index 1600cd94..6ab688c5 100644 --- a/fwprovider/test/resource_file_test.go +++ b/fwprovider/test/resource_file_test.go @@ -200,7 +200,27 @@ func TestAccResourceFile(t *testing.T) { "id": fmt.Sprintf("local:snippets/%s", filepath.Base(snippetFile2)), }), }, - // Update testing + // Update testing: no original file + { + PreConfig: func() { + _ = os.Remove(snippetFile2) + deleteSnippet(te, filepath.Base(snippetFile1)) + }, + Config: te.RenderConfig(` + resource "proxmox_virtual_environment_file" "test" { + datastore_id = "local" + node_name = "{{.NodeName}}" + source_file { + path = "{{.SnippetFile1}}" + } + }`), + Check: ResourceAttributes("proxmox_virtual_environment_file.test", map[string]string{ + "content_type": "snippets", + "file_name": filepath.Base(snippetFile1), + "id": fmt.Sprintf("local:snippets/%s", filepath.Base(snippetFile1)), + }), + }, + // Update testing: original file { PreConfig: func() { deleteSnippet(te, filepath.Base(snippetFile1)) diff --git a/proxmoxtf/resource/file.go b/proxmoxtf/resource/file.go index 3e62558b..ed6d9f60 100644 --- a/proxmoxtf/resource/file.go +++ b/proxmoxtf/resource/file.go @@ -793,12 +793,15 @@ func fileRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.D fileModificationDate, fileSize, fileTag, err := readFileAttrs(ctx, sourceFilePath) diags = append(diags, diag.FromErr(err)...) - err = d.Set(mkResourceVirtualEnvironmentFileFileModificationDate, fileModificationDate) - diags = append(diags, diag.FromErr(err)...) - err = d.Set(mkResourceVirtualEnvironmentFileFileSize, fileSize) - diags = append(diags, diag.FromErr(err)...) - err = d.Set(mkResourceVirtualEnvironmentFileFileTag, fileTag) - diags = append(diags, diag.FromErr(err)...) + if fileModificationDate != "" || fileSize != 0 || fileTag != "" { + // only when file from state exists + err = d.Set(mkResourceVirtualEnvironmentFileFileModificationDate, fileModificationDate) + diags = append(diags, diag.FromErr(err)...) + err = d.Set(mkResourceVirtualEnvironmentFileFileSize, fileSize) + diags = append(diags, diag.FromErr(err)...) + err = d.Set(mkResourceVirtualEnvironmentFileFileTag, fileTag) + diags = append(diags, diag.FromErr(err)...) + } lastFileMD := d.Get(mkResourceVirtualEnvironmentFileFileModificationDate).(string) lastFileSize := int64(d.Get(mkResourceVirtualEnvironmentFileFileSize).(int)) @@ -837,6 +840,10 @@ func readFile( ) (fileModificationDate string, fileSize int64, fileTag string, err error) { f, err := os.Open(sourceFilePath) if err != nil { + if os.IsNotExist(err) { + // File does not exist, return zero values and no error + return "", 0, "", nil + } return }