feat(chart_upload): add chart_upload.go

Also removed the now unused deploy subpackage and fixed the makefile
accordingly.
pull/291/head
Matt Butcher 9 years ago
parent 9be64e52ed
commit 7f87745dc7

@ -4,7 +4,9 @@ endif
BIN_DIR := bin
DIST_DIR := _dist
GO_PACKAGES := cmd/helm dm deploy format kubectl
#GO_PACKAGES := cmd/helm dm format kubectl
GO_DIRS ?= $(shell glide nv -x )
GO_PKGS ?= $(shell glide nv)
MAIN_GO := github.com/deis/helm-dm/cmd/helm
HELM_BIN := helm-dm
PATH_WITH_HELM = PATH="$(shell pwd)/$(BIN_DIR)/helm:$(PATH)"
@ -44,19 +46,19 @@ install: build
install -m 755 bin/${HELM_BIN} ${DESTDIR}/usr/local/bin/${HELM_BIN}
quicktest:
$(PATH_WITH_HELM) go test -short $(addprefix ./,$(GO_PACKAGES))
$(PATH_WITH_HELM) go test -short ${GO_PKGS}
test: test-style
$(PATH_WITH_HELM) go test -v -cover $(addprefix ./,$(GO_PACKAGES))
$(PATH_WITH_HELM) go test -v -cover ${GO_PKGS}
test-style:
@if [ $(shell gofmt -e -l -s $(GO_PACKAGES)) ]; then \
echo "gofmt check failed:"; gofmt -e -d -s $(GO_PACKAGES); exit 1; \
@if [ $(shell gofmt -e -l -s $(GO_DIRS)) ]; then \
echo "gofmt check failed:"; gofmt -e -d -s $(GO_DIRS); exit 1; \
fi
@for i in . $(GO_PACKAGES); do \
@for i in . $(GO_DIRS); do \
golint $$i; \
done
@for i in . $(GO_PACKAGES); do \
@for i in . $(GO_DIRS); do \
go vet github.com/deis/helm-dm/$$i; \
done

@ -0,0 +1,99 @@
package main
import (
"errors"
"fmt"
"os"
"regexp"
"strings"
"github.com/aokoli/goutils"
"github.com/codegangsta/cli"
"github.com/deis/helm-dm/format"
"github.com/kubernetes/deployment-manager/chart"
)
func uploadChart(c *cli.Context) error {
args := c.Args()
if len(args) < 1 {
format.Err("First argument, filename, is required. Try 'helm deploy --help'")
os.Exit(1)
}
cname := c.String("name")
fname := args[0]
if fname == "" {
return errors.New("A filename must be specified. For a tar archive, this is the name of the root template in the archive.")
}
_, err := doUpload(fname, cname, c)
return err
}
func doUpload(filename, cname string, cxt *cli.Context) (string, error) {
fi, err := os.Stat(filename)
if err != nil {
return "", err
}
if fi.IsDir() {
format.Info("Chart is directory")
c, err := chart.LoadDir(filename)
if err != nil {
return "", err
}
if cname == "" {
cname = genName(c.Chartfile().Name)
}
// TODO: Is it better to generate the file in temp dir like this, or
// just put it in the CWD?
//tdir, err := ioutil.TempDir("", "helm-")
//if err != nil {
//format.Warn("Could not create temporary directory. Using .")
//tdir = "."
//} else {
//defer os.RemoveAll(tdir)
//}
tdir := "."
tfile, err := chart.Save(c, tdir)
if err != nil {
return "", err
}
filename = tfile
} else if cname == "" {
n, _, e := parseTarName(filename)
if e != nil {
return "", e
}
cname = n
}
// TODO: Add a version build metadata on the chart.
if cxt.Bool("dry-run") {
format.Info("Prepared deploy %q using file %q", cname, filename)
return "", nil
}
c := client(cxt)
return c.PostChart(filename, cname)
}
func genName(pname string) string {
s, _ := goutils.RandomAlphaNumeric(8)
return fmt.Sprintf("%s-%s", pname, s)
}
func parseTarName(name string) (string, string, error) {
tnregexp := regexp.MustCompile(chart.TarNameRegex)
if strings.HasSuffix(name, ".tgz") {
name = strings.TrimSuffix(name, ".tgz")
}
v := tnregexp.FindStringSubmatch(name)
if v == nil {
return name, "", fmt.Errorf("invalid name %s", name)
}
return v[1], v[2], nil
}

@ -1,26 +0,0 @@
package deploy
import (
"os"
"github.com/kubernetes/deployment-manager/common"
)
// Deployment describes a deployment of a package.
type Deployment struct {
// Name is the Deployment name. Autogenerated if empty.
Name string
// Filename is the filename for the base deployment.
Filename string
// Imports is a list of imported files.
Imports []string
// Properties to pass into the template.
Properties map[string]interface{}
// Input is a file containing templates. It may be os.Stdin.
Input *os.File
// Repository is the location of the templates.
Repository string
// The template, typically generated by the Deployment.
Template *common.Template
}
Loading…
Cancel
Save