diff --git a/builder/scaleway/config.go b/builder/scaleway/config.go index 3f5277c24..a00897635 100644 --- a/builder/scaleway/config.go +++ b/builder/scaleway/config.go @@ -98,6 +98,8 @@ type Config struct { // available. // Deprecated, use Zone instead Region string `mapstructure:"region" required:"false"` + + Timeout string `mapstructure:"timeout" required:"false"` } func (c *Config) Prepare(raws ...interface{}) ([]string, error) { diff --git a/builder/scaleway/step_shutdown.go b/builder/scaleway/step_shutdown.go index 12365a482..0b96926a5 100644 --- a/builder/scaleway/step_shutdown.go +++ b/builder/scaleway/step_shutdown.go @@ -3,6 +3,7 @@ package scaleway import ( "context" "fmt" + "time" "github.com/hashicorp/packer-plugin-sdk/multistep" packersdk "github.com/hashicorp/packer-plugin-sdk/packer" @@ -30,9 +31,22 @@ func (s *stepShutdown) Run(ctx context.Context, state multistep.StateBag) multis return multistep.ActionHalt } - instanceResp, err := instanceAPI.WaitForServer(&instance.WaitForServerRequest{ + waitRequest := &instance.WaitForServerRequest{ ServerID: serverID, - }) + } + timeout := state.Get("timeout").(string) + duration, err := time.ParseDuration(timeout) + if err != nil { + err := fmt.Errorf("error: %s could not parse string %s as a duration", err, timeout) + state.Put("error", err) + ui.Error(err.Error()) + return multistep.ActionHalt + } + if timeout != "" { + waitRequest.Timeout = scw.TimeDurationPtr(duration) + } + + instanceResp, err := instanceAPI.WaitForServer(waitRequest) if err != nil { err := fmt.Errorf("Error shutting down server: %s", err) state.Put("error", err)