From 4868f5872e1536d2ab70eefa8cec9f75264cc01d Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Tue, 9 Aug 2016 16:46:15 +0300 Subject: [PATCH 1/2] post-processor/manifest: add artifact file size to manifest Signed-off-by: Vasiliy Tolstov --- post-processor/manifest/artifact.go | 23 ++++++++++++++++------- post-processor/manifest/post-processor.go | 9 ++++++++- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/post-processor/manifest/artifact.go b/post-processor/manifest/artifact.go index 781a54266..50ecc15a0 100644 --- a/post-processor/manifest/artifact.go +++ b/post-processor/manifest/artifact.go @@ -4,13 +4,18 @@ import "fmt" const BuilderId = "packer.post-processor.manifest" +type ArtifactFile struct { + Name string `json:"name"` + Size int64 `json:"size"` +} + type Artifact struct { - BuildName string `json:"name"` - BuilderType string `json:"builder_type"` - BuildTime int64 `json:"build_time"` - ArtifactFiles []string `json:"files"` - ArtifactId string `json:"artifact_id"` - PackerRunUUID string `json:"packer_run_uuid"` + BuildName string `json:"name"` + BuilderType string `json:"builder_type"` + BuildTime int64 `json:"build_time"` + ArtifactFiles []ArtifactFile `json:"files"` + ArtifactId string `json:"artifact_id"` + PackerRunUUID string `json:"packer_run_uuid"` } func (a *Artifact) BuilderId() string { @@ -18,7 +23,11 @@ func (a *Artifact) BuilderId() string { } func (a *Artifact) Files() []string { - return a.ArtifactFiles + var files []string + for _, af := range a.ArtifactFiles { + files = append(files, af.Name) + } + return files } func (a *Artifact) Id() string { diff --git a/post-processor/manifest/post-processor.go b/post-processor/manifest/post-processor.go index bd6648523..7e67b8cad 100644 --- a/post-processor/manifest/post-processor.go +++ b/post-processor/manifest/post-processor.go @@ -54,9 +54,16 @@ func (p *PostProcessor) PostProcess(ui packer.Ui, source packer.Artifact) (packe artifact := &Artifact{} var err error + var fi os.FileInfo // Create the current artifact. - artifact.ArtifactFiles = source.Files() + for _, name := range source.Files() { + if fi, err = os.Stat(name); err == nil { + artifact.ArtifactFiles = append(artifact.ArtifactFiles, ArtifactFile{Name: name, Size: fi.Size()}) + } else { + artifact.ArtifactFiles = append(artifact.ArtifactFiles, ArtifactFile{Name: name}) + } + } artifact.ArtifactId = source.Id() artifact.BuilderType = p.config.PackerBuilderType artifact.BuildName = p.config.PackerBuildName From fe76081e0a77ef62575b8cbe170a2ff98d638735 Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Tue, 9 Aug 2016 17:41:21 +0300 Subject: [PATCH 2/2] post-processor/manifest: allow to strip path components from artifact path Signed-off-by: Vasiliy Tolstov --- post-processor/manifest/post-processor.go | 16 +++++++++++----- .../source/docs/post-processors/manifest.html.md | 4 +++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/post-processor/manifest/post-processor.go b/post-processor/manifest/post-processor.go index 7e67b8cad..0b543d3a4 100644 --- a/post-processor/manifest/post-processor.go +++ b/post-processor/manifest/post-processor.go @@ -6,6 +6,7 @@ import ( "io/ioutil" "log" "os" + "path/filepath" "time" "github.com/mitchellh/packer/common" @@ -17,9 +18,9 @@ import ( type Config struct { common.PackerConfig `mapstructure:",squash"` - Filename string `mapstructure:"filename"` - - ctx interpolate.Context + Filename string `mapstructure:"filename"` + StripPath bool `mapstructure:"strip_path"` + ctx interpolate.Context } type PostProcessor struct { @@ -58,11 +59,16 @@ func (p *PostProcessor) PostProcess(ui packer.Ui, source packer.Artifact) (packe // Create the current artifact. for _, name := range source.Files() { + af := ArtifactFile{} if fi, err = os.Stat(name); err == nil { - artifact.ArtifactFiles = append(artifact.ArtifactFiles, ArtifactFile{Name: name, Size: fi.Size()}) + af.Size = fi.Size() + } + if p.config.StripPath { + af.Name = filepath.Base(name) } else { - artifact.ArtifactFiles = append(artifact.ArtifactFiles, ArtifactFile{Name: name}) + af.Name = name } + artifact.ArtifactFiles = append(artifact.ArtifactFiles, af) } artifact.ArtifactId = source.Id() artifact.BuilderType = p.config.PackerBuilderType diff --git a/website/source/docs/post-processors/manifest.html.md b/website/source/docs/post-processors/manifest.html.md index 88e658288..2130c53a4 100644 --- a/website/source/docs/post-processors/manifest.html.md +++ b/website/source/docs/post-processors/manifest.html.md @@ -22,6 +22,7 @@ You can specify manifest more than once and write each build to its own file, or ### Optional: - `filename` (string) The manifest will be written to this file. This defaults to `packer-manifest.json`. +- `strip_path` (bool) Write only filename without the path to the manifest file. This defaults to false. ### Example Configuration @@ -32,7 +33,8 @@ You can simply add `{"type":"manifest"}` to your post-processor section. Below i "post-processors": [ { "type": "manifest", - "filename": "manifest.json" + "filename": "manifest.json", + "strip_path": true } ] }