Made SSH public key available in vbox boot command.
The SSH public key (in authorized_keys format) can be retreived in the build template by specifying '{{ .SSHPublicKey }}'. The key is URL encoded to escape spaces.
This commit is contained in:
parent
7b857929ab
commit
72d1501551
|
@ -7,6 +7,7 @@ import (
|
||||||
|
|
||||||
"github.com/hashicorp/packer/common"
|
"github.com/hashicorp/packer/common"
|
||||||
"github.com/hashicorp/packer/common/bootcommand"
|
"github.com/hashicorp/packer/common/bootcommand"
|
||||||
|
"github.com/hashicorp/packer/helper/communicator"
|
||||||
"github.com/hashicorp/packer/helper/multistep"
|
"github.com/hashicorp/packer/helper/multistep"
|
||||||
"github.com/hashicorp/packer/packer"
|
"github.com/hashicorp/packer/packer"
|
||||||
"github.com/hashicorp/packer/template/interpolate"
|
"github.com/hashicorp/packer/template/interpolate"
|
||||||
|
@ -14,10 +15,21 @@ import (
|
||||||
|
|
||||||
const KeyLeftShift uint32 = 0xFFE1
|
const KeyLeftShift uint32 = 0xFFE1
|
||||||
|
|
||||||
|
// TODO: Should this be made available for other builders?
|
||||||
|
// It is copy pasted in the VMWare builder as well.
|
||||||
type bootCommandTemplateData struct {
|
type bootCommandTemplateData struct {
|
||||||
HTTPIP string
|
// HTTPIP is the HTTP server's IP address.
|
||||||
|
HTTPIP string
|
||||||
|
|
||||||
|
// HTTPPort is the HTTP server port.
|
||||||
HTTPPort uint
|
HTTPPort uint
|
||||||
Name string
|
|
||||||
|
// Name is the VM's name.
|
||||||
|
Name string
|
||||||
|
|
||||||
|
// SSHPublicKey is the URL encoded public key in
|
||||||
|
// authorized_keys format.
|
||||||
|
SSHPublicKey string
|
||||||
}
|
}
|
||||||
|
|
||||||
type StepTypeBootCommand struct {
|
type StepTypeBootCommand struct {
|
||||||
|
@ -26,6 +38,7 @@ type StepTypeBootCommand struct {
|
||||||
VMName string
|
VMName string
|
||||||
Ctx interpolate.Context
|
Ctx interpolate.Context
|
||||||
GroupInterval time.Duration
|
GroupInterval time.Duration
|
||||||
|
Comm *communicator.Config
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *StepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
|
func (s *StepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag) multistep.StepAction {
|
||||||
|
@ -54,9 +67,10 @@ func (s *StepTypeBootCommand) Run(ctx context.Context, state multistep.StateBag)
|
||||||
hostIP := "10.0.2.2"
|
hostIP := "10.0.2.2"
|
||||||
common.SetHTTPIP(hostIP)
|
common.SetHTTPIP(hostIP)
|
||||||
s.Ctx.Data = &bootCommandTemplateData{
|
s.Ctx.Data = &bootCommandTemplateData{
|
||||||
hostIP,
|
HTTPIP: hostIP,
|
||||||
httpPort,
|
HTTPPort: httpPort,
|
||||||
s.VMName,
|
Name: s.VMName,
|
||||||
|
SSHPublicKey: s.Comm.SSHPublicKeyUrlEncoded(),
|
||||||
}
|
}
|
||||||
|
|
||||||
sendCodes := func(codes []string) error {
|
sendCodes := func(codes []string) error {
|
||||||
|
|
Loading…
Reference in New Issue