Commit 2f09eb5b authored by Mitchell Hashimoto's avatar Mitchell Hashimoto
Browse files

post-processor/vagrant: vmware

parent 23e73b12
main actions/fix-check-links azr/mini-dag azr_acc_test_install_n_run_single_plugins azr_implicit_requried_plugin_2 azr_remove_amazon_builder b-azure_arm-cert-timeout backport/brk.feat/remove-website-code/horribly-finer-bison backport/clarify-builders-page/promptly-fun-cheetah backport/nywilken/update-plugins-link/steadily-ace-bear backport/update-docs-hcp-packer-ga/deeply-capital-malamute backport/update-docs-hcp-packer-ga/slowly-golden-narwhal backport/update-docs-hcp-packer-ga/solely-renewing-chipmunk brk.feat/mdx-v2 build-after-tests bump_hcp_sdk_go config_docs crt-onboarding-test d-powershell-generated-docs dependabot/github_actions/slackapi/slack-github-action-1.19.0 example-test extract_outscale f-inspect-regression fix_1000 fix_100000 hcp-packer-registry-pps improved-error-handling-hcp-packer linode-hcp-ready mode-check nywilken/update-external-plugins packer-plugin-dev-documentation-updates poc/packer-init pr/10199 release/1.7.x release/1.8.x revert-6594-mode-check stable-website testing_hcp_rewrite_two update-alert-banner update-community-codeowners update_sdk use_progress_bar validate_locals vscode-customization wilken/hcl2_upgrade-legacy-mode wilken/implicitly-required-plugins-legacy-mode wilken/packer-legacy-mode wilken/packer-par-client zs.draft-empty-page-check-script 1.5.0 v1.8.0 v1.7.10 v1.7.9 v1.7.8 v1.7.7 v1.7.6 v1.7.5 v1.7.4 v1.7.3 v1.7.2 v1.7.1 v1.7.0 v1.6.6 v1.6.5 v1.6.4 v1.6.3 v1.6.2 v1.6.1 v1.6.0 v1.5.6 v1.5.5 v1.5.4 v1.5.3 v1.5.2 v1.5.1 v1.5.0 v1.4.5 v1.4.4 v1.4.3 v1.4.2 v1.4.1 v1.4.0 v1.3.5 v1.3.4 v1.3.3 v1.3.2 v1.3.1 v1.3.0 v1.2.5 v1.2.4 v1.2.3 v1.2.2 v1.2.1 v1.2.0 v1.1.3 v1.1.2 v1.1.1 v1.1.0 v1.0.4 v1.0.3 v1.0.2 v1.0.1 v1.0.0 v1.0.0-rc3 v1.0.0-rc2 v1.0.0-rc1 v0.12.3 v0.12.2 v0.12.1 v0.12.0 v0.11.0 v0.10.2 v0.10.1 v0.10.0 v0.9.0 v0.9.0-rc2 v0.8.6 v0.8.5 v0.8.3 v0.8.2 v0.8.1 v0.8.0 v0.7.5 v0.7.2 v0.7.1 v0.7.0 v0.6.1 v0.6.0 nightly list
No related merge requests found
Showing with 9 additions and 127 deletions
+9 -127
package vagrant
import (
"compress/flate"
"fmt"
"github.com/mitchellh/packer/common"
"github.com/mitchellh/packer/packer"
"io/ioutil"
"os"
"path/filepath"
"strconv"
)
type VMwareBoxConfig struct {
common.PackerConfig `mapstructure:",squash"`
type VMwareProvider struct{}
OutputPath string `mapstructure:"output"`
VagrantfileTemplate string `mapstructure:"vagrantfile_template"`
CompressionLevel string `mapstructure:"compression_level"`
tpl *packer.ConfigTemplate
}
type VMwareBoxPostProcessor struct {
config VMwareBoxConfig
}
func (p *VMwareBoxPostProcessor) Configure(raws ...interface{}) error {
md, err := common.DecodeConfig(&p.config, raws...)
if err != nil {
return err
}
p.config.tpl, err = packer.NewConfigTemplate()
if err != nil {
return err
}
p.config.tpl.UserVars = p.config.PackerUserVars
// Accumulate any errors
errs := common.CheckUnusedConfig(md)
validates := map[string]*string{
"output": &p.config.OutputPath,
"vagrantfile_template": &p.config.VagrantfileTemplate,
"compression_level": &p.config.CompressionLevel,
}
for n, ptr := range validates {
if err := p.config.tpl.Validate(*ptr); err != nil {
errs = packer.MultiErrorAppend(
errs, fmt.Errorf("Error parsing %s: %s", n, err))
}
}
if errs != nil && len(errs.Errors) > 0 {
return errs
}
return nil
}
func (p *VMwareBoxPostProcessor) PostProcess(ui packer.Ui, artifact packer.Artifact) (packer.Artifact, bool, error) {
// Compile the output path
outputPath, err := p.config.tpl.Process(p.config.OutputPath, &OutputPathTemplate{
ArtifactId: artifact.Id(),
BuildName: p.config.PackerBuildName,
Provider: "vmware",
})
if err != nil {
return nil, false, err
}
// Create a temporary directory for us to build the contents of the box in
dir, err := ioutil.TempDir("", "packer")
if err != nil {
return nil, false, err
}
defer os.RemoveAll(dir)
func (p *VMwareProvider) Process(ui packer.Ui, artifact packer.Artifact, dir string) (vagrantfile string, metadata map[string]interface{}, err error) {
// Create the metadata
metadata = map[string]interface{}{"provider": "vmware_desktop"}
// Copy all of the original contents into the temporary directory
for _, path := range artifact.Files() {
ui.Message(fmt.Sprintf("Copying: %s", path))
dstPath := filepath.Join(dir, filepath.Base(path))
if err := CopyContents(dstPath, path); err != nil {
return nil, false, err
}
}
if p.config.VagrantfileTemplate != "" {
f, err := os.Open(p.config.VagrantfileTemplate)
if err != nil {
return nil, false, err
}
defer f.Close()
contents, err := ioutil.ReadAll(f)
if err != nil {
return nil, false, err
}
// Create the Vagrantfile from the template
vf, err := os.Create(filepath.Join(dir, "Vagrantfile"))
if err != nil {
return nil, false, err
if err = CopyContents(dstPath, path); err != nil {
return
}
defer vf.Close()
vagrantfileContents, err := p.config.tpl.Process(string(contents), nil)
if err != nil {
return nil, false, fmt.Errorf("Error writing Vagrantfile: %s", err)
}
vf.Write([]byte(vagrantfileContents))
vf.Close()
}
var level int = flate.DefaultCompression
if p.config.CompressionLevel != "" {
level, err = strconv.Atoi(p.config.CompressionLevel)
if err != nil {
return nil, false, err
}
}
// Create the metadata
metadata := map[string]string{"provider": "vmware_desktop"}
if err := WriteMetadata(dir, metadata); err != nil {
return nil, false, err
}
// Compress the directory to the given output path
ui.Message(fmt.Sprintf("Compressing box..."))
if err := DirToBox(outputPath, dir, ui, level); err != nil {
return nil, false, err
}
return NewArtifact("vmware", outputPath), false, nil
return
}
package vagrant
import (
"github.com/mitchellh/packer/packer"
"testing"
)
func TestVMwareBoxPostProcessor_ImplementsPostProcessor(t *testing.T) {
var raw interface{}
raw = &VMwareBoxPostProcessor{}
if _, ok := raw.(packer.PostProcessor); !ok {
t.Fatalf("VMware PostProcessor should be a PostProcessor")
}
func TestVMwareProvider_impl(t *testing.T) {
var _ Provider = new(VMwareProvider)
}
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment