From d1445bc6fe331eb20270f771795b621ed6ea9059 Mon Sep 17 00:00:00 2001 From: David Danzilio Date: Tue, 27 Jan 2015 14:11:08 -0500 Subject: [PATCH 1/3] Make PackerBuildName and PackerBuilderType available as Facts during a masterless run similar to the way we do with the Shell provisioner. --- provisioner/puppet-masterless/provisioner.go | 2 ++ .../provisioners/puppet-masterless.html.markdown | 14 ++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/provisioner/puppet-masterless/provisioner.go b/provisioner/puppet-masterless/provisioner.go index 307ecce38..c1085e2f4 100644 --- a/provisioner/puppet-masterless/provisioner.go +++ b/provisioner/puppet-masterless/provisioner.go @@ -147,6 +147,8 @@ func (p *Provisioner) Prepare(raws ...interface{}) error { newFacts[k] = v } + newFacts["packer_build_name"] = p.config.PackerBuildName + newFacts["packer_builder_type"] = p.config.PackerBuilderType p.config.Facter = newFacts // Validation diff --git a/website/source/docs/provisioners/puppet-masterless.html.markdown b/website/source/docs/provisioners/puppet-masterless.html.markdown index bc65ae812..d0d8e1c95 100644 --- a/website/source/docs/provisioners/puppet-masterless.html.markdown +++ b/website/source/docs/provisioners/puppet-masterless.html.markdown @@ -106,3 +106,17 @@ can contain various template variables, defined below: * `ModulePath` - The paths to the module directories. * `Sudo` - A boolean of whether to `sudo` the command or not, depending on the value of the `prevent_sudo` configuration. + +## Default Facts + +In addition to being able to specify custom Facter facts using the `facter` +configuration, the provisioner automatically defines certain commonly useful +facts: + +* `packer_build_name` is set to the name of the build that Packer is running. + This is most useful when Packer is making multiple builds and you want to + distinguish them in your Hiera hierarchy. + +* `packer_builder_type` is the type of the builder that was used to create the + machine that Puppet is running on. This is useful if you want to run only + certain parts of your Puppet code on systems built with certain builders. From 8404f6ce860c6dbba8d9889f4769b5cdfd384635 Mon Sep 17 00:00:00 2001 From: David Danzilio Date: Tue, 24 Feb 2015 22:52:09 -0500 Subject: [PATCH 2/3] Taking a stab at a test for the facter facts --- .../puppet-masterless/provisioner_test.go | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) diff --git a/provisioner/puppet-masterless/provisioner_test.go b/provisioner/puppet-masterless/provisioner_test.go index 0d5576b6b..7ed4a59cd 100644 --- a/provisioner/puppet-masterless/provisioner_test.go +++ b/provisioner/puppet-masterless/provisioner_test.go @@ -133,3 +133,47 @@ func TestProvisionerPrepare_modulePaths(t *testing.T) { t.Fatalf("err: %s", err) } } + +func TestProvisionerPrepare_facterFacts(t *testing.T) { + config := testConfig() + + delete(config, "facter") + p := new(Provisioner) + err := p.Prepare(config) + if err != nil { + t.Fatalf("err: %s", err) + } + + // Test with malformed fact + config["facter"] = "fact=stringified" + p = new(Provisioner) + err = p.Prepare(config) + if err == nil { + t.Fatal("should be an error") + } + + // Test with a good one + td, err := ioutil.TempDir("", "packer") + if err != nil { + t.Fatalf("error: %s", err) + } + defer os.RemoveAll(td) + + facts := make(map[string]string) + facts["fact_name"] = "fact_value" + config["facter"] = facts + + p = new(Provisioner) + err = p.Prepare(config) + if err != nil { + t.Fatalf("err: %s", err) + } + + // Make sure the default facts are present + delete(config, "facter") + p = new(Provisioner) + err = p.Prepare(config) + if p.config.Facter == nil { + t.Fatalf("err: Default facts are not set in the Puppet provisioner!") + } +} From 7e3d172581aff9d5dc967019ef4901b5d5572642 Mon Sep 17 00:00:00 2001 From: David Danzilio Date: Tue, 24 Feb 2015 22:56:37 -0500 Subject: [PATCH 3/3] Fixing spacing on line 162 and 164 of provisioner/puppet-masterless/provisioner_test.go --- provisioner/puppet-masterless/provisioner_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/provisioner/puppet-masterless/provisioner_test.go b/provisioner/puppet-masterless/provisioner_test.go index 7ed4a59cd..42ddd9d7a 100644 --- a/provisioner/puppet-masterless/provisioner_test.go +++ b/provisioner/puppet-masterless/provisioner_test.go @@ -159,9 +159,9 @@ func TestProvisionerPrepare_facterFacts(t *testing.T) { } defer os.RemoveAll(td) - facts := make(map[string]string) + facts := make(map[string]string) facts["fact_name"] = "fact_value" - config["facter"] = facts + config["facter"] = facts p = new(Provisioner) err = p.Prepare(config) @@ -169,7 +169,7 @@ func TestProvisionerPrepare_facterFacts(t *testing.T) { t.Fatalf("err: %s", err) } - // Make sure the default facts are present + // Make sure the default facts are present delete(config, "facter") p = new(Provisioner) err = p.Prepare(config)