| // Copyright (c) HashiCorp, Inc. |
| // SPDX-License-Identifier: MPL-2.0 |
| |
| package null |
| |
| import ( |
| "context" |
| |
| "github.com/hashicorp/hcl/v2/hcldec" |
| "github.com/hashicorp/packer-plugin-sdk/communicator" |
| "github.com/hashicorp/packer-plugin-sdk/multistep" |
| "github.com/hashicorp/packer-plugin-sdk/multistep/commonsteps" |
| packersdk "github.com/hashicorp/packer-plugin-sdk/packer" |
| ) |
| |
| const BuilderId = "fnoeding.null" |
| |
| type Builder struct { |
| config Config |
| runner multistep.Runner |
| } |
| |
| func (b *Builder) ConfigSpec() hcldec.ObjectSpec { return b.config.FlatMapstructure().HCL2Spec() } |
| |
| func (b *Builder) Prepare(raws ...interface{}) ([]string, []string, error) { |
| warnings, errs := b.config.Prepare(raws...) |
| if errs != nil { |
| return nil, warnings, errs |
| } |
| |
| return nil, warnings, nil |
| } |
| |
| func (b *Builder) Run(ctx context.Context, ui packersdk.Ui, hook packersdk.Hook) (packersdk.Artifact, error) { |
| steps := []multistep.Step{} |
| |
| steps = append(steps, |
| &communicator.StepConnect{ |
| Config: &b.config.CommConfig, |
| Host: CommHost(b.config.CommConfig.Host()), |
| SSHConfig: b.config.CommConfig.SSHConfigFunc(), |
| }, |
| ) |
| |
| steps = append(steps, |
| new(commonsteps.StepProvision), |
| ) |
| |
| // Setup the state bag and initial state for the steps |
| state := new(multistep.BasicStateBag) |
| state.Put("hook", hook) |
| state.Put("ui", ui) |
| state.Put("instance_id", "Null") |
| |
| // Run! |
| b.runner = commonsteps.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) |
| } |
| |
| // No errors, must've worked |
| artifact := &NullArtifact{} |
| return artifact, nil |
| } |