Merge pull request #7705 from hashicorp/7687
fix null file descriptor error
This commit is contained in:
commit
f1b7cc7ede
|
@ -130,7 +130,11 @@ func (c *Communicator) Upload(path string, input io.Reader, fi *os.FileInfo) err
|
|||
}
|
||||
if strings.HasSuffix(path, `\`) {
|
||||
// path is a directory
|
||||
path += filepath.Base((*fi).Name())
|
||||
if fi != nil {
|
||||
path += filepath.Base((*fi).Name())
|
||||
} else {
|
||||
return fmt.Errorf("Was unable to infer file basename for upload.")
|
||||
}
|
||||
}
|
||||
log.Printf("Uploading file to '%s'", path)
|
||||
return wcp.Write(path, input)
|
||||
|
|
|
@ -120,5 +120,25 @@ func TestUpload(t *testing.T) {
|
|||
if downloadedPayload != PAYLOAD {
|
||||
t.Fatalf("files are not equal: expected [%s] length: %v, got [%s] length %v", PAYLOAD, len(PAYLOAD), downloadedPayload, len(downloadedPayload))
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func TestUpload_nilFileInfo(t *testing.T) {
|
||||
wrm := newMockWinRMServer(t)
|
||||
defer wrm.Close()
|
||||
|
||||
c, err := New(&Config{
|
||||
Host: wrm.Host,
|
||||
Port: wrm.Port,
|
||||
Username: "user",
|
||||
Password: "pass",
|
||||
Timeout: 30 * time.Second,
|
||||
})
|
||||
if err != nil {
|
||||
t.Fatalf("error creating communicator: %s", err)
|
||||
}
|
||||
file := "C:\\Temp\\"
|
||||
err = c.Upload(file, strings.NewReader(PAYLOAD), nil)
|
||||
if err == nil {
|
||||
t.Fatalf("Should have errored because of nil fileinfo")
|
||||
}
|
||||
}
|
||||
|
|
|
@ -9,6 +9,7 @@ import (
|
|||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"sort"
|
||||
"strings"
|
||||
"time"
|
||||
|
@ -252,6 +253,14 @@ func (p *Provisioner) Provision(ctx context.Context, ui packer.Ui, comm packer.C
|
|||
ui.Say(fmt.Sprintf("Provisioning with powershell script: %s", path))
|
||||
|
||||
log.Printf("Opening %s for reading", path)
|
||||
fi, err := os.Stat(path)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error stating powershell script: %s", err)
|
||||
}
|
||||
if strings.HasSuffix(p.config.RemotePath, `\`) {
|
||||
// path is a directory
|
||||
p.config.RemotePath += filepath.Base((fi).Name())
|
||||
}
|
||||
f, err := os.Open(path)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error opening powershell script: %s", err)
|
||||
|
@ -272,7 +281,7 @@ func (p *Provisioner) Provision(ctx context.Context, ui packer.Ui, comm packer.C
|
|||
if _, err := f.Seek(0, 0); err != nil {
|
||||
return err
|
||||
}
|
||||
if err := comm.Upload(p.config.RemotePath, f, nil); err != nil {
|
||||
if err := comm.Upload(p.config.RemotePath, f, &fi); err != nil {
|
||||
return fmt.Errorf("Error uploading script: %s", err)
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue