support ssh with private ip address
This commit is contained in:
parent
351cdc8508
commit
743be8a808
|
@ -139,10 +139,12 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe
|
||||||
RegionId: b.config.AlicloudRegion,
|
RegionId: b.config.AlicloudRegion,
|
||||||
InternetChargeType: b.config.InternetChargeType,
|
InternetChargeType: b.config.InternetChargeType,
|
||||||
InternetMaxBandwidthOut: b.config.InternetMaxBandwidthOut,
|
InternetMaxBandwidthOut: b.config.InternetMaxBandwidthOut,
|
||||||
|
SSHPrivateIp: b.config.SSHPrivateIp,
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
steps = append(steps, &stepConfigAlicloudPublicIP{
|
steps = append(steps, &stepConfigAlicloudPublicIP{
|
||||||
RegionId: b.config.AlicloudRegion,
|
RegionId: b.config.AlicloudRegion,
|
||||||
|
SSHPrivateIp: b.config.SSHPrivateIp,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
steps = append(steps,
|
steps = append(steps,
|
||||||
|
|
|
@ -123,3 +123,27 @@ func TestRunConfigPrepare_TemporaryKeyPairName(t *testing.T) {
|
||||||
t.Fatal("keypair name does not match")
|
t.Fatal("keypair name does not match")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestRunConfigPrepare_SSHPrivateIp(t *testing.T) {
|
||||||
|
c := testConfig()
|
||||||
|
if err := c.Prepare(nil); len(err) != 0 {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
if c.SSHPrivateIp != false {
|
||||||
|
t.Fatalf("invalid value, expected: %t, actul: %t", false, c.SSHPrivateIp)
|
||||||
|
}
|
||||||
|
c.SSHPrivateIp = true
|
||||||
|
if err := c.Prepare(nil); len(err) != 0 {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
if c.SSHPrivateIp != true {
|
||||||
|
t.Fatalf("invalid value, expected: %t, actul: %t", true, c.SSHPrivateIp)
|
||||||
|
}
|
||||||
|
c.SSHPrivateIp = false
|
||||||
|
if err := c.Prepare(nil); len(err) != 0 {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
if c.SSHPrivateIp != false {
|
||||||
|
t.Fatalf("invalid value, expected: %t, actul: %t", false, c.SSHPrivateIp)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -16,12 +16,24 @@ type stepConfigAlicloudEIP struct {
|
||||||
InternetChargeType string
|
InternetChargeType string
|
||||||
InternetMaxBandwidthOut int
|
InternetMaxBandwidthOut int
|
||||||
allocatedId string
|
allocatedId string
|
||||||
|
SSHPrivateIp bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stepConfigAlicloudEIP) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
func (s *stepConfigAlicloudEIP) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
||||||
client := state.Get("client").(*ecs.Client)
|
client := state.Get("client").(*ecs.Client)
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
instance := state.Get("instance").(*ecs.InstanceAttributesType)
|
instance := state.Get("instance").(*ecs.InstanceAttributesType)
|
||||||
|
|
||||||
|
if s.SSHPrivateIp {
|
||||||
|
ipaddress := instance.VpcAttributes.PrivateIpAddress.IpAddress
|
||||||
|
if len(ipaddress) == 0 {
|
||||||
|
ui.Say("Failed to get private ip of instance")
|
||||||
|
return multistep.ActionHalt
|
||||||
|
}
|
||||||
|
state.Put("ipaddress", ipaddress[0])
|
||||||
|
return multistep.ActionContinue
|
||||||
|
}
|
||||||
|
|
||||||
ui.Say("Allocating eip")
|
ui.Say("Allocating eip")
|
||||||
ipaddress, allocateId, err := client.AllocateEipAddress(&ecs.AllocateEipAddressArgs{
|
ipaddress, allocateId, err := client.AllocateEipAddress(&ecs.AllocateEipAddressArgs{
|
||||||
RegionId: common.Region(s.RegionId), InternetChargeType: common.InternetChargeType(s.InternetChargeType),
|
RegionId: common.Region(s.RegionId), InternetChargeType: common.InternetChargeType(s.InternetChargeType),
|
||||||
|
|
|
@ -12,6 +12,7 @@ import (
|
||||||
type stepConfigAlicloudPublicIP struct {
|
type stepConfigAlicloudPublicIP struct {
|
||||||
publicIPAddress string
|
publicIPAddress string
|
||||||
RegionId string
|
RegionId string
|
||||||
|
SSHPrivateIp bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *stepConfigAlicloudPublicIP) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
func (s *stepConfigAlicloudPublicIP) Run(_ context.Context, state multistep.StateBag) multistep.StepAction {
|
||||||
|
@ -19,6 +20,16 @@ func (s *stepConfigAlicloudPublicIP) Run(_ context.Context, state multistep.Stat
|
||||||
ui := state.Get("ui").(packer.Ui)
|
ui := state.Get("ui").(packer.Ui)
|
||||||
instance := state.Get("instance").(*ecs.InstanceAttributesType)
|
instance := state.Get("instance").(*ecs.InstanceAttributesType)
|
||||||
|
|
||||||
|
if s.SSHPrivateIp {
|
||||||
|
ipaddress := instance.InnerIpAddress.IpAddress
|
||||||
|
if len(ipaddress) == 0 {
|
||||||
|
ui.Say("Failed to get private ip of instance")
|
||||||
|
return multistep.ActionHalt
|
||||||
|
}
|
||||||
|
state.Put("ipaddress", ipaddress[0])
|
||||||
|
return multistep.ActionContinue
|
||||||
|
}
|
||||||
|
|
||||||
ipaddress, err := client.AllocatePublicIpAddress(instance.InstanceId)
|
ipaddress, err := client.AllocatePublicIpAddress(instance.InstanceId)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
state.Put("error", err)
|
state.Put("error", err)
|
||||||
|
|
Loading…
Reference in New Issue