Files
Packer-Cn/packer/run_interfaces.go
T
Wilken Rivera b10df3abb7 Update HCP Packer registry image extraction, validation, publishing logic for registry capable plugins (#11221)
* Update handling of registry artifacts

This change uses the github.com/hashicorp/packer-plgin-sdk/packer/registryimage for querying
Artifact State for HCP Registry Image metadata. To handle the conversion
of the RPC response, mapstructure was introduced to conversion state
data into an registryimage.Image before publishing to a image bucket.

* Update to use registry image from packersdk

* Rename internal registry service pkg

* Update vendored plugins to latest version

* The latest release of Amazon, GoogleCompute, and Azure have support
  for publishing images to the HCP Packer registry.
2021-09-13 21:07:54 -04:00

94 lines
2.9 KiB
Go

package packer
import (
"github.com/hashicorp/hcl/v2"
packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
packerregistry "github.com/hashicorp/packer/internal/registry"
plugingetter "github.com/hashicorp/packer/packer/plugin-getter"
)
type GetBuildsOptions struct {
// Get builds except the ones that match with except and with only the ones
// that match with Only. When those are empty everything matches.
Except, Only []string
Debug, Force bool
OnError string
// count only/except match count; so say something when nothing matched.
ExceptMatches, OnlyMatches int
}
type BuildGetter interface {
// GetBuilds return all possible builds for a config. It also starts all
// builders.
// TODO(azr): rename to builder starter ?
GetBuilds(GetBuildsOptions) ([]packersdk.Build, hcl.Diagnostics)
}
type Evaluator interface {
// EvaluateExpression is meant to be used in the `packer console` command.
// It parses the input string and returns what needs to be displayed. In
// case of an error the error should be displayed.
EvaluateExpression(expr string) (output string, exit bool, diags hcl.Diagnostics)
}
type InitializeOptions struct {
// When set, the execution of datasources will be skipped and the datasource will provide
// an output spec that will be used for validation only.
SkipDatasourcesExecution bool
}
// The Handler handles all Packer things. This interface reflects the Packer
// commands, ex: init, console ( evaluate ), fix config, inspect config, etc. To
// run a build we will start the builds and then the core of Packer handles
// execution.
type Handler interface {
Initialize(InitializeOptions) hcl.Diagnostics
// PluginRequirements returns the list of plugin Requirements from the
// config file.
PluginRequirements() (plugingetter.Requirements, hcl.Diagnostics)
Evaluator
BuildGetter
ConfigFixer
ConfigInspector
HCPHandler
}
// The HCPHandler handles Packer things needed for communicating with a HCP Packer Registry.
type HCPHandler interface {
// ConfiguredArtifactMetadataPublisher returns a configured Bucket that can be used to publish
// build artifacts to the said image bucket.
ConfiguredArtifactMetadataPublisher() (*packerregistry.Bucket, hcl.Diagnostics)
}
//go:generate enumer -type FixConfigMode
type FixConfigMode int
const (
// Stdout will make FixConfig simply print what the config should be; it
// will only work when a single file is passed.
Stdout FixConfigMode = iota
// Inplace fixes your files on the spot.
Inplace
// Diff shows a full diff.
Diff
)
type FixConfigOptions struct {
Mode FixConfigMode
}
type ConfigFixer interface {
// FixConfig will output the config in a fixed manner.
FixConfig(FixConfigOptions) hcl.Diagnostics
}
type InspectConfigOptions struct {
packersdk.Ui
}
type ConfigInspector interface {
// Inspect will output self inspection for a configuration
InspectConfig(InspectConfigOptions) (ret int)
}