From 8bb7798ea7b6556dc1efcf7e742dc3d4a1d112c3 Mon Sep 17 00:00:00 2001 From: Matthew Patton Date: Fri, 27 Apr 2018 20:40:13 -0400 Subject: [PATCH] standardize across both puppet-{masterless,server} move comments outside of datastructure remove duplicated section fix line-endings Golang doesn't use C-style comments run gofmt for alignment and whitespace management remove danling "options" and fix class reference syncronize tests to new command structure --- .gitattributes | 3 +- provisioner/puppet-masterless/provisioner.go | 12 ++-- .../puppet-masterless/provisioner_test.go | 12 ++-- provisioner/puppet-server/provisioner.go | 59 +++++-------------- 4 files changed, 28 insertions(+), 58 deletions(-) diff --git a/.gitattributes b/.gitattributes index 7230f36f4..07e7d50e4 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,2 +1,3 @@ -common/test-fixtures/root/* eol=lf \ No newline at end of file +common/test-fixtures/root/* eol=lf +*.go eol=lf diff --git a/provisioner/puppet-masterless/provisioner.go b/provisioner/puppet-masterless/provisioner.go index c7360c646..61494c9d7 100644 --- a/provisioner/puppet-masterless/provisioner.go +++ b/provisioner/puppet-masterless/provisioner.go @@ -65,12 +65,10 @@ type Config struct { // If true, packer will ignore all exit-codes from a puppet run IgnoreExitCodes bool `mapstructure:"ignore_exit_codes"` - - // The Guest OS Type (unix or windows) - GuestOSType string `mapstructure:"guest_os_type"` } type guestOSTypeConfig struct { + tempDir string stagingDir string executeCommand string facterVarsFmt string @@ -78,8 +76,10 @@ type guestOSTypeConfig struct { modulePathJoiner string } +// FIXME assumes both Packer host and target are same OS var guestOSTypeConfigs = map[string]guestOSTypeConfig{ provisioner.UnixOSType: { + tempDir: "/tmp", stagingDir: "/tmp/packer-puppet-masterless", executeCommand: "cd {{.WorkingDir}} && " + `{{if ne .FacterVars ""}}{{.FacterVars}} {{end}}` + @@ -97,9 +97,10 @@ var guestOSTypeConfigs = map[string]guestOSTypeConfig{ modulePathJoiner: ":", }, provisioner.WindowsOSType: { - stagingDir: "C:/Windows/Temp/packer-puppet-masterless", + tempDir: filepath.ToSlash(os.Getenv("TEMP")), + stagingDir: filepath.ToSlash(os.Getenv("SYSTEMROOT")) + "/Temp/packer-puppet-masterless", executeCommand: "cd {{.WorkingDir}} && " + - "{{.FacterVars}} && " + + `{{if ne .FacterVars ""}}{{.FacterVars}} && {{end}}` + `{{if ne .PuppetBinDir ""}}{{.PuppetBinDir}}/{{end}}` + "puppet apply --detailed-exitcodes " + "{{if .Debug}}--debug {{end}}" + @@ -121,7 +122,6 @@ type Provisioner struct { } type ExecuteTemplate struct { - WorkingDir string FacterVars string HieraConfigPath string ModulePath string diff --git a/provisioner/puppet-masterless/provisioner_test.go b/provisioner/puppet-masterless/provisioner_test.go index dd6725768..fe64f28bd 100644 --- a/provisioner/puppet-masterless/provisioner_test.go +++ b/provisioner/puppet-masterless/provisioner_test.go @@ -53,7 +53,7 @@ func TestGuestOSConfig_empty_unix(t *testing.T) { } expected := "cd /tmp/packer-puppet-masterless && " + - "sudo -E puppet apply --verbose --modulepath='' --detailed-exitcodes /r/m/f" + "sudo -E puppet apply --detailed-exitcodes /r/m/f" assert.Equal(t, expected, command) } @@ -89,8 +89,8 @@ func TestGuestOSConfig_full_unix(t *testing.T) { expected := "cd /tmp/packer-puppet-masterless && FACTER_lhs='rhs' FACTER_foo='bar' " + "sudo -E puppet apply " + - "--verbose --modulepath='/m/p:/a/b' --hiera_config='/h/c/p' " + - "--manifestdir='/r/m/d' --detailed-exitcodes /r/m/f" + "--detailed-exitcodes --modulepath='/m/p:/a/b' --hiera_config='/h/c/p' " + + "--manifestdir='/r/m/d' /r/m/f" assert.Equal(t, expected, command) } @@ -115,7 +115,7 @@ func TestGuestOSConfig_empty_windows(t *testing.T) { t.Fatalf("err: %s", err) } - expected := "cd C:/Windows/Temp/packer-puppet-masterless && && puppet apply --verbose --modulepath='' --detailed-exitcodes /r/m/f" + expected := "cd C:/Windows/Temp/packer-puppet-masterless && puppet apply --detailed-exitcodes /r/m/f" assert.Equal(t, expected, command) } @@ -152,8 +152,8 @@ func TestGuestOSConfig_full_windows(t *testing.T) { expected := "cd C:/Windows/Temp/packer-puppet-masterless && " + "SET \"FACTER_lhs=rhs\" & SET \"FACTER_foo=bar\" && " + - "puppet apply --verbose --modulepath='/m/p;/a/b' --hiera_config='/h/c/p' " + - "--manifestdir='/r/m/d' --detailed-exitcodes /r/m/f" + "puppet apply --detailed-exitcodes --modulepath='/m/p;/a/b' --hiera_config='/h/c/p' " + + "--manifestdir='/r/m/d' /r/m/f" assert.Equal(t, expected, command) } diff --git a/provisioner/puppet-server/provisioner.go b/provisioner/puppet-server/provisioner.go index 46263e72b..8bd29a40e 100644 --- a/provisioner/puppet-server/provisioner.go +++ b/provisioner/puppet-server/provisioner.go @@ -5,6 +5,7 @@ package puppetserver import ( "fmt" "os" + "path/filepath" "strings" "github.com/hashicorp/packer/common" @@ -14,44 +15,6 @@ import ( "github.com/hashicorp/packer/template/interpolate" ) -type guestOSTypeConfig struct { - executeCommand string - facterVarsFmt string - facterVarsJoiner string - stagingDir string -} - -var guestOSTypeConfigs = map[string]guestOSTypeConfig{ - provisioner.UnixOSType: { - executeCommand: "{{.FacterVars}} {{if .Sudo}}sudo -E {{end}}" + - "{{if ne .PuppetBinDir \"\"}}{{.PuppetBinDir}}/{{end}}puppet agent " + - "--onetime --no-daemonize " + - "{{if ne .PuppetServer \"\"}}--server='{{.PuppetServer}}' {{end}}" + - "{{if ne .Options \"\"}}{{.Options}} {{end}}" + - "{{if ne .PuppetNode \"\"}}--certname={{.PuppetNode}} {{end}}" + - "{{if ne .ClientCertPath \"\"}}--certdir='{{.ClientCertPath}}' {{end}}" + - "{{if ne .ClientPrivateKeyPath \"\"}}--privatekeydir='{{.ClientPrivateKeyPath}}' {{end}}" + - "--detailed-exitcodes", - facterVarsFmt: "FACTER_%s='%s'", - facterVarsJoiner: " ", - stagingDir: "/tmp/packer-puppet-server", - }, - provisioner.WindowsOSType: { - executeCommand: "{{.FacterVars}} " + - "{{if ne .PuppetBinDir \"\"}}{{.PuppetBinDir}}/{{end}}puppet agent " + - "--onetime --no-daemonize " + - "{{if ne .PuppetServer \"\"}}--server='{{.PuppetServer}}' {{end}}" + - "{{if ne .Options \"\"}}{{.Options}} {{end}}" + - "{{if ne .PuppetNode \"\"}}--certname={{.PuppetNode}} {{end}}" + - "{{if ne .ClientCertPath \"\"}}--certdir='{{.ClientCertPath}}' {{end}}" + - "{{if ne .ClientPrivateKeyPath \"\"}}--privatekeydir='{{.ClientPrivateKeyPath}}' {{end}}" + - "--detailed-exitcodes", - facterVarsFmt: "SET \"FACTER_%s=%s\"", - facterVarsJoiner: " & ", - stagingDir: "C:/Windows/Temp/packer-puppet-server", - }, -} - type Config struct { common.PackerConfig `mapstructure:",squash"` ctx interpolate.Context @@ -87,6 +50,10 @@ type Config struct { // permissions in this directory. StagingDir string `mapstructure:"staging_dir"` + // The directory from which the command will be executed. + // Packer requires the directory to exist when running puppet. + WorkingDir string `mapstructure:"working_directory"` + // The directory that contains the puppet binary. // E.g. if it can't be found on the standard path. PuppetBinDir string `mapstructure:"puppet_bin_dir"` @@ -103,12 +70,13 @@ type guestOSTypeConfig struct { facterVarsJoiner string } +// FIXME assumes both Packer host and target are same OS var guestOSTypeConfigs = map[string]guestOSTypeConfig{ provisioner.UnixOSType: { - tempDir: "/tmp", + tempDir: "/tmp", stagingDir: "/tmp/packer-puppet-server", executeCommand: "cd {{.WorkingDir}} && " + - "{{.FacterVars}}" + + `{{if ne .FacterVars ""}}{{.FacterVars}} {{end}}` + "{{if .Sudo}}sudo -E {{end}}" + `{{if ne .PuppetBinDir ""}}{{.PuppetBinDir}}/{{end}}` + "puppet agent --onetime --no-daemonize --detailed-exitcodes " + @@ -122,10 +90,10 @@ var guestOSTypeConfigs = map[string]guestOSTypeConfig{ facterVarsJoiner: " ", }, provisioner.WindowsOSType: { - tempDir: path.filepath.ToSlash(os.Getenv("TEMP")), - stagingDir: path.filepath.ToSlash(os.Getenv("SYSTEMROOT")) + "/Temp/packer-puppet-server", + tempDir: filepath.ToSlash(os.Getenv("TEMP")), + stagingDir: filepath.ToSlash(os.Getenv("SYSTEMROOT")) + "/Temp/packer-puppet-server", executeCommand: "cd {{.WorkingDir}} && " + - "{{.FacterVars}} " + + `{{if ne .FacterVars ""}}{{.FacterVars}} && {{end}}` + `{{if ne .PuppetBinDir ""}}{{.PuppetBinDir}}/{{end}}` + "puppet agent --onetime --no-daemonize --detailed-exitcodes " + "{{if .Debug}}--debug {{end}}" + @@ -151,9 +119,11 @@ type ExecuteTemplate struct { ClientPrivateKeyPath string PuppetNode string PuppetServer string - ExtraArguments string PuppetBinDir string Sudo bool + WorkingDir string + Debug bool + ExtraArguments string } func (p *Provisioner) Prepare(raws ...interface{}) error { @@ -274,7 +244,6 @@ func (p *Provisioner) Provision(ui packer.Ui, comm packer.Communicator) error { ClientPrivateKeyPath: remoteClientPrivateKeyPath, PuppetNode: p.config.PuppetNode, PuppetServer: p.config.PuppetServer, - Options: p.config.Options, PuppetBinDir: p.config.PuppetBinDir, Sudo: !p.config.PreventSudo, WorkingDir: p.config.WorkingDir,