From cb12cd666882129d8af2a1c5319d34614e3f50a5 Mon Sep 17 00:00:00 2001 From: c22 Date: Thu, 14 Sep 2017 11:35:54 +1000 Subject: [PATCH] Fix facterVar separator bug reported in #5338 --- provisioner/puppet-masterless/provisioner.go | 7 +++++-- provisioner/puppet-server/provisioner.go | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/provisioner/puppet-masterless/provisioner.go b/provisioner/puppet-masterless/provisioner.go index 1c4ad3bc1..064947654 100644 --- a/provisioner/puppet-masterless/provisioner.go +++ b/provisioner/puppet-masterless/provisioner.go @@ -71,6 +71,7 @@ type guestOSTypeConfig struct { stagingDir string executeCommand string facterVarsFmt string + facterVarsJoiner string modulePathJoiner string } @@ -86,6 +87,7 @@ var guestOSTypeConfigs = map[string]guestOSTypeConfig{ "{{if ne .ExtraArguments \"\"}}{{.ExtraArguments}} {{end}}" + "{{.ManifestFile}}", facterVarsFmt: "FACTER_%s='%s'", + facterVarsJoiner: " ", modulePathJoiner: ":", }, provisioner.WindowsOSType: { @@ -98,7 +100,8 @@ var guestOSTypeConfigs = map[string]guestOSTypeConfig{ "--detailed-exitcodes " + "{{if ne .ExtraArguments \"\"}}{{.ExtraArguments}} {{end}}" + "{{.ManifestFile}}", - facterVarsFmt: "SET \"FACTER_%s=%s\" &", + facterVarsFmt: "SET \"FACTER_%s=%s\"", + facterVarsJoiner: " & ", modulePathJoiner: ";", }, } @@ -282,7 +285,7 @@ func (p *Provisioner) Provision(ui packer.Ui, comm packer.Communicator) error { // Execute Puppet p.config.ctx.Data = &ExecuteTemplate{ - FacterVars: strings.Join(facterVars, " "), + FacterVars: strings.Join(facterVars, p.guestOSTypeConfig.facterVarsJoiner), HieraConfigPath: remoteHieraConfigPath, ManifestDir: remoteManifestDir, ManifestFile: remoteManifestFile, diff --git a/provisioner/puppet-server/provisioner.go b/provisioner/puppet-server/provisioner.go index 4da3ecbc6..d7744952e 100644 --- a/provisioner/puppet-server/provisioner.go +++ b/provisioner/puppet-server/provisioner.go @@ -15,9 +15,10 @@ import ( ) type guestOSTypeConfig struct { - executeCommand string - facterVarsFmt string - stagingDir string + executeCommand string + facterVarsFmt string + facterVarsJoiner string + stagingDir string } var guestOSTypeConfigs = map[string]guestOSTypeConfig{ @@ -31,8 +32,9 @@ var guestOSTypeConfigs = map[string]guestOSTypeConfig{ "{{if ne .ClientCertPath \"\"}}--certdir='{{.ClientCertPath}}' {{end}}" + "{{if ne .ClientPrivateKeyPath \"\"}}--privatekeydir='{{.ClientPrivateKeyPath}}' {{end}}" + "--detailed-exitcodes", - facterVarsFmt: "FACTER_%s='%s'", - stagingDir: "/tmp/packer-puppet-server", + facterVarsFmt: "FACTER_%s='%s'", + facterVarsJoiner: " ", + stagingDir: "/tmp/packer-puppet-server", }, provisioner.WindowsOSType: { executeCommand: "{{.FacterVars}} " + @@ -44,8 +46,9 @@ var guestOSTypeConfigs = map[string]guestOSTypeConfig{ "{{if ne .ClientCertPath \"\"}}--certdir='{{.ClientCertPath}}' {{end}}" + "{{if ne .ClientPrivateKeyPath \"\"}}--privatekeydir='{{.ClientPrivateKeyPath}}' {{end}}" + "--detailed-exitcodes", - facterVarsFmt: "SET \"FACTER_%s=%s\" &", - stagingDir: "C:/Windows/Temp/packer-puppet-server", + facterVarsFmt: "SET \"FACTER_%s=%s\"", + facterVarsJoiner: " & ", + stagingDir: "C:/Windows/Temp/packer-puppet-server", }, } @@ -222,7 +225,7 @@ func (p *Provisioner) Provision(ui packer.Ui, comm packer.Communicator) error { // Execute Puppet p.config.ctx.Data = &ExecuteTemplate{ - FacterVars: strings.Join(facterVars, " "), + FacterVars: strings.Join(facterVars, p.guestOSTypeConfig.facterVarsJoiner), ClientCertPath: remoteClientCertPath, ClientPrivateKeyPath: remoteClientPrivateKeyPath, PuppetNode: p.config.PuppetNode,