helm rollback

pull/1908/head
sauman 9 years ago
parent c2e451f36e
commit 9c76cbb87a

@ -21,16 +21,19 @@ import (
"google.golang.org/grpc"
"fmt"
"gopkg.in/square/go-jose.v1/json"
"k8s.io/helm/pkg/chartutil"
hapi_chart "k8s.io/helm/pkg/proto/hapi/chart"
rs "k8s.io/helm/pkg/proto/hapi/release"
rls "k8s.io/helm/pkg/proto/hapi/services"
hapi "k8s.io/helm/tillerc/api"
cs "k8s.io/helm/tillerc/client/clientset"
//clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/api"
clientset "k8s.io/kubernetes/pkg/client/clientset_generated/internalclientset"
"k8s.io/kubernetes/pkg/client/restclient"
rest "k8s.io/kubernetes/pkg/client/restclient"
"k8s.io/kubernetes/pkg/client/unversioned/clientcmd"
"strconv"
)
const (
@ -279,13 +282,13 @@ func (h *Client) list(ctx context.Context, req *rls.ListReleasesRequest) (*rls.L
// Executes tiller.InstallRelease RPC.
func (h *Client) install(ctx context.Context, req *rls.InstallReleaseRequest) (*rls.InstallReleaseResponse, 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.InstallRelease(ctx, req)*/
/* c, err := grpc.Dial(h.opts.host, grpc.WithInsecure())
if err != nil {
return nil, err
}
defer c.Close()
rlc := rls.NewReleaseServiceClient(c)
return rlc.InstallRelease(ctx, req)*/
resp := &rls.InstallReleaseResponse{}
releaseObj := makeReleaseObject(req)
release := new(hapi.Release)
@ -332,14 +335,14 @@ func (h *Client) delete(ctx context.Context, req *rls.UninstallReleaseRequest) (
// Executes tiller.UpdateRelease RPC.
func (h *Client) update(ctx context.Context, req *rls.UpdateReleaseRequest) (*rls.UpdateReleaseResponse, error) {
/* c, err := grpc.Dial(h.opts.host, grpc.WithInsecure())
if err != nil {
return nil, err
}
defer c.Close()
/* c, err := grpc.Dial(h.opts.host, grpc.WithInsecure())
if err != nil {
return nil, err
}
defer c.Close()
rlc := rls.NewReleaseServiceClient(c)
return rlc.UpdateRelease(ctx, req)*/
rlc := rls.NewReleaseServiceClient(c)
return rlc.UpdateRelease(ctx, req)*/
resp := &rls.UpdateReleaseResponse{}
client, err := getRESTClient()
// get the release
@ -374,14 +377,31 @@ func (h *Client) update(ctx context.Context, req *rls.UpdateReleaseRequest) (*rl
// Executes tiller.RollbackRelease RPC.
func (h *Client) rollback(ctx context.Context, req *rls.RollbackReleaseRequest) (*rls.RollbackReleaseResponse, 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.RollbackRelease(ctx, req)*/
resp := &rls.RollbackReleaseResponse{}
config, err := getConfig()
if err != nil {
return nil, err
return resp, err
}
defer c.Close()
rlc := rls.NewReleaseServiceClient(c)
return rlc.RollbackRelease(ctx, req)
client, err := clientset.NewForConfig(config)
event, err := makeEventForRollBack(req)
event.InvolvedObject.Name = (req.Name + "-v" + strconv.Itoa(int(req.Version)))
if err != nil {
return resp, err
}
_, err = client.Core().Events("default").Create(event) // TODO namespace
if err != nil {
return resp, err
}
// TODO make response
return resp, nil
}
// Executes tiller.GetReleaseStatus RPC.
@ -479,3 +499,42 @@ func getRESTClient() (*cs.ExtensionsClient, error) {
}
return client, nil
}
type RollbackReq struct {
// dry_run, if true, will run through the release logic but no create
DryRun bool `protobuf:"varint,2,opt,name=dry_run,json=dryRun" json:"dry_run,omitempty"`
// DisableHooks causes the server to skip running any hooks for the rollback
DisableHooks bool `protobuf:"varint,3,opt,name=disable_hooks,json=disableHooks" json:"disable_hooks,omitempty"`
// Performs pods restart for resources if applicable
Recreate bool `protobuf:"varint,5,opt,name=recreate" json:"recreate,omitempty"`
// timeout specifies the max amount of time any kubernetes client command can run.
Timeout int64 `protobuf:"varint,6,opt,name=timeout" json:"timeout,omitempty"`
}
func makeEventForRollBack(req *rls.RollbackReleaseRequest) (*api.Event, error) {
r := RollbackReq{
DryRun: req.DryRun,
Recreate: req.Recreate,
DisableHooks: req.DisableHooks,
Timeout: req.Timeout,
}
message, err := json.Marshal(r)
if err != nil {
return &api.Event{}, err
}
event := &api.Event{
ObjectMeta: api.ObjectMeta{
Name: "releaseRollback",
Namespace: "default", //TODO handle namespace
},
InvolvedObject: api.ObjectReference{
Kind: "release",
Namespace: "default", //TODO handle namespace
},
Reason: "releaseRollback",
Message: string(message),
Type: api.EventTypeNormal,
Count: 1,
}
return event, nil
}

Loading…
Cancel
Save