From c7661b1ca2dc1a8dc389fa5bd83e59bd6f9c8604 Mon Sep 17 00:00:00 2001 From: Alex Dadgar Date: Wed, 17 Feb 2016 18:48:13 -0800 Subject: [PATCH 1/2] Copy local files --- client/getter/getter.go | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/client/getter/getter.go b/client/getter/getter.go index 1a721c3f24d4..91fe4fed5dae 100644 --- a/client/getter/getter.go +++ b/client/getter/getter.go @@ -8,11 +8,42 @@ import ( "path/filepath" "runtime" "strings" + "sync" "syscall" gg "github.com/hashicorp/go-getter" ) +var ( + // getters is the map of getters suitable for Nomad. It is initialized once + // and the lock is used to guard access to it. + getters map[string]gg.Getter + lock sync.Mutex +) + +// getClient returns a client that is suitable for Nomad. +func getClient(src, dst string) *gg.Client { + lock.Lock() + defer lock.Unlock() + + // Return the pre-initialized client + if getters == nil { + getters = make(map[string]gg.Getter, len(gg.Getters)) + for k, v := range gg.Getters { + getters[k] = v + } + + getters["file"] = &gg.FileGetter{Copy: true} + } + + return &gg.Client{ + Src: src, + Dst: dst, + Dir: false, // Only support a single file for now. + Getters: getters, + } +} + func GetArtifact(destDir, source, checksum string, logger *log.Logger) (string, error) { if source == "" { return "", fmt.Errorf("Source url is empty in Artifact Getter") @@ -29,7 +60,7 @@ func GetArtifact(destDir, source, checksum string, logger *log.Logger) (string, } artifactFile := filepath.Join(destDir, path.Base(u.Path)) - if err := gg.GetFile(artifactFile, source); err != nil { + if err := getClient(source, artifactFile).Get(); err != nil { return "", fmt.Errorf("Error downloading artifact: %s", err) } From 5ee75e2fa5875af79830c04a87443a28b1c448df Mon Sep 17 00:00:00 2001 From: Alex Dadgar Date: Tue, 23 Feb 2016 10:33:58 -0800 Subject: [PATCH 2/2] Limit the set of downloaders --- client/getter/getter.go | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/client/getter/getter.go b/client/getter/getter.go index 91fe4fed5dae..7dc1b7bd52af 100644 --- a/client/getter/getter.go +++ b/client/getter/getter.go @@ -19,6 +19,9 @@ var ( // and the lock is used to guard access to it. getters map[string]gg.Getter lock sync.Mutex + + // supported is the set of download schemes supported by Nomad + supported = []string{"http", "https", "s3"} ) // getClient returns a client that is suitable for Nomad. @@ -28,12 +31,12 @@ func getClient(src, dst string) *gg.Client { // Return the pre-initialized client if getters == nil { - getters = make(map[string]gg.Getter, len(gg.Getters)) - for k, v := range gg.Getters { - getters[k] = v + getters = make(map[string]gg.Getter, len(supported)) + for _, getter := range supported { + if impl, ok := gg.Getters[getter]; ok { + getters[getter] = impl + } } - - getters["file"] = &gg.FileGetter{Copy: true} } return &gg.Client{