From dffcbb7a350bffad2880e05d6d3aefcb5f7be4ec Mon Sep 17 00:00:00 2001 From: Adrien Delorme Date: Tue, 28 Aug 2018 17:46:41 +0200 Subject: [PATCH] builder.alicloud: use c.Comm for ssh --- builder/alicloud/ecs/builder.go | 13 +++---- builder/alicloud/ecs/run_config.go | 10 +++--- builder/alicloud/ecs/run_config_test.go | 8 ++--- builder/alicloud/ecs/step_config_key_pair.go | 36 +++++++++----------- 4 files changed, 30 insertions(+), 37 deletions(-) diff --git a/builder/alicloud/ecs/builder.go b/builder/alicloud/ecs/builder.go index bc9d9dcb6..476b3c4a2 100644 --- a/builder/alicloud/ecs/builder.go +++ b/builder/alicloud/ecs/builder.go @@ -96,13 +96,10 @@ func (b *Builder) Run(ui packer.Ui, hook packer.Hook, cache packer.Cache) (packe SourceECSImageId: b.config.AlicloudSourceImage, }, &stepConfigAlicloudKeyPair{ - Debug: b.config.PackerDebug, - KeyPairName: b.config.SSHKeyPairName, - PrivateKeyFile: b.config.Comm.SSHPrivateKeyFile, - TemporaryKeyPairName: b.config.TemporaryKeyPairName, - SSHAgentAuth: b.config.Comm.SSHAgentAuth, - DebugKeyPath: fmt.Sprintf("ecs_%s.pem", b.config.PackerBuildName), - RegionId: b.config.AlicloudRegion, + Debug: b.config.PackerDebug, + Comm: &b.config.Comm, + DebugKeyPath: fmt.Sprintf("ecs_%s.pem", b.config.PackerBuildName), + RegionId: b.config.AlicloudRegion, }, } if b.chooseNetworkType() == VpcNet { @@ -238,5 +235,5 @@ func (b *Builder) isUserDataNeeded() bool { } func (b *Builder) isKeyPairNeeded() bool { - return b.config.SSHKeyPairName != "" || b.config.TemporaryKeyPairName != "" + return b.config.Comm.SSHKeyPairName != "" || b.config.Comm.SSHTemporaryKeyPairName != "" } diff --git a/builder/alicloud/ecs/run_config.go b/builder/alicloud/ecs/run_config.go index c9b55fafd..2dd6602f6 100644 --- a/builder/alicloud/ecs/run_config.go +++ b/builder/alicloud/ecs/run_config.go @@ -31,19 +31,17 @@ type RunConfig struct { InstanceName string `mapstructure:"instance_name"` InternetChargeType string `mapstructure:"internet_charge_type"` InternetMaxBandwidthOut int `mapstructure:"internet_max_bandwidth_out"` - TemporaryKeyPairName string `mapstructure:"temporary_key_pair_name"` // Communicator settings - Comm communicator.Config `mapstructure:",squash"` - SSHKeyPairName string `mapstructure:"ssh_keypair_name"` - SSHPrivateIp bool `mapstructure:"ssh_private_ip"` + Comm communicator.Config `mapstructure:",squash"` + SSHPrivateIp bool `mapstructure:"ssh_private_ip"` } func (c *RunConfig) Prepare(ctx *interpolate.Context) []error { - if c.SSHKeyPairName == "" && c.TemporaryKeyPairName == "" && + if c.Comm.SSHKeyPairName == "" && c.Comm.SSHTemporaryKeyPairName == "" && c.Comm.SSHPrivateKeyFile == "" && c.Comm.SSHPassword == "" && c.Comm.WinRMPassword == "" { - c.TemporaryKeyPairName = fmt.Sprintf("packer_%s", uuid.TimeOrderedUUID()) + c.Comm.SSHTemporaryKeyPairName = fmt.Sprintf("packer_%s", uuid.TimeOrderedUUID()) } // Validation diff --git a/builder/alicloud/ecs/run_config_test.go b/builder/alicloud/ecs/run_config_test.go index fe499e21f..67e1369f0 100644 --- a/builder/alicloud/ecs/run_config_test.go +++ b/builder/alicloud/ecs/run_config_test.go @@ -105,21 +105,21 @@ func TestRunConfigPrepare_UserDataFile(t *testing.T) { func TestRunConfigPrepare_TemporaryKeyPairName(t *testing.T) { c := testConfig() - c.TemporaryKeyPairName = "" + c.Comm.SSHTemporaryKeyPairName = "" if err := c.Prepare(nil); len(err) != 0 { t.Fatalf("err: %s", err) } - if c.TemporaryKeyPairName == "" { + if c.Comm.SSHTemporaryKeyPairName == "" { t.Fatal("keypair name is empty") } - c.TemporaryKeyPairName = "ssh-key-123" + c.Comm.SSHTemporaryKeyPairName = "ssh-key-123" if err := c.Prepare(nil); len(err) != 0 { t.Fatalf("err: %s", err) } - if c.TemporaryKeyPairName != "ssh-key-123" { + if c.Comm.SSHTemporaryKeyPairName != "ssh-key-123" { t.Fatal("keypair name does not match") } } diff --git a/builder/alicloud/ecs/step_config_key_pair.go b/builder/alicloud/ecs/step_config_key_pair.go index a66e086e0..ad06c1cb8 100644 --- a/builder/alicloud/ecs/step_config_key_pair.go +++ b/builder/alicloud/ecs/step_config_key_pair.go @@ -9,18 +9,16 @@ import ( "github.com/denverdino/aliyungo/common" "github.com/denverdino/aliyungo/ecs" + "github.com/hashicorp/packer/helper/communicator" "github.com/hashicorp/packer/helper/multistep" "github.com/hashicorp/packer/packer" ) type stepConfigAlicloudKeyPair struct { - Debug bool - SSHAgentAuth bool - DebugKeyPath string - TemporaryKeyPairName string - KeyPairName string - PrivateKeyFile string - RegionId string + Debug bool + Comm *communicator.Config + DebugKeyPath string + RegionId string keyName string } @@ -29,33 +27,33 @@ func (s *stepConfigAlicloudKeyPair) Run(_ context.Context, state multistep.State ui := state.Get("ui").(packer.Ui) config := state.Get("config").(*Config) - if s.PrivateKeyFile != "" { + if s.Comm.SSHPrivateKeyFile != "" { ui.Say("Using existing SSH private key") - privateKeyBytes, err := ioutil.ReadFile(s.PrivateKeyFile) + privateKeyBytes, err := ioutil.ReadFile(s.Comm.SSHPrivateKeyFile) if err != nil { state.Put("error", fmt.Errorf( "Error loading configured private key file: %s", err)) return multistep.ActionHalt } - config.Comm.SSHKeyPairName = s.KeyPairName + config.Comm.SSHKeyPairName = s.Comm.SSHKeyPairName config.Comm.SSHPrivateKey = privateKeyBytes return multistep.ActionContinue } - if s.SSHAgentAuth && s.KeyPairName == "" { + if s.Comm.SSHAgentAuth && s.Comm.SSHKeyPairName == "" { ui.Say("Using SSH Agent with key pair in source image") return multistep.ActionContinue } - if s.SSHAgentAuth && s.KeyPairName != "" { - ui.Say(fmt.Sprintf("Using SSH Agent for existing key pair %s", s.KeyPairName)) - state.Put("keyPair", s.KeyPairName) + if s.Comm.SSHAgentAuth && s.Comm.SSHKeyPairName != "" { + ui.Say(fmt.Sprintf("Using SSH Agent for existing key pair %s", s.Comm.SSHKeyPairName)) + state.Put("keyPair", s.Comm.SSHKeyPairName) return multistep.ActionContinue } - if s.TemporaryKeyPairName == "" { + if s.Comm.SSHTemporaryKeyPairName == "" { ui.Say("Not using temporary keypair") state.Put("keyPair", "") return multistep.ActionContinue @@ -63,9 +61,9 @@ func (s *stepConfigAlicloudKeyPair) Run(_ context.Context, state multistep.State client := state.Get("client").(*ecs.Client) - ui.Say(fmt.Sprintf("Creating temporary keypair: %s", s.TemporaryKeyPairName)) + ui.Say(fmt.Sprintf("Creating temporary keypair: %s", s.Comm.SSHTemporaryKeyPairName)) keyResp, err := client.CreateKeyPair(&ecs.CreateKeyPairArgs{ - KeyPairName: s.TemporaryKeyPairName, + KeyPairName: s.Comm.SSHTemporaryKeyPairName, RegionId: common.Region(s.RegionId), }) if err != nil { @@ -74,7 +72,7 @@ func (s *stepConfigAlicloudKeyPair) Run(_ context.Context, state multistep.State } // Set the keyname so we know to delete it later - s.keyName = s.TemporaryKeyPairName + s.keyName = s.Comm.SSHTemporaryKeyPairName // Set some state data for use in future steps config.Comm.SSHKeyPairName = s.keyName @@ -113,7 +111,7 @@ func (s *stepConfigAlicloudKeyPair) Cleanup(state multistep.StateBag) { // If no key name is set, then we never created it, so just return // If we used an SSH private key file, do not go about deleting // keypairs - if s.PrivateKeyFile != "" || (s.KeyPairName == "" && s.keyName == "") { + if s.Comm.SSHPrivateKeyFile != "" || (s.Comm.SSHKeyPairName == "" && s.keyName == "") { return }