Use Context of run method and allow users to cancel the build
This commit is contained in:
parent
cc2267fd2a
commit
633934369c
|
@ -50,7 +50,7 @@ func (s *stepCreateServer) Run(ctx context.Context, state multistep.StateBag) mu
|
||||||
sshKeys = append(sshKeys, sshKey)
|
sshKeys = append(sshKeys, sshKey)
|
||||||
}
|
}
|
||||||
|
|
||||||
serverCreateResult, _, err := client.Server.Create(context.TODO(), hcloud.ServerCreateOpts{
|
serverCreateResult, _, err := client.Server.Create(ctx, hcloud.ServerCreateOpts{
|
||||||
Name: c.ServerName,
|
Name: c.ServerName,
|
||||||
ServerType: &hcloud.ServerType{Name: c.ServerType},
|
ServerType: &hcloud.ServerType{Name: c.ServerType},
|
||||||
Image: &hcloud.Image{Name: c.Image},
|
Image: &hcloud.Image{Name: c.Image},
|
||||||
|
@ -71,14 +71,14 @@ func (s *stepCreateServer) Run(ctx context.Context, state multistep.StateBag) mu
|
||||||
// Store the server id for later
|
// Store the server id for later
|
||||||
state.Put("server_id", serverCreateResult.Server.ID)
|
state.Put("server_id", serverCreateResult.Server.ID)
|
||||||
|
|
||||||
if err := waitForAction(context.TODO(), client, serverCreateResult.Action); err != nil {
|
if err := waitForAction(ctx, client, serverCreateResult.Action); err != nil {
|
||||||
err := fmt.Errorf("Error creating server: %s", err)
|
err := fmt.Errorf("Error creating server: %s", err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
ui.Error(err.Error())
|
ui.Error(err.Error())
|
||||||
return multistep.ActionHalt
|
return multistep.ActionHalt
|
||||||
}
|
}
|
||||||
for _, nextAction := range serverCreateResult.NextActions {
|
for _, nextAction := range serverCreateResult.NextActions {
|
||||||
if err := waitForAction(context.TODO(), client, nextAction); err != nil {
|
if err := waitForAction(ctx, client, nextAction); err != nil {
|
||||||
err := fmt.Errorf("Error creating server: %s", err)
|
err := fmt.Errorf("Error creating server: %s", err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
ui.Error(err.Error())
|
ui.Error(err.Error())
|
||||||
|
@ -88,7 +88,7 @@ func (s *stepCreateServer) Run(ctx context.Context, state multistep.StateBag) mu
|
||||||
|
|
||||||
if c.RescueMode != "" {
|
if c.RescueMode != "" {
|
||||||
ui.Say("Enabling Rescue Mode...")
|
ui.Say("Enabling Rescue Mode...")
|
||||||
rootPassword, err := setRescue(context.TODO(), client, serverCreateResult.Server, c.RescueMode, sshKeys)
|
rootPassword, err := setRescue(ctx, client, serverCreateResult.Server, c.RescueMode, sshKeys)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("Error enabling rescue mode: %s", err)
|
err := fmt.Errorf("Error enabling rescue mode: %s", err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
@ -96,14 +96,14 @@ func (s *stepCreateServer) Run(ctx context.Context, state multistep.StateBag) mu
|
||||||
return multistep.ActionHalt
|
return multistep.ActionHalt
|
||||||
}
|
}
|
||||||
ui.Say("Reboot server...")
|
ui.Say("Reboot server...")
|
||||||
action, _, err := client.Server.Reset(context.TODO(), serverCreateResult.Server)
|
action, _, err := client.Server.Reset(ctx, serverCreateResult.Server)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("Error rebooting server: %s", err)
|
err := fmt.Errorf("Error rebooting server: %s", err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
ui.Error(err.Error())
|
ui.Error(err.Error())
|
||||||
return multistep.ActionHalt
|
return multistep.ActionHalt
|
||||||
}
|
}
|
||||||
if err := waitForAction(context.TODO(), client, action); err != nil {
|
if err := waitForAction(ctx, client, action); err != nil {
|
||||||
err := fmt.Errorf("Error rebooting server: %s", err)
|
err := fmt.Errorf("Error rebooting server: %s", err)
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
ui.Error(err.Error())
|
ui.Error(err.Error())
|
||||||
|
|
|
@ -11,7 +11,7 @@ import (
|
||||||
|
|
||||||
type stepCreateSnapshot struct{}
|
type stepCreateSnapshot struct{}
|
||||||
|
|
||||||
func (s *stepCreateSnapshot) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
func (s *stepCreateSnapshot) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
|
||||||
client := state.Get("hcloudClient").(*hcloud.Client)
|
client := state.Get("hcloudClient").(*hcloud.Client)
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
c := state.Get("config").(*Config)
|
c := state.Get("config").(*Config)
|
||||||
|
@ -19,7 +19,7 @@ func (s *stepCreateSnapshot) Run(_ context.Context, state multistep.StateBag) mu
|
||||||
|
|
||||||
ui.Say("Creating snapshot ...")
|
ui.Say("Creating snapshot ...")
|
||||||
ui.Say("This can take some time")
|
ui.Say("This can take some time")
|
||||||
result, _, err := client.Server.CreateImage(context.TODO(), &hcloud.Server{ID: serverID}, &hcloud.ServerCreateImageOpts{
|
result, _, err := client.Server.CreateImage(ctx, &hcloud.Server{ID: serverID}, &hcloud.ServerCreateImageOpts{
|
||||||
Type: hcloud.ImageTypeSnapshot,
|
Type: hcloud.ImageTypeSnapshot,
|
||||||
Labels: c.SnapshotLabels,
|
Labels: c.SnapshotLabels,
|
||||||
Description: hcloud.String(c.SnapshotName),
|
Description: hcloud.String(c.SnapshotName),
|
||||||
|
@ -32,7 +32,7 @@ func (s *stepCreateSnapshot) Run(_ context.Context, state multistep.StateBag) mu
|
||||||
}
|
}
|
||||||
state.Put("snapshot_id", result.Image.ID)
|
state.Put("snapshot_id", result.Image.ID)
|
||||||
state.Put("snapshot_name", c.SnapshotName)
|
state.Put("snapshot_name", c.SnapshotName)
|
||||||
_, errCh := client.Action.WatchProgress(context.TODO(), result.Action)
|
_, errCh := client.Action.WatchProgress(ctx, result.Action)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case err1 := <-errCh:
|
case err1 := <-errCh:
|
||||||
|
|
|
@ -25,7 +25,7 @@ type stepCreateSSHKey struct {
|
||||||
keyId int
|
keyId int
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stepCreateSSHKey) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
func (s *stepCreateSSHKey) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
|
||||||
client := state.Get("hcloudClient").(*hcloud.Client)
|
client := state.Get("hcloudClient").(*hcloud.Client)
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
c := state.Get("config").(*Config)
|
c := state.Get("config").(*Config)
|
||||||
|
@ -53,7 +53,7 @@ func (s *stepCreateSSHKey) Run(_ context.Context, state multistep.StateBag) mult
|
||||||
name := fmt.Sprintf("packer-%s", uuid.TimeOrderedUUID())
|
name := fmt.Sprintf("packer-%s", uuid.TimeOrderedUUID())
|
||||||
|
|
||||||
// Create the key!
|
// Create the key!
|
||||||
key, _, err := client.SSHKey.Create(context.TODO(), hcloud.SSHKeyCreateOpts{
|
key, _, err := client.SSHKey.Create(ctx, hcloud.SSHKeyCreateOpts{
|
||||||
Name: name,
|
Name: name,
|
||||||
PublicKey: pubSSHFormat,
|
PublicKey: pubSSHFormat,
|
||||||
})
|
})
|
||||||
|
|
|
@ -11,14 +11,14 @@ import (
|
||||||
|
|
||||||
type stepShutdownServer struct{}
|
type stepShutdownServer struct{}
|
||||||
|
|
||||||
func (s *stepShutdownServer) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
func (s *stepShutdownServer) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
|
||||||
client := state.Get("hcloudClient").(*hcloud.Client)
|
client := state.Get("hcloudClient").(*hcloud.Client)
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
serverID := state.Get("server_id").(int)
|
serverID := state.Get("server_id").(int)
|
||||||
|
|
||||||
ui.Say("Shutting down server...")
|
ui.Say("Shutting down server...")
|
||||||
|
|
||||||
action, _, err := client.Server.Shutdown(context.TODO(), &hcloud.Server{ID: serverID})
|
action, _, err := client.Server.Shutdown(ctx, &hcloud.Server{ID: serverID})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
err := fmt.Errorf("Error stopping server: %s", err)
|
err := fmt.Errorf("Error stopping server: %s", err)
|
||||||
|
@ -27,7 +27,7 @@ func (s *stepShutdownServer) Run(_ context.Context, state multistep.StateBag) mu
|
||||||
return multistep.ActionHalt
|
return multistep.ActionHalt
|
||||||
}
|
}
|
||||||
|
|
||||||
_, errCh := client.Action.WatchProgress(context.TODO(), action)
|
_, errCh := client.Action.WatchProgress(ctx, action)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case err1 := <-errCh:
|
case err1 := <-errCh:
|
||||||
|
|
Loading…
Reference in New Issue