Skip to content

Commit

Permalink
Merge pull request #149 from maveonair/instance-file-upload
Browse files Browse the repository at this point in the history
Fix: Ensure that the instance is running before we upload files
  • Loading branch information
stgraber authored Oct 26, 2024
2 parents 0be8af2 + a81ad7e commit 24fad25
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 18 deletions.
37 changes: 19 additions & 18 deletions internal/instance/resource_instance.go
Original file line number Diff line number Diff line change
Expand Up @@ -428,24 +428,8 @@ func (r InstanceResource) Create(ctx context.Context, req resource.CreateRequest
return
}

// Upload files.
if !plan.Files.IsNull() && !plan.Files.IsUnknown() {
files, diags := common.ToFileMap(ctx, plan.Files)
if diags.HasError() {
resp.Diagnostics.Append(diags...)
return
}

for _, f := range files {
err := common.InstanceFileUpload(server, instanceName, f)
if err != nil {
resp.Diagnostics.AddError(fmt.Sprintf("Failed to upload file to instance %q", instanceName), err.Error())
return
}
}
}

if plan.Running.ValueBool() {
// We must ensure that the instance is running before we can upload files.
if plan.Running.ValueBool() || (!plan.Files.IsNull() && !plan.Files.IsUnknown()) {
diag := startInstance(ctx, server, instanceName)
if diag != nil {
resp.Diagnostics.Append(diag)
Expand All @@ -463,6 +447,23 @@ func (r InstanceResource) Create(ctx context.Context, req resource.CreateRequest
}
}

// Upload files.
if !plan.Files.IsNull() && !plan.Files.IsUnknown() {
files, diags := common.ToFileMap(ctx, plan.Files)
if diags.HasError() {
resp.Diagnostics.Append(diags...)
return
}

for _, f := range files {
err := common.InstanceFileUpload(server, instanceName, f)
if err != nil {
resp.Diagnostics.AddError(fmt.Sprintf("Failed to upload file to instance %q", instanceName), err.Error())
return
}
}
}

// Update Terraform state.
diags = r.SyncState(ctx, &resp.State, server, plan)
resp.Diagnostics.Append(diags...)
Expand Down
46 changes: 46 additions & 0 deletions internal/instance/resource_instance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -551,6 +551,30 @@ func TestAccInstance_fileUploadContent(t *testing.T) {
})
}

func TestAccInstance_fileUploadContent_VM(t *testing.T) {
instanceName := petname.Generate(2, "-")

resource.Test(t, resource.TestCase{
PreCheck: func() { acctest.PreCheck(t) },
ProtoV6ProviderFactories: acctest.ProtoV6ProviderFactories,
Steps: []resource.TestStep{
{
Config: testAccInstance_fileUploadContent_VM(instanceName),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("incus_instance.instance1", "name", instanceName),
resource.TestCheckResourceAttr("incus_instance.instance1", "type", "virtual-machine"),
resource.TestCheckResourceAttr("incus_instance.instance1", "status", "Running"),
resource.TestCheckResourceAttr("incus_instance.instance1", "file.#", "1"),
resource.TestCheckResourceAttr("incus_instance.instance1", "file.0.mode", "0777"),
resource.TestCheckResourceAttr("incus_instance.instance1", "file.0.content", "Hello from VM!\n"),
resource.TestCheckResourceAttr("incus_instance.instance1", "file.0.target_path", "/foo/bar.txt"),
resource.TestCheckResourceAttr("incus_instance.instance1", "file.0.create_directories", "true"),
),
},
},
})
}

func TestAccInstance_fileUploadSource(t *testing.T) {
instanceName := petname.Generate(2, "-")

Expand Down Expand Up @@ -1220,6 +1244,28 @@ resource "incus_instance" "instance1" {
`, name, acctest.TestImage)
}

func testAccInstance_fileUploadContent_VM(name string) string {
return fmt.Sprintf(`
resource "incus_instance" "instance1" {
name = "%s"
image = "%s"
type = "virtual-machine"
config = {
# Alpine images do not support secureboot.
"security.secureboot" = false
}
file {
content = "Hello from VM!\n"
target_path = "/foo/bar.txt"
mode = "0777"
create_directories = true
}
}
`, name, acctest.TestImage)
}

func testAccInstance_fileUploadSource(name string) string {
return fmt.Sprintf(`
resource "incus_instance" "instance1" {
Expand Down

0 comments on commit 24fad25

Please sign in to comment.