mirror of https://github.com/hashicorp/packer
Merge pull request #8414 from footplus/fix_osc_ssh_host_detection
builder/osc: fix ssh host detection in Public Cloud and Netspull/8612/head
commit
d55f256cac
@ -0,0 +1,68 @@
|
||||
package common
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/hashicorp/packer/helper/communicator"
|
||||
"github.com/hashicorp/packer/helper/multistep"
|
||||
"github.com/hashicorp/packer/packer"
|
||||
"github.com/outscale/osc-go/oapi"
|
||||
)
|
||||
|
||||
type StepPublicIp struct {
|
||||
AssociatePublicIpAddress bool
|
||||
Comm *communicator.Config
|
||||
publicIpId string
|
||||
Debug bool
|
||||
|
||||
doCleanup bool
|
||||
}
|
||||
|
||||
func (s *StepPublicIp) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
||||
ui := state.Get("ui").(packer.Ui)
|
||||
oapiconn := state.Get("oapi").(*oapi.Client)
|
||||
netId := state.Get("net_id").(string)
|
||||
subnetId := state.Get("subnet_id").(string)
|
||||
|
||||
if netId == "" || subnetId == "" || !s.AssociatePublicIpAddress {
|
||||
// In this case, we are in the public Cloud, so we'll
|
||||
// not explicitely allocate a public IP.
|
||||
return multistep.ActionContinue
|
||||
}
|
||||
|
||||
ui.Say(fmt.Sprintf("Creating temporary PublicIp for instance in subnet %s (net %s)", subnetId, netId))
|
||||
|
||||
publicIpResp, err := oapiconn.POST_CreatePublicIp(oapi.CreatePublicIpRequest{})
|
||||
if err != nil {
|
||||
state.Put("error", fmt.Errorf("Error creating temporary PublicIp: %s", err))
|
||||
return multistep.ActionHalt
|
||||
}
|
||||
|
||||
// From there, we have a Public Ip to destroy.
|
||||
s.doCleanup = true
|
||||
|
||||
// Set some data for use in future steps
|
||||
s.publicIpId = publicIpResp.OK.PublicIp.PublicIpId
|
||||
state.Put("publicip_id", publicIpResp.OK.PublicIp.PublicIpId)
|
||||
|
||||
return multistep.ActionContinue
|
||||
}
|
||||
|
||||
func (s *StepPublicIp) Cleanup(state multistep.StateBag) {
|
||||
if !s.doCleanup {
|
||||
return
|
||||
}
|
||||
|
||||
oapiconn := state.Get("oapi").(*oapi.Client)
|
||||
ui := state.Get("ui").(packer.Ui)
|
||||
|
||||
// Remove the Public IP
|
||||
ui.Say("Deleting temporary PublicIp...")
|
||||
_, err := oapiconn.POST_DeletePublicIp(oapi.DeletePublicIpRequest{PublicIpId: s.publicIpId})
|
||||
if err != nil {
|
||||
ui.Error(fmt.Sprintf(
|
||||
"Error cleaning up PublicIp. Please delete the PublicIp manually: %s", s.publicIpId))
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in new issue