revendor
This commit is contained in:
parent
a5b0e37d7e
commit
9331afcf80
|
@ -1,91 +0,0 @@
|
||||||
//go:generate mapstructure-to-hcl2 -type Config
|
|
||||||
|
|
||||||
package dockerimport
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/hashicorp/hcl/v2/hcldec"
|
|
||||||
"github.com/hashicorp/packer-plugin-docker/builder/docker"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/common"
|
|
||||||
packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/template/config"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/template/interpolate"
|
|
||||||
)
|
|
||||||
|
|
||||||
const BuilderId = "packer.post-processor.docker-import"
|
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
common.PackerConfig `mapstructure:",squash"`
|
|
||||||
|
|
||||||
Repository string `mapstructure:"repository"`
|
|
||||||
Tag string `mapstructure:"tag"`
|
|
||||||
Changes []string `mapstructure:"changes"`
|
|
||||||
|
|
||||||
ctx interpolate.Context
|
|
||||||
}
|
|
||||||
|
|
||||||
type PostProcessor struct {
|
|
||||||
config Config
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PostProcessor) ConfigSpec() hcldec.ObjectSpec { return p.config.FlatMapstructure().HCL2Spec() }
|
|
||||||
|
|
||||||
func (p *PostProcessor) Configure(raws ...interface{}) error {
|
|
||||||
err := config.Decode(&p.config, &config.DecodeOpts{
|
|
||||||
PluginType: BuilderId,
|
|
||||||
Interpolate: true,
|
|
||||||
InterpolateContext: &p.config.ctx,
|
|
||||||
InterpolateFilter: &interpolate.RenderFilter{
|
|
||||||
Exclude: []string{},
|
|
||||||
},
|
|
||||||
}, raws...)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PostProcessor) PostProcess(ctx context.Context, ui packersdk.Ui, artifact packersdk.Artifact) (packersdk.Artifact, bool, bool, error) {
|
|
||||||
switch artifact.BuilderId() {
|
|
||||||
case docker.BuilderId, "packer.post-processor.artifice":
|
|
||||||
break
|
|
||||||
default:
|
|
||||||
err := fmt.Errorf(
|
|
||||||
"Unknown artifact type: %s\nCan only import from Docker builder "+
|
|
||||||
"and Artifice post-processor artifacts. If you are getting this "+
|
|
||||||
"error after having run the docker builder, it may be because you "+
|
|
||||||
"set commit: true in your Docker builder, so the image is "+
|
|
||||||
"already imported. ",
|
|
||||||
artifact.BuilderId())
|
|
||||||
return nil, false, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
importRepo := p.config.Repository
|
|
||||||
if p.config.Tag != "" {
|
|
||||||
importRepo += ":" + p.config.Tag
|
|
||||||
}
|
|
||||||
|
|
||||||
driver := &docker.DockerDriver{Ctx: &p.config.ctx, Ui: ui}
|
|
||||||
|
|
||||||
ui.Message("Importing image: " + artifact.Id())
|
|
||||||
ui.Message("Repository: " + importRepo)
|
|
||||||
id, err := driver.Import(artifact.Files()[0], p.config.Changes, importRepo)
|
|
||||||
if err != nil {
|
|
||||||
return nil, false, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
ui.Message("Imported ID: " + id)
|
|
||||||
|
|
||||||
// Build the artifact
|
|
||||||
artifact = &docker.ImportArtifact{
|
|
||||||
BuilderIdValue: BuilderId,
|
|
||||||
Driver: driver,
|
|
||||||
IdValue: importRepo,
|
|
||||||
}
|
|
||||||
|
|
||||||
return artifact, false, false, nil
|
|
||||||
}
|
|
|
@ -1,51 +0,0 @@
|
||||||
// Code generated by "mapstructure-to-hcl2 -type Config"; DO NOT EDIT.
|
|
||||||
|
|
||||||
package dockerimport
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/hashicorp/hcl/v2/hcldec"
|
|
||||||
"github.com/zclconf/go-cty/cty"
|
|
||||||
)
|
|
||||||
|
|
||||||
// FlatConfig is an auto-generated flat version of Config.
|
|
||||||
// Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
|
|
||||||
type FlatConfig struct {
|
|
||||||
PackerBuildName *string `mapstructure:"packer_build_name" cty:"packer_build_name" hcl:"packer_build_name"`
|
|
||||||
PackerBuilderType *string `mapstructure:"packer_builder_type" cty:"packer_builder_type" hcl:"packer_builder_type"`
|
|
||||||
PackerCoreVersion *string `mapstructure:"packer_core_version" cty:"packer_core_version" hcl:"packer_core_version"`
|
|
||||||
PackerDebug *bool `mapstructure:"packer_debug" cty:"packer_debug" hcl:"packer_debug"`
|
|
||||||
PackerForce *bool `mapstructure:"packer_force" cty:"packer_force" hcl:"packer_force"`
|
|
||||||
PackerOnError *string `mapstructure:"packer_on_error" cty:"packer_on_error" hcl:"packer_on_error"`
|
|
||||||
PackerUserVars map[string]string `mapstructure:"packer_user_variables" cty:"packer_user_variables" hcl:"packer_user_variables"`
|
|
||||||
PackerSensitiveVars []string `mapstructure:"packer_sensitive_variables" cty:"packer_sensitive_variables" hcl:"packer_sensitive_variables"`
|
|
||||||
Repository *string `mapstructure:"repository" cty:"repository" hcl:"repository"`
|
|
||||||
Tag *string `mapstructure:"tag" cty:"tag" hcl:"tag"`
|
|
||||||
Changes []string `mapstructure:"changes" cty:"changes" hcl:"changes"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// FlatMapstructure returns a new FlatConfig.
|
|
||||||
// FlatConfig is an auto-generated flat version of Config.
|
|
||||||
// Where the contents a fields with a `mapstructure:,squash` tag are bubbled up.
|
|
||||||
func (*Config) FlatMapstructure() interface{ HCL2Spec() map[string]hcldec.Spec } {
|
|
||||||
return new(FlatConfig)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HCL2Spec returns the hcl spec of a Config.
|
|
||||||
// This spec is used by HCL to read the fields of Config.
|
|
||||||
// The decoded values from this spec will then be applied to a FlatConfig.
|
|
||||||
func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec {
|
|
||||||
s := map[string]hcldec.Spec{
|
|
||||||
"packer_build_name": &hcldec.AttrSpec{Name: "packer_build_name", Type: cty.String, Required: false},
|
|
||||||
"packer_builder_type": &hcldec.AttrSpec{Name: "packer_builder_type", Type: cty.String, Required: false},
|
|
||||||
"packer_core_version": &hcldec.AttrSpec{Name: "packer_core_version", Type: cty.String, Required: false},
|
|
||||||
"packer_debug": &hcldec.AttrSpec{Name: "packer_debug", Type: cty.Bool, Required: false},
|
|
||||||
"packer_force": &hcldec.AttrSpec{Name: "packer_force", Type: cty.Bool, Required: false},
|
|
||||||
"packer_on_error": &hcldec.AttrSpec{Name: "packer_on_error", Type: cty.String, Required: false},
|
|
||||||
"packer_user_variables": &hcldec.AttrSpec{Name: "packer_user_variables", Type: cty.Map(cty.String), Required: false},
|
|
||||||
"packer_sensitive_variables": &hcldec.AttrSpec{Name: "packer_sensitive_variables", Type: cty.List(cty.String), Required: false},
|
|
||||||
"repository": &hcldec.AttrSpec{Name: "repository", Type: cty.String, Required: false},
|
|
||||||
"tag": &hcldec.AttrSpec{Name: "tag", Type: cty.String, Required: false},
|
|
||||||
"changes": &hcldec.AttrSpec{Name: "changes", Type: cty.List(cty.String), Required: false},
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
|
@ -1,138 +0,0 @@
|
||||||
//go:generate mapstructure-to-hcl2 -type Config
|
|
||||||
|
|
||||||
package dockerpush
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/hashicorp/hcl/v2/hcldec"
|
|
||||||
"github.com/hashicorp/packer-plugin-docker/builder/docker"
|
|
||||||
dockerimport "github.com/hashicorp/packer-plugin-docker/post-processor/docker-import"
|
|
||||||
dockertag "github.com/hashicorp/packer-plugin-docker/post-processor/docker-tag"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/common"
|
|
||||||
packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/template/config"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/template/interpolate"
|
|
||||||
)
|
|
||||||
|
|
||||||
const BuilderIdImport = "packer.post-processor.docker-import"
|
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
common.PackerConfig `mapstructure:",squash"`
|
|
||||||
|
|
||||||
Login bool
|
|
||||||
LoginUsername string `mapstructure:"login_username"`
|
|
||||||
LoginPassword string `mapstructure:"login_password"`
|
|
||||||
LoginServer string `mapstructure:"login_server"`
|
|
||||||
EcrLogin bool `mapstructure:"ecr_login"`
|
|
||||||
docker.AwsAccessConfig `mapstructure:",squash"`
|
|
||||||
|
|
||||||
ctx interpolate.Context
|
|
||||||
}
|
|
||||||
|
|
||||||
type PostProcessor struct {
|
|
||||||
Driver docker.Driver
|
|
||||||
|
|
||||||
config Config
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PostProcessor) ConfigSpec() hcldec.ObjectSpec { return p.config.FlatMapstructure().HCL2Spec() }
|
|
||||||
|
|
||||||
func (p *PostProcessor) Configure(raws ...interface{}) error {
|
|
||||||
err := config.Decode(&p.config, &config.DecodeOpts{
|
|
||||||
PluginType: BuilderIdImport,
|
|
||||||
Interpolate: true,
|
|
||||||
InterpolateContext: &p.config.ctx,
|
|
||||||
InterpolateFilter: &interpolate.RenderFilter{
|
|
||||||
Exclude: []string{},
|
|
||||||
},
|
|
||||||
}, raws...)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
if p.config.EcrLogin && p.config.LoginServer == "" {
|
|
||||||
return fmt.Errorf("ECR login requires login server to be provided.")
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PostProcessor) PostProcess(ctx context.Context, ui packersdk.Ui, artifact packersdk.Artifact) (packersdk.Artifact, bool, bool, error) {
|
|
||||||
if artifact.BuilderId() != dockerimport.BuilderId &&
|
|
||||||
artifact.BuilderId() != dockertag.BuilderId {
|
|
||||||
err := fmt.Errorf(
|
|
||||||
"Unknown artifact type: %s\nCan only import from docker-import and docker-tag artifacts.",
|
|
||||||
artifact.BuilderId())
|
|
||||||
return nil, false, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
driver := p.Driver
|
|
||||||
if driver == nil {
|
|
||||||
// If no driver is set, then we use the real driver
|
|
||||||
driver = &docker.DockerDriver{Ctx: &p.config.ctx, Ui: ui}
|
|
||||||
}
|
|
||||||
|
|
||||||
if p.config.EcrLogin {
|
|
||||||
ui.Message("Fetching ECR credentials...")
|
|
||||||
|
|
||||||
username, password, err := p.config.EcrGetLogin(p.config.LoginServer)
|
|
||||||
if err != nil {
|
|
||||||
return nil, false, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
p.config.LoginUsername = username
|
|
||||||
p.config.LoginPassword = password
|
|
||||||
}
|
|
||||||
|
|
||||||
if p.config.Login || p.config.EcrLogin {
|
|
||||||
ui.Message("Logging in...")
|
|
||||||
err := driver.Login(
|
|
||||||
p.config.LoginServer,
|
|
||||||
p.config.LoginUsername,
|
|
||||||
p.config.LoginPassword)
|
|
||||||
if err != nil {
|
|
||||||
return nil, false, false, fmt.Errorf(
|
|
||||||
"Error logging in to Docker: %s", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
defer func() {
|
|
||||||
ui.Message("Logging out...")
|
|
||||||
if err := driver.Logout(p.config.LoginServer); err != nil {
|
|
||||||
ui.Error(fmt.Sprintf("Error logging out: %s", err))
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
}
|
|
||||||
|
|
||||||
var tags []string
|
|
||||||
switch t := artifact.State("docker_tags").(type) {
|
|
||||||
case []string:
|
|
||||||
tags = t
|
|
||||||
case []interface{}:
|
|
||||||
for _, name := range t {
|
|
||||||
if n, ok := name.(string); ok {
|
|
||||||
tags = append(tags, n)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
names := []string{artifact.Id()}
|
|
||||||
names = append(names, tags...)
|
|
||||||
|
|
||||||
// Get the name.
|
|
||||||
for _, name := range names {
|
|
||||||
ui.Message("Pushing: " + name)
|
|
||||||
if err := driver.Push(name); err != nil {
|
|
||||||
return nil, false, false, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
artifact = &docker.ImportArtifact{
|
|
||||||
BuilderIdValue: BuilderIdImport,
|
|
||||||
Driver: driver,
|
|
||||||
IdValue: names[0],
|
|
||||||
StateData: map[string]interface{}{"docker_tags": tags},
|
|
||||||
}
|
|
||||||
|
|
||||||
return artifact, true, false, nil
|
|
||||||
}
|
|
|
@ -1,63 +0,0 @@
|
||||||
// Code generated by "mapstructure-to-hcl2 -type Config"; DO NOT EDIT.
|
|
||||||
|
|
||||||
package dockerpush
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/hashicorp/hcl/v2/hcldec"
|
|
||||||
"github.com/zclconf/go-cty/cty"
|
|
||||||
)
|
|
||||||
|
|
||||||
// FlatConfig is an auto-generated flat version of Config.
|
|
||||||
// Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
|
|
||||||
type FlatConfig struct {
|
|
||||||
PackerBuildName *string `mapstructure:"packer_build_name" cty:"packer_build_name" hcl:"packer_build_name"`
|
|
||||||
PackerBuilderType *string `mapstructure:"packer_builder_type" cty:"packer_builder_type" hcl:"packer_builder_type"`
|
|
||||||
PackerCoreVersion *string `mapstructure:"packer_core_version" cty:"packer_core_version" hcl:"packer_core_version"`
|
|
||||||
PackerDebug *bool `mapstructure:"packer_debug" cty:"packer_debug" hcl:"packer_debug"`
|
|
||||||
PackerForce *bool `mapstructure:"packer_force" cty:"packer_force" hcl:"packer_force"`
|
|
||||||
PackerOnError *string `mapstructure:"packer_on_error" cty:"packer_on_error" hcl:"packer_on_error"`
|
|
||||||
PackerUserVars map[string]string `mapstructure:"packer_user_variables" cty:"packer_user_variables" hcl:"packer_user_variables"`
|
|
||||||
PackerSensitiveVars []string `mapstructure:"packer_sensitive_variables" cty:"packer_sensitive_variables" hcl:"packer_sensitive_variables"`
|
|
||||||
Login *bool `cty:"login" hcl:"login"`
|
|
||||||
LoginUsername *string `mapstructure:"login_username" cty:"login_username" hcl:"login_username"`
|
|
||||||
LoginPassword *string `mapstructure:"login_password" cty:"login_password" hcl:"login_password"`
|
|
||||||
LoginServer *string `mapstructure:"login_server" cty:"login_server" hcl:"login_server"`
|
|
||||||
EcrLogin *bool `mapstructure:"ecr_login" cty:"ecr_login" hcl:"ecr_login"`
|
|
||||||
AccessKey *string `mapstructure:"aws_access_key" required:"false" cty:"aws_access_key" hcl:"aws_access_key"`
|
|
||||||
SecretKey *string `mapstructure:"aws_secret_key" required:"false" cty:"aws_secret_key" hcl:"aws_secret_key"`
|
|
||||||
Token *string `mapstructure:"aws_token" required:"false" cty:"aws_token" hcl:"aws_token"`
|
|
||||||
Profile *string `mapstructure:"aws_profile" required:"false" cty:"aws_profile" hcl:"aws_profile"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// FlatMapstructure returns a new FlatConfig.
|
|
||||||
// FlatConfig is an auto-generated flat version of Config.
|
|
||||||
// Where the contents a fields with a `mapstructure:,squash` tag are bubbled up.
|
|
||||||
func (*Config) FlatMapstructure() interface{ HCL2Spec() map[string]hcldec.Spec } {
|
|
||||||
return new(FlatConfig)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HCL2Spec returns the hcl spec of a Config.
|
|
||||||
// This spec is used by HCL to read the fields of Config.
|
|
||||||
// The decoded values from this spec will then be applied to a FlatConfig.
|
|
||||||
func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec {
|
|
||||||
s := map[string]hcldec.Spec{
|
|
||||||
"packer_build_name": &hcldec.AttrSpec{Name: "packer_build_name", Type: cty.String, Required: false},
|
|
||||||
"packer_builder_type": &hcldec.AttrSpec{Name: "packer_builder_type", Type: cty.String, Required: false},
|
|
||||||
"packer_core_version": &hcldec.AttrSpec{Name: "packer_core_version", Type: cty.String, Required: false},
|
|
||||||
"packer_debug": &hcldec.AttrSpec{Name: "packer_debug", Type: cty.Bool, Required: false},
|
|
||||||
"packer_force": &hcldec.AttrSpec{Name: "packer_force", Type: cty.Bool, Required: false},
|
|
||||||
"packer_on_error": &hcldec.AttrSpec{Name: "packer_on_error", Type: cty.String, Required: false},
|
|
||||||
"packer_user_variables": &hcldec.AttrSpec{Name: "packer_user_variables", Type: cty.Map(cty.String), Required: false},
|
|
||||||
"packer_sensitive_variables": &hcldec.AttrSpec{Name: "packer_sensitive_variables", Type: cty.List(cty.String), Required: false},
|
|
||||||
"login": &hcldec.AttrSpec{Name: "login", Type: cty.Bool, Required: false},
|
|
||||||
"login_username": &hcldec.AttrSpec{Name: "login_username", Type: cty.String, Required: false},
|
|
||||||
"login_password": &hcldec.AttrSpec{Name: "login_password", Type: cty.String, Required: false},
|
|
||||||
"login_server": &hcldec.AttrSpec{Name: "login_server", Type: cty.String, Required: false},
|
|
||||||
"ecr_login": &hcldec.AttrSpec{Name: "ecr_login", Type: cty.Bool, Required: false},
|
|
||||||
"aws_access_key": &hcldec.AttrSpec{Name: "aws_access_key", Type: cty.String, Required: false},
|
|
||||||
"aws_secret_key": &hcldec.AttrSpec{Name: "aws_secret_key", Type: cty.String, Required: false},
|
|
||||||
"aws_token": &hcldec.AttrSpec{Name: "aws_token", Type: cty.String, Required: false},
|
|
||||||
"aws_profile": &hcldec.AttrSpec{Name: "aws_profile", Type: cty.String, Required: false},
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
|
@ -1,92 +0,0 @@
|
||||||
//go:generate mapstructure-to-hcl2 -type Config
|
|
||||||
|
|
||||||
package dockersave
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
|
|
||||||
"github.com/hashicorp/hcl/v2/hcldec"
|
|
||||||
"github.com/hashicorp/packer-plugin-docker/builder/docker"
|
|
||||||
dockerimport "github.com/hashicorp/packer-plugin-docker/post-processor/docker-import"
|
|
||||||
dockertag "github.com/hashicorp/packer-plugin-docker/post-processor/docker-tag"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/common"
|
|
||||||
packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/template/config"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/template/interpolate"
|
|
||||||
)
|
|
||||||
|
|
||||||
const BuilderId = "packer.post-processor.docker-save"
|
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
common.PackerConfig `mapstructure:",squash"`
|
|
||||||
|
|
||||||
Path string `mapstructure:"path"`
|
|
||||||
|
|
||||||
ctx interpolate.Context
|
|
||||||
}
|
|
||||||
|
|
||||||
type PostProcessor struct {
|
|
||||||
Driver docker.Driver
|
|
||||||
|
|
||||||
config Config
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PostProcessor) ConfigSpec() hcldec.ObjectSpec { return p.config.FlatMapstructure().HCL2Spec() }
|
|
||||||
|
|
||||||
func (p *PostProcessor) Configure(raws ...interface{}) error {
|
|
||||||
err := config.Decode(&p.config, &config.DecodeOpts{
|
|
||||||
PluginType: BuilderId,
|
|
||||||
Interpolate: true,
|
|
||||||
InterpolateContext: &p.config.ctx,
|
|
||||||
InterpolateFilter: &interpolate.RenderFilter{
|
|
||||||
Exclude: []string{},
|
|
||||||
},
|
|
||||||
}, raws...)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PostProcessor) PostProcess(ctx context.Context, ui packersdk.Ui, artifact packersdk.Artifact) (packersdk.Artifact, bool, bool, error) {
|
|
||||||
if artifact.BuilderId() != dockerimport.BuilderId &&
|
|
||||||
artifact.BuilderId() != dockertag.BuilderId {
|
|
||||||
err := fmt.Errorf(
|
|
||||||
"Unknown artifact type: %s\nCan only save Docker builder artifacts.",
|
|
||||||
artifact.BuilderId())
|
|
||||||
return nil, false, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
path := p.config.Path
|
|
||||||
|
|
||||||
// Open the file that we're going to write to
|
|
||||||
f, err := os.Create(path)
|
|
||||||
if err != nil {
|
|
||||||
err := fmt.Errorf("Error creating output file: %s", err)
|
|
||||||
return nil, false, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
driver := p.Driver
|
|
||||||
if driver == nil {
|
|
||||||
// If no driver is set, then we use the real driver
|
|
||||||
driver = &docker.DockerDriver{Ctx: &p.config.ctx, Ui: ui}
|
|
||||||
}
|
|
||||||
|
|
||||||
ui.Message("Saving image: " + artifact.Id())
|
|
||||||
|
|
||||||
if err := driver.SaveImage(artifact.Id(), f); err != nil {
|
|
||||||
f.Close()
|
|
||||||
os.Remove(f.Name())
|
|
||||||
|
|
||||||
return nil, false, false, err
|
|
||||||
}
|
|
||||||
|
|
||||||
f.Close()
|
|
||||||
ui.Message("Saved to: " + path)
|
|
||||||
|
|
||||||
return artifact, true, false, nil
|
|
||||||
}
|
|
|
@ -1,47 +0,0 @@
|
||||||
// Code generated by "mapstructure-to-hcl2 -type Config"; DO NOT EDIT.
|
|
||||||
|
|
||||||
package dockersave
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/hashicorp/hcl/v2/hcldec"
|
|
||||||
"github.com/zclconf/go-cty/cty"
|
|
||||||
)
|
|
||||||
|
|
||||||
// FlatConfig is an auto-generated flat version of Config.
|
|
||||||
// Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
|
|
||||||
type FlatConfig struct {
|
|
||||||
PackerBuildName *string `mapstructure:"packer_build_name" cty:"packer_build_name" hcl:"packer_build_name"`
|
|
||||||
PackerBuilderType *string `mapstructure:"packer_builder_type" cty:"packer_builder_type" hcl:"packer_builder_type"`
|
|
||||||
PackerCoreVersion *string `mapstructure:"packer_core_version" cty:"packer_core_version" hcl:"packer_core_version"`
|
|
||||||
PackerDebug *bool `mapstructure:"packer_debug" cty:"packer_debug" hcl:"packer_debug"`
|
|
||||||
PackerForce *bool `mapstructure:"packer_force" cty:"packer_force" hcl:"packer_force"`
|
|
||||||
PackerOnError *string `mapstructure:"packer_on_error" cty:"packer_on_error" hcl:"packer_on_error"`
|
|
||||||
PackerUserVars map[string]string `mapstructure:"packer_user_variables" cty:"packer_user_variables" hcl:"packer_user_variables"`
|
|
||||||
PackerSensitiveVars []string `mapstructure:"packer_sensitive_variables" cty:"packer_sensitive_variables" hcl:"packer_sensitive_variables"`
|
|
||||||
Path *string `mapstructure:"path" cty:"path" hcl:"path"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// FlatMapstructure returns a new FlatConfig.
|
|
||||||
// FlatConfig is an auto-generated flat version of Config.
|
|
||||||
// Where the contents a fields with a `mapstructure:,squash` tag are bubbled up.
|
|
||||||
func (*Config) FlatMapstructure() interface{ HCL2Spec() map[string]hcldec.Spec } {
|
|
||||||
return new(FlatConfig)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HCL2Spec returns the hcl spec of a Config.
|
|
||||||
// This spec is used by HCL to read the fields of Config.
|
|
||||||
// The decoded values from this spec will then be applied to a FlatConfig.
|
|
||||||
func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec {
|
|
||||||
s := map[string]hcldec.Spec{
|
|
||||||
"packer_build_name": &hcldec.AttrSpec{Name: "packer_build_name", Type: cty.String, Required: false},
|
|
||||||
"packer_builder_type": &hcldec.AttrSpec{Name: "packer_builder_type", Type: cty.String, Required: false},
|
|
||||||
"packer_core_version": &hcldec.AttrSpec{Name: "packer_core_version", Type: cty.String, Required: false},
|
|
||||||
"packer_debug": &hcldec.AttrSpec{Name: "packer_debug", Type: cty.Bool, Required: false},
|
|
||||||
"packer_force": &hcldec.AttrSpec{Name: "packer_force", Type: cty.Bool, Required: false},
|
|
||||||
"packer_on_error": &hcldec.AttrSpec{Name: "packer_on_error", Type: cty.String, Required: false},
|
|
||||||
"packer_user_variables": &hcldec.AttrSpec{Name: "packer_user_variables", Type: cty.Map(cty.String), Required: false},
|
|
||||||
"packer_sensitive_variables": &hcldec.AttrSpec{Name: "packer_sensitive_variables", Type: cty.List(cty.String), Required: false},
|
|
||||||
"path": &hcldec.AttrSpec{Name: "path", Type: cty.String, Required: false},
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
122
vendor/github.com/hashicorp/packer-plugin-docker/post-processor/docker-tag/post-processor.go
generated
vendored
122
vendor/github.com/hashicorp/packer-plugin-docker/post-processor/docker-tag/post-processor.go
generated
vendored
|
@ -1,122 +0,0 @@
|
||||||
//go:generate mapstructure-to-hcl2 -type Config
|
|
||||||
|
|
||||||
package dockertag
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"fmt"
|
|
||||||
|
|
||||||
"github.com/hashicorp/hcl/v2/hcldec"
|
|
||||||
"github.com/hashicorp/packer-plugin-docker/builder/docker"
|
|
||||||
dockerimport "github.com/hashicorp/packer-plugin-docker/post-processor/docker-import"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/common"
|
|
||||||
packersdk "github.com/hashicorp/packer-plugin-sdk/packer"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/template/config"
|
|
||||||
"github.com/hashicorp/packer-plugin-sdk/template/interpolate"
|
|
||||||
)
|
|
||||||
|
|
||||||
const BuilderId = "packer.post-processor.docker-tag"
|
|
||||||
|
|
||||||
type Config struct {
|
|
||||||
common.PackerConfig `mapstructure:",squash"`
|
|
||||||
|
|
||||||
Repository string `mapstructure:"repository"`
|
|
||||||
// Kept for backwards compatability
|
|
||||||
Tag []string `mapstructure:"tag"`
|
|
||||||
Tags []string `mapstructure:"tags"`
|
|
||||||
Force bool
|
|
||||||
|
|
||||||
ctx interpolate.Context
|
|
||||||
}
|
|
||||||
|
|
||||||
type PostProcessor struct {
|
|
||||||
Driver docker.Driver
|
|
||||||
|
|
||||||
config Config
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PostProcessor) ConfigSpec() hcldec.ObjectSpec { return p.config.FlatMapstructure().HCL2Spec() }
|
|
||||||
|
|
||||||
func (p *PostProcessor) Configure(raws ...interface{}) error {
|
|
||||||
err := config.Decode(&p.config, &config.DecodeOpts{
|
|
||||||
PluginType: BuilderId,
|
|
||||||
Interpolate: true,
|
|
||||||
InterpolateContext: &p.config.ctx,
|
|
||||||
InterpolateFilter: &interpolate.RenderFilter{
|
|
||||||
Exclude: []string{},
|
|
||||||
},
|
|
||||||
}, raws...)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
// combine Tag and Tags fields
|
|
||||||
allTags := p.config.Tags
|
|
||||||
allTags = append(allTags, p.config.Tag...)
|
|
||||||
|
|
||||||
p.config.Tags = allTags
|
|
||||||
|
|
||||||
return nil
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func (p *PostProcessor) PostProcess(ctx context.Context, ui packersdk.Ui, artifact packersdk.Artifact) (packersdk.Artifact, bool, bool, error) {
|
|
||||||
if len(p.config.Tag) > 0 {
|
|
||||||
ui.Say("Deprecation warning: \"tag\" option has been replaced with " +
|
|
||||||
"\"tags\". In future versions of Packer, this configuration may " +
|
|
||||||
"not work. Please call `packer fix` on your template to update.")
|
|
||||||
}
|
|
||||||
|
|
||||||
if artifact.BuilderId() != BuilderId &&
|
|
||||||
artifact.BuilderId() != dockerimport.BuilderId {
|
|
||||||
err := fmt.Errorf(
|
|
||||||
"Unknown artifact type: %s\nCan only tag from Docker builder artifacts.",
|
|
||||||
artifact.BuilderId())
|
|
||||||
return nil, false, true, err
|
|
||||||
}
|
|
||||||
|
|
||||||
driver := p.Driver
|
|
||||||
if driver == nil {
|
|
||||||
// If no driver is set, then we use the real driver
|
|
||||||
driver = &docker.DockerDriver{Ctx: &p.config.ctx, Ui: ui}
|
|
||||||
}
|
|
||||||
|
|
||||||
importRepo := p.config.Repository
|
|
||||||
var lastTaggedRepo = importRepo
|
|
||||||
RepoTags := []string{}
|
|
||||||
|
|
||||||
if len(p.config.Tags) > 0 {
|
|
||||||
for _, tag := range p.config.Tags {
|
|
||||||
local := importRepo + ":" + tag
|
|
||||||
ui.Message("Tagging image: " + artifact.Id())
|
|
||||||
ui.Message("Repository: " + local)
|
|
||||||
|
|
||||||
err := driver.TagImage(artifact.Id(), local, p.config.Force)
|
|
||||||
if err != nil {
|
|
||||||
return nil, false, true, err
|
|
||||||
}
|
|
||||||
|
|
||||||
RepoTags = append(RepoTags, local)
|
|
||||||
lastTaggedRepo = local
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
ui.Message("Tagging image: " + artifact.Id())
|
|
||||||
ui.Message("Repository: " + importRepo)
|
|
||||||
err := driver.TagImage(artifact.Id(), importRepo, p.config.Force)
|
|
||||||
if err != nil {
|
|
||||||
return nil, false, true, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Build the artifact
|
|
||||||
artifact = &docker.ImportArtifact{
|
|
||||||
BuilderIdValue: BuilderId,
|
|
||||||
Driver: driver,
|
|
||||||
IdValue: lastTaggedRepo,
|
|
||||||
StateData: map[string]interface{}{"docker_tags": RepoTags},
|
|
||||||
}
|
|
||||||
|
|
||||||
// If we tag an image and then delete it, there was no point in creating the
|
|
||||||
// tag. Override users to force us to always keep the input artifact.
|
|
||||||
return artifact, true, true, nil
|
|
||||||
}
|
|
|
@ -1,53 +0,0 @@
|
||||||
// Code generated by "mapstructure-to-hcl2 -type Config"; DO NOT EDIT.
|
|
||||||
|
|
||||||
package dockertag
|
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/hashicorp/hcl/v2/hcldec"
|
|
||||||
"github.com/zclconf/go-cty/cty"
|
|
||||||
)
|
|
||||||
|
|
||||||
// FlatConfig is an auto-generated flat version of Config.
|
|
||||||
// Where the contents of a field with a `mapstructure:,squash` tag are bubbled up.
|
|
||||||
type FlatConfig struct {
|
|
||||||
PackerBuildName *string `mapstructure:"packer_build_name" cty:"packer_build_name" hcl:"packer_build_name"`
|
|
||||||
PackerBuilderType *string `mapstructure:"packer_builder_type" cty:"packer_builder_type" hcl:"packer_builder_type"`
|
|
||||||
PackerCoreVersion *string `mapstructure:"packer_core_version" cty:"packer_core_version" hcl:"packer_core_version"`
|
|
||||||
PackerDebug *bool `mapstructure:"packer_debug" cty:"packer_debug" hcl:"packer_debug"`
|
|
||||||
PackerForce *bool `mapstructure:"packer_force" cty:"packer_force" hcl:"packer_force"`
|
|
||||||
PackerOnError *string `mapstructure:"packer_on_error" cty:"packer_on_error" hcl:"packer_on_error"`
|
|
||||||
PackerUserVars map[string]string `mapstructure:"packer_user_variables" cty:"packer_user_variables" hcl:"packer_user_variables"`
|
|
||||||
PackerSensitiveVars []string `mapstructure:"packer_sensitive_variables" cty:"packer_sensitive_variables" hcl:"packer_sensitive_variables"`
|
|
||||||
Repository *string `mapstructure:"repository" cty:"repository" hcl:"repository"`
|
|
||||||
Tag []string `mapstructure:"tag" cty:"tag" hcl:"tag"`
|
|
||||||
Tags []string `mapstructure:"tags" cty:"tags" hcl:"tags"`
|
|
||||||
Force *bool `cty:"force" hcl:"force"`
|
|
||||||
}
|
|
||||||
|
|
||||||
// FlatMapstructure returns a new FlatConfig.
|
|
||||||
// FlatConfig is an auto-generated flat version of Config.
|
|
||||||
// Where the contents a fields with a `mapstructure:,squash` tag are bubbled up.
|
|
||||||
func (*Config) FlatMapstructure() interface{ HCL2Spec() map[string]hcldec.Spec } {
|
|
||||||
return new(FlatConfig)
|
|
||||||
}
|
|
||||||
|
|
||||||
// HCL2Spec returns the hcl spec of a Config.
|
|
||||||
// This spec is used by HCL to read the fields of Config.
|
|
||||||
// The decoded values from this spec will then be applied to a FlatConfig.
|
|
||||||
func (*FlatConfig) HCL2Spec() map[string]hcldec.Spec {
|
|
||||||
s := map[string]hcldec.Spec{
|
|
||||||
"packer_build_name": &hcldec.AttrSpec{Name: "packer_build_name", Type: cty.String, Required: false},
|
|
||||||
"packer_builder_type": &hcldec.AttrSpec{Name: "packer_builder_type", Type: cty.String, Required: false},
|
|
||||||
"packer_core_version": &hcldec.AttrSpec{Name: "packer_core_version", Type: cty.String, Required: false},
|
|
||||||
"packer_debug": &hcldec.AttrSpec{Name: "packer_debug", Type: cty.Bool, Required: false},
|
|
||||||
"packer_force": &hcldec.AttrSpec{Name: "packer_force", Type: cty.Bool, Required: false},
|
|
||||||
"packer_on_error": &hcldec.AttrSpec{Name: "packer_on_error", Type: cty.String, Required: false},
|
|
||||||
"packer_user_variables": &hcldec.AttrSpec{Name: "packer_user_variables", Type: cty.Map(cty.String), Required: false},
|
|
||||||
"packer_sensitive_variables": &hcldec.AttrSpec{Name: "packer_sensitive_variables", Type: cty.List(cty.String), Required: false},
|
|
||||||
"repository": &hcldec.AttrSpec{Name: "repository", Type: cty.String, Required: false},
|
|
||||||
"tag": &hcldec.AttrSpec{Name: "tag", Type: cty.List(cty.String), Required: false},
|
|
||||||
"tags": &hcldec.AttrSpec{Name: "tags", Type: cty.List(cty.String), Required: false},
|
|
||||||
"force": &hcldec.AttrSpec{Name: "force", Type: cty.Bool, Required: false},
|
|
||||||
}
|
|
||||||
return s
|
|
||||||
}
|
|
|
@ -415,10 +415,6 @@ github.com/hashicorp/hcl/v2/hclwrite
|
||||||
github.com/hashicorp/hcl/v2/json
|
github.com/hashicorp/hcl/v2/json
|
||||||
# github.com/hashicorp/packer-plugin-docker v0.0.2
|
# github.com/hashicorp/packer-plugin-docker v0.0.2
|
||||||
github.com/hashicorp/packer-plugin-docker/builder/docker
|
github.com/hashicorp/packer-plugin-docker/builder/docker
|
||||||
github.com/hashicorp/packer-plugin-docker/post-processor/docker-import
|
|
||||||
github.com/hashicorp/packer-plugin-docker/post-processor/docker-push
|
|
||||||
github.com/hashicorp/packer-plugin-docker/post-processor/docker-save
|
|
||||||
github.com/hashicorp/packer-plugin-docker/post-processor/docker-tag
|
|
||||||
# github.com/hashicorp/packer-plugin-sdk v0.0.14
|
# github.com/hashicorp/packer-plugin-sdk v0.0.14
|
||||||
## explicit
|
## explicit
|
||||||
github.com/hashicorp/packer-plugin-sdk/acctest
|
github.com/hashicorp/packer-plugin-sdk/acctest
|
||||||
|
|
Loading…
Reference in New Issue