diff --git a/cmd/helm/delete.go b/cmd/helm/delete.go index f65b9d4d8..e339dd227 100644 --- a/cmd/helm/delete.go +++ b/cmd/helm/delete.go @@ -40,6 +40,7 @@ type deleteCmd struct { disableHooks bool purge bool timeout int64 + namespace string out io.Writer client helm.Interface @@ -75,6 +76,7 @@ func newDeleteCmd(c helm.Interface, out io.Writer) *cobra.Command { } f := cmd.Flags() + f.StringVar(&del.namespace, "namespace", "default", "namespace to uninstall the release") f.BoolVar(&del.dryRun, "dry-run", false, "simulate a delete") f.BoolVar(&del.disableHooks, "no-hooks", false, "prevent hooks from running during deletion") f.BoolVar(&del.purge, "purge", false, "remove the release from the store and make its name free for later use") @@ -90,7 +92,7 @@ func (d *deleteCmd) run() error { helm.DeletePurge(d.purge), helm.DeleteTimeout(d.timeout), } - res, err := d.client.DeleteRelease(d.name, opts...) + res, err := d.client.DeleteRelease(d.name, d.namespace, opts...) if res != nil && res.Info != "" { fmt.Fprintln(d.out, res.Info) } diff --git a/cmd/helm/install.go b/cmd/helm/install.go index 86ff15efe..0f375dd79 100644 --- a/cmd/helm/install.go +++ b/cmd/helm/install.go @@ -204,12 +204,16 @@ func (i *installCmd) run() error { return prettyError(err) } - rel := res.GetRelease() + +/* rel := res.GetRelease() + if rel == nil { + return nil + }*/ + rel := res.Release if rel == nil { return nil } i.printRelease(rel) - // If this is a dry run, we can't display status. if i.dryRun { return nil diff --git a/pkg/helm/client.go b/pkg/helm/client.go index 7b294b118..de812fa93 100644 --- a/pkg/helm/client.go +++ b/pkg/helm/client.go @@ -108,7 +108,7 @@ func (h *Client) InstallRelease(chstr, ns string, opts ...InstallOption) (*rls.I } // DeleteRelease uninstalls a named release and returns the response. -func (h *Client) DeleteRelease(rlsName string, opts ...DeleteOption) (*rls.UninstallReleaseResponse, error) { +func (h *Client) DeleteRelease(rlsName string, namespace string, opts ...DeleteOption) (*rls.UninstallReleaseResponse, error) { // apply the uninstall options for _, opt := range opts { opt(&h.opts) @@ -133,7 +133,7 @@ func (h *Client) DeleteRelease(rlsName string, opts ...DeleteOption) (*rls.Unins return nil, err } } - return h.delete(ctx, req) + return h.delete(ctx, namespace, req) } // UpdateRelease updates a release to a new/different chart @@ -279,12 +279,13 @@ func (h *Client) install(ctx context.Context, req *rls.InstallReleaseRequest) (* return rlc.InstallRelease(ctx, req)*/ resp := &rls.InstallReleaseResponse{} releaseObj := makeReleaseObject(req) + releaseObj.Spec.Version = 1 release := new(hapi.Release) client, err := getRESTClient() if err != nil { return resp, err } - err = client.RESTClient().Post().Namespace(releaseObj.Namespace).Resource("releases").Body(releaseObj).Do().Into(release) + err = client.RESTClient().Post().Namespace(req.Namespace).Resource("releases").Body(releaseObj).Do().Into(release) if err != nil { return resp, err } @@ -302,19 +303,19 @@ func (h *Client) install(ctx context.Context, req *rls.InstallReleaseRequest) (* } // Executes tiller.UninstallRelease RPC. -func (h *Client) delete(ctx context.Context, req *rls.UninstallReleaseRequest) (*rls.UninstallReleaseResponse, error) { - /* c, err := grpc.Dial(h.opts.host, grpc.WithInsecure()) +func (h *Client) delete(ctx context.Context,namespace string, req *rls.UninstallReleaseRequest) (*rls.UninstallReleaseResponse, error) { + c, err := grpc.Dial(h.opts.host, grpc.WithInsecure()) if err != nil { return nil, err } defer c.Close() rlc := rls.NewReleaseServiceClient(c) - return rlc.UninstallRelease(ctx, req)*/ + return rlc.UninstallRelease(ctx, req) resp := &rls.UninstallReleaseResponse{} client, err := getRESTClient() // TODO handle response - err = client.RESTClient().Delete().Namespace("default").Resource("releases").Name(req.Name).Do().Error() // TODO handle namespace + err = client.RESTClient().Delete().Namespace(namespace).Resource("releases").Name(req.Name).Do().Error() // TODO handle namespace if err != nil { return resp, err } @@ -395,14 +396,48 @@ func (h *Client) rollback(ctx context.Context, req *rls.RollbackReleaseRequest) // Executes tiller.GetReleaseStatus RPC. func (h *Client) status(ctx context.Context, req *rls.GetReleaseStatusRequest) (*rls.GetReleaseStatusResponse, error) { - c, err := grpc.Dial(h.opts.host, grpc.WithInsecure()) +/* c, err := grpc.Dial(h.opts.host, grpc.WithInsecure()) if err != nil { return nil, err } defer c.Close() rlc := rls.NewReleaseServiceClient(c) - return rlc.GetReleaseStatus(ctx, req) + return rlc.GetReleaseStatus(ctx, req)*/ + resp := &rls.GetReleaseStatusResponse{} + client, err := getRESTClient() + if err != nil { + return resp, err + } + release := new(hapi.Release) + err = client.RESTClient().Get().Namespace("default").Resource("releases").Name(req.Name).Do().Into(release) // TODO handle namespace + if err != nil { + return resp, err + } + v := release.Spec.Version + releaseVersion := new(hapi.ReleaseVersion) + name := req.Name + "-v" + strconv.Itoa(int(v)) + duration :=time.Duration(5) * time.Second + for i:=0;i<=10;i++ { + time.Sleep(duration) + err = client.RESTClient().Get().Namespace("default").Resource("releaseversions").Name(name).Do().Into(releaseVersion) // TODO handle namespace + if err != nil { + continue + }else { + break + } + } + if err != nil { + return resp, err + } + resp.Name = release.Name + resp.Namespace = release.Namespace + resp.Info = new(rs.Info) + resp.Info.Status = releaseVersion.Status.Status +/* *resp.Info.FirstDeployed = releaseVersion.Status.FirstDeployed //TODO + *resp.Info.LastDeployed = releaseVersion.Status.LastDeployed + *resp.Info.Deleted = releaseVersion.Status.Deleted*/ + return resp, nil } // Executes tiller.GetReleaseContent RPC. diff --git a/pkg/helm/interface.go b/pkg/helm/interface.go index 5c6921afe..a4e3d0601 100644 --- a/pkg/helm/interface.go +++ b/pkg/helm/interface.go @@ -24,7 +24,7 @@ import ( type Interface interface { ListReleases(opts ...ReleaseListOption) (*rls.ListReleasesResponse, error) InstallRelease(chStr, namespace string, opts ...InstallOption) (*rls.InstallReleaseResponse, error) - DeleteRelease(rlsName string, opts ...DeleteOption) (*rls.UninstallReleaseResponse, error) + DeleteRelease(rlsName string, namespace string, opts ...DeleteOption) (*rls.UninstallReleaseResponse, error) ReleaseStatus(rlsName string, opts ...StatusOption) (*rls.GetReleaseStatusResponse, error) UpdateRelease(rlsName, chStr string, opts ...UpdateOption) (*rls.UpdateReleaseResponse, error) RollbackRelease(rlsName string, opts ...RollbackOption) (*rls.RollbackReleaseResponse, error) diff --git a/tillerc/api/types.go b/tillerc/api/types.go index b9184b0bd..9cb4adcfe 100644 --- a/tillerc/api/types.go +++ b/tillerc/api/types.go @@ -92,18 +92,18 @@ type ReleaseList struct { type ReleaseVersion struct { unversioned.TypeMeta `json:",inline,omitempty"` api.ObjectMeta `json:"metadata,omitempty"` - Spec ReleaseVersionSpec `json:"spec,omitempty"` - Status ReleaseVersionStatus `json:"status,omitempty"` + Spec ReleaseVersionSpec `json:"spec,omitempty"` + Status ReleaseStatus `json:"status,omitempty"` } type ReleaseVersionSpec struct { ReleaseSpec ReleaseSpec `json:"inline,omitempty"` } -type ReleaseVersionStatus struct { +/*type ReleaseVersionStatus struct { Status *hapi_release.Status `protobuf:"bytes,1,opt,name=status" json:"status,omitempty"` Deployed unversioned.Time `protobuf:"bytes,2,opt,name=deployed" json:"deployed,omitempty"` -} +}*/ type ReleaseVersionList struct { unversioned.TypeMeta `json:",inline"`