diff --git a/cmd/helm/deploy.go b/cmd/helm/deploy.go index aa21e5b37..e436ae46c 100644 --- a/cmd/helm/deploy.go +++ b/cmd/helm/deploy.go @@ -10,7 +10,6 @@ import ( "github.com/aokoli/goutils" "github.com/codegangsta/cli" dep "github.com/deis/helm-dm/deploy" - "github.com/deis/helm-dm/dm" "github.com/deis/helm-dm/format" "github.com/kubernetes/deployment-manager/chart" ) @@ -79,10 +78,10 @@ func deploy(c *cli.Context) error { d.Input = os.Stdin } - return doDeploy(d, c.GlobalString("host"), c.Bool("dry-run")) + return doDeploy(d, c) } -func doDeploy(cfg *dep.Deployment, host string, dry bool) error { +func doDeploy(cfg *dep.Deployment, cxt *cli.Context) error { if cfg.Filename == "" { return errors.New("A filename must be specified. For a tar archive, this is the name of the root template in the archive.") } @@ -125,12 +124,12 @@ func doDeploy(cfg *dep.Deployment, host string, dry bool) error { cfg.Name = n } - if dry { + if cxt.Bool("dry-run") { format.Info("Prepared deploy %q using file %q", cfg.Name, cfg.Filename) return nil } - c := dm.NewClient(host) + c := client(cxt) return c.DeployChart(cfg.Filename, cfg.Name) } diff --git a/deploy/deploy.go b/deploy/deploy.go index 41a9188d9..a29b2b275 100644 --- a/deploy/deploy.go +++ b/deploy/deploy.go @@ -1,30 +1,11 @@ package deploy import ( - //"archive/tar" - //"errors" - //"fmt" "os" - //"strings" - //"github.com/ghodss/yaml" - "github.com/kubernetes/deployment-manager/chart" "github.com/kubernetes/deployment-manager/common" - //"github.com/kubernetes/deployment-manager/expandybird/expander" - //"github.com/kubernetes/deployment-manager/registry" ) -// Deployer is capable of deploying an object to a back-end. -type Deployer interface { - // Prepare prepares the local side of a deployment. - Prepare() error - - // Commit pushes a deployment and checks that it is completed. - // - // This sends the data to the given host. - Commit(host string) error -} - // Deployment describes a deployment of a package. type Deployment struct { // Name is the Deployment name. Autogenerated if empty. @@ -42,162 +23,4 @@ type Deployment struct { // The template, typically generated by the Deployment. Template *common.Template - - lchart *chart.Chart -} - -// Prepare loads templates and checks for client-side errors. -// -// This will generate the Template based on other information. -func (d *Deployment) Prepare() error { - - // Is Filename a local dir, a local file, or a remote URL? - fi, err := os.Stat(d.Filename) - if err != nil { - return err - } - - var c *chart.Chart - if fi.IsDir() { - c, err = chart.LoadDir(d.Filename) - if err != nil { - return err - } - } else { - c, err = chart.Load(d.Filename) - if err != nil { - return err - } - } - - // Override name if we need to - - // Properties - - d.lchart = c - return nil -} - -// Chart retrieves the chart from teh deployment. -func (d *Deployment) Chart() *chart.Chart { - return d.lchart -} - -// Commit prepares the Deployment and then commits it to the remote processor. -func (d *Deployment) Commit(host string) error { - return nil -} - -/* -// resolveTemplate resolves what kind of template is being loaded, and then returns the template. -func (d *Deployment) resolveTemplate() (*common.Template, error) { - // If some input has been specified, read it. - if d.Input != nil { - // Assume this is a tar archive. - tpl, err := expander.NewTemplateFromArchive(d.Filename, d.Input, d.Imports) - if err == nil { - return tpl, err - } else if err != tar.ErrHeader { - return nil, err - } - - // If we get here, the file is not a tar archive. - if _, err := os.Stdin.Seek(0, 0); err != nil { - return nil, err - } - return expander.NewTemplateFromReader(d.Filename, d.Input, d.Imports) - } - - // Non-Stdin case - if len(d.Imports) > 0 { - if t, err := registryType(d.Filename); err != nil { - return expander.NewTemplateFromRootTemplate(d.Filename) - } else { - return buildTemplateFromType(t, d.Repository, d.Properties) - } - } - return expander.NewTemplateFromFileNames(d.Filename, d.Imports) -} - -// registryType is a placeholder until registry.ParseType() is merged. -func registryType(name string) (*registry.Type, error) { - tList := strings.Split(name, ":") - if len(tList) != 2 { - return nil, errors.New("No version") - } - - semver, err := registry.ParseSemVer(tList[1]) - if err != nil { - return nil, err - } - tt := registry.Type{Version: semver} - - cList := strings.Split(tList[0], "/") - - if len(cList) == 1 { - tt.Name = tList[0] - } else { - tt.Collection = cList[0] - tt.Name = cList[1] - } - return &tt, nil -} - -// buildTemplateFromType is a straight lift-n-shift from dm.go. -func buildTemplateFromType(t *registry.Type, reg string, props map[string]interface{}) (*common.Template, error) { - // Name the deployment after the type name. - name := fmt.Sprintf("%s:%s", t.Name, t.Version) - git, err := getGitRegistry(reg) - if err != nil { - return nil, err - } - gurls, err := git.GetDownloadURLs(*t) - if err != nil { - return nil, err - } - - config := common.Configuration{Resources: []*common.Resource{&common.Resource{ - Name: name, - Type: gurls[0].Host, - Properties: props, - }}} - - y, err := yaml.Marshal(config) - if err != nil { - return nil, fmt.Errorf("error: %s\ncannot create configuration for deployment: %v\n", err, config) - } - - return &common.Template{ - Name: name, - Content: string(y), - // No imports, as this is a single type from repository. - }, nil -} - -// getGitRegistry returns a registry object for a name. -func getGitRegistry(reg string) (registry.Registry, error) { - s := strings.SplitN(reg, "/", 3) - if len(s) < 2 { - return nil, fmt.Errorf("invalid template registry: %s", reg) - } - - //path := "" - //if len(s) > 2 { - //path = s[3] - //} - - if s[0] == "helm" { - r, err := registry.NewGithubPackageRegistry(s[0], s[1], nil, nil) - if err != nil { - return nil, err - } - return r, nil - } else { - r, err := registry.NewGithubTemplateRegistry(s[0], s[1], nil, nil) - if err != nil { - return nil, err - } - return r, nil - } } -*/ diff --git a/dm/client.go b/dm/client.go index 087d0672b..e03989538 100644 --- a/dm/client.go +++ b/dm/client.go @@ -8,7 +8,7 @@ import ( "net/http" "net/url" "os" - "path" + fancypath "path" "path/filepath" "strings" "time" @@ -177,10 +177,13 @@ func (c *Client) DeployChart(filename, deployname string) error { if err != nil { return err } - defer f.Close() u, err := c.url("/v2/deployments") request, err := http.NewRequest("POST", u, f) + if err != nil { + f.Close() + return err + } // There is an argument to be made for using the legacy x-octet-stream for // this. But since we control both sides, we should use the standard one. @@ -209,7 +212,7 @@ func (c *Client) DeployChart(filename, deployname string) error { if err != nil { return err } - return fmt.Errorf("Failed to post: %d %s - %s", response.StatusCode, response.Status, body) + return fmt.Errorf("failed to post: %d %s - %s", response.StatusCode, response.Status, body) } return nil @@ -218,7 +221,7 @@ func (c *Client) DeployChart(filename, deployname string) error { // GetDeployment retrieves the supplied deployment func (c *Client) GetDeployment(name string) (*common.Deployment, error) { var deployment *common.Deployment - if err := c.CallService(path.Join("deployments", name), "GET", "get deployment", &deployment, nil); err != nil { + if err := c.CallService(fancypath.Join("deployments", name), "GET", "get deployment", &deployment, nil); err != nil { return nil, err } return deployment, nil