diff --git a/builder/scaleway/builder.go b/builder/scaleway/builder.go
index <HASH>..<HASH> 100644
--- a/builder/scaleway/builder.go
+++ b/builder/scaleway/builder.go
@@ -4,6 +4,7 @@
 package scaleway
 
 import (
+	"errors"
 	"fmt"
 	"log"
 
@@ -64,16 +65,24 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
 		new(stepImage),
 	}
 
-	b.runner = common.NewRunner(steps, b.config.PackerConfig, ui)
+	b.runner = common.NewRunnerWithPauseFn(steps, b.config.PackerConfig, ui, state)
 	b.runner.Run(state)
 
 	if rawErr, ok := state.GetOk("error"); ok {
 		return nil, rawErr.(error)
 	}
 
+	// If we were interrupted or cancelled, then just exit.
+	if _, ok := state.GetOk(multistep.StateCancelled); ok {
+		return nil, errors.New("Build was cancelled.")
+	}
+
+	if _, ok := state.GetOk(multistep.StateHalted); ok {
+		return nil, errors.New("Build was halted.")
+	}
+
 	if _, ok := state.GetOk("snapshot_name"); !ok {
-		log.Println("Failed to find snapshot_name in state. Bug?")
-		return nil, nil
+		return nil, errors.New("Cannot find snapshot_name in state.")
 	}
 
 	artifact := &Artifact{
builder/scaleway: Make use of NewRunnerWithPauseFn