Skip to content

Commit

Permalink
refactor: vol upload from local path extracted to separate func
Browse files Browse the repository at this point in the history
  • Loading branch information
thomasklein94 committed May 17, 2023
1 parent 2b04fc0 commit d45f132
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 51 deletions.
53 changes: 2 additions & 51 deletions builder/libvirt/volume/cloudinit.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@ package volume

import (
"fmt"
"log"
"os"

"github.com/hashicorp/packer-plugin-sdk/multistep"
"github.com/hashicorp/packer-plugin-sdk/multistep/commonsteps"
Expand Down Expand Up @@ -89,7 +87,6 @@ func (vs *CloudInitSource) PrepareVolume(pctx *PreparationContext) multistep.Ste
createStep.Content["network-config"] = *vs.NetworkConfig
}

// tempState := new(multistep.StateBag)
tempState := &multistep.BasicStateBag{}
tempState.Put("ui", pctx.Ui)

Expand All @@ -104,53 +101,7 @@ func (vs *CloudInitSource) PrepareVolume(pctx *PreparationContext) multistep.Ste
}
cdPath := tempState.Get("cd_path").(string)

fPtr, err := os.Open(cdPath)
if err != nil {
pctx.HaltOnError(err, "CloudInit.Open: %s", err)
}

fInfo, err := fPtr.Stat()
if err != nil {
pctx.HaltOnError(err, "CloudInit.Stat: %s", err)
}

size := uint64(fInfo.Size())
pctx.VolumeDefinition.Capacity = &libvirtxml.StorageVolumeSize{
Value: size,
Unit: "B",
}
// If omitted when creating a volume, the volume will be fully allocated at time of creation.
pctx.VolumeDefinition.Allocation = nil

err = pctx.CreateVolume()
if err != nil {
return pctx.HaltOnError(err, "%s", err)
}

err = pctx.Driver.StorageVolUpload(*pctx.VolumeRef, fPtr, 0, size, 0)

if err != nil {
connectUri, _ := pctx.Driver.ConnectGetUri()

// The test backend does not support Volume Uploads, so
if connectUri[0:4] == "test" {
pctx.Ui.Error(fmt.Sprintf("CloudInit.Upload: %s", err))
} else {
return pctx.HaltOnError(err, "CloudInit.Upload: %s", err)
}
}

err = pctx.RefreshVolumeDefinition()

if err != nil {
log.Printf("Error while refreshing volume definition: %s\n", err)
}

if err := fPtr.Close(); err != nil {
log.Println("Error closing CD stream")
}

createStep.Cleanup(tempState)
defer createStep.Cleanup(tempState)

return multistep.ActionContinue
return pctx.uploadVolume(cdPath)
}
50 changes: 50 additions & 0 deletions builder/libvirt/volume/preparation_context.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import (
"context"
"fmt"
"log"
"os"

"github.com/digitalocean/go-libvirt"
"github.com/hashicorp/packer-plugin-sdk/multistep"
Expand Down Expand Up @@ -91,6 +92,55 @@ func (pctx *PreparationContext) RefreshVolumeDefinition() error {
return nil
}

func (pctx *PreparationContext) uploadVolume(path string) multistep.StepAction {

fPtr, err := os.Open(path)
if err != nil {
pctx.HaltOnError(err, "UploadVolume.Open: %s", err)
}

defer fPtr.Close()

fInfo, err := fPtr.Stat()
if err != nil {
pctx.HaltOnError(err, "UploadVolume.Stat: %s", err)
}

size := uint64(fInfo.Size())
pctx.VolumeDefinition.Capacity = &libvirtxml.StorageVolumeSize{
Value: size,
Unit: "B",
}
// If omitted when creating a volume, the volume will be fully allocated at time of creation.
pctx.VolumeDefinition.Allocation = nil

err = pctx.CreateVolume()
if err != nil {
return pctx.HaltOnError(err, "%s", err)
}

err = pctx.Driver.StorageVolUpload(*pctx.VolumeRef, fPtr, 0, size, 0)

if err != nil {
connectUri, _ := pctx.Driver.ConnectGetUri()

// The test backend does not support Volume Uploads, so
if connectUri[0:4] == "test" {
pctx.Ui.Error(fmt.Sprintf("UploadVolume.Upload: %s", err))
} else {
return pctx.HaltOnError(err, "UploadVolume.Upload: %s", err)
}
}

err = pctx.RefreshVolumeDefinition()

if err != nil {
log.Printf("Error while refreshing volume definition: %s\n", err)
}

return multistep.ActionContinue
}

func (pctx *PreparationContext) HaltOnError(err error, s string, a ...interface{}) multistep.StepAction {
err2 := fmt.Errorf(s, a...)
pctx.State.Put("error", err2)
Expand Down

0 comments on commit d45f132

Please sign in to comment.