Add chroot builder framework

This commit is contained in:
Paul Meyer 2019-05-17 00:24:53 +00:00
parent 369ec9a84c
commit 3d329cf87d
1 changed files with 75 additions and 0 deletions

View File

@ -0,0 +1,75 @@
package chroot
import (
"context"
"errors"
"runtime"
azcommon "github.com/hashicorp/packer/builder/azure/common"
"github.com/hashicorp/packer/common"
"github.com/hashicorp/packer/helper/config"
"github.com/hashicorp/packer/helper/multistep"
"github.com/hashicorp/packer/packer"
"github.com/hashicorp/packer/template/interpolate"
)
type Config struct {
common.PackerConfig `mapstructure:",squash"`
ctx interpolate.Context
}
type Builder struct {
config Config
runner multistep.Runner
}
func (b *Builder) Prepare(raws ...interface{}) ([]string, error) {
b.config.ctx.Funcs = azcommon.TemplateFuncs
err := config.Decode(&b.config, &config.DecodeOpts{
Interpolate: true,
InterpolateContext: &b.config.ctx,
InterpolateFilter: &interpolate.RenderFilter{
Exclude: []string{
// fields to exclude from interpolation
},
},
}, raws...)
// checks, accumulate any errors or warnings
var errs *packer.MultiError
var warns []string
if err != nil {
return nil, err
}
return warns, errs
}
func (b *Builder) Run(ctx context.Context, ui packer.Ui, hook packer.Hook) (packer.Artifact, error) {
if runtime.GOOS != "linux" {
return nil, errors.New("The azure-chroot builder only works on Linux environments.")
}
// Setup the state bag and initial state for the steps
state := new(multistep.BasicStateBag)
state.Put("config", &b.config)
state.Put("hook", hook)
state.Put("ui", ui)
// Build the steps
var steps []multistep.Step
// Run!
b.runner = common.NewRunner(steps, b.config.PackerConfig, ui)
b.runner.Run(ctx, state)
// If there was an error, return that
if rawErr, ok := state.GetOk("error"); ok {
return nil, rawErr.(error)
}
return nil, nil
}
var _ packer.Builder = &Builder{}