diff --git a/common/step_download.go b/common/step_download.go index af7708e6e..cc076a182 100644 --- a/common/step_download.go +++ b/common/step_download.go @@ -7,6 +7,7 @@ import ( "fmt" "log" "os" + "path/filepath" "runtime" "strings" @@ -101,10 +102,21 @@ func init() { // can leave the source file where it is & tell us where it is. Copy: true, } + getters["smb"] = &getter.FileGetter{ + Copy: true, + } } } func (s *StepDownload) download(ctx context.Context, ui packer.Ui, source string) (string, error) { + if runtime.GOOS == "windows" { + // Check that the user specified a UNC path, and promote it to an smb:// uri. + if strings.HasPrefix(source, "\\\\") && len(source) > 2 && source[2] != '?' { + source = filepath.ToSlash(source[2:]) + source = fmt.Sprintf("smb://%s", source) + } + } + u, err := urlhelper.Parse(source) if err != nil { return "", fmt.Errorf("url parse: %s", err)