diff --git a/cmd/rudder/rudder.go b/cmd/rudder/rudder.go index a0832d5d7..dfdc498b3 100644 --- a/cmd/rudder/rudder.go +++ b/cmd/rudder/rudder.go @@ -94,8 +94,13 @@ func (r *ReleaseModuleServiceServer) UpgradeRelease(ctx context.Context, in *rud return &rudderAPI.UpgradeReleaseResponse{}, err } -func (r *ReleaseModuleServiceServer) ReleaseStatus(context.Context, *rudderAPI.ReleaseStatusRequest) (*rudderAPI.ReleaseStatusResponse, error) { +func (r *ReleaseModuleServiceServer) ReleaseStatus(ctx context.Context, in *rudderAPI.ReleaseStatusRequest) (*rudderAPI.ReleaseStatusResponse, error) { grpclog.Print("status") - return &rudderAPI.ReleaseStatusResponse{}, nil + resp, err := kubeClient.Get(in.Release.Namespace, bytes.NewBufferString(in.Release.Manifest)) + in.Release.Info.Status.Resources = resp + return &rudderAPI.ReleaseStatusResponse{ + Release: in.Release, + Info: in.Release.Info, + }, err } diff --git a/pkg/rudder/client.go b/pkg/rudder/client.go index 220418cb4..b9fa1283a 100644 --- a/pkg/rudder/client.go +++ b/pkg/rudder/client.go @@ -66,3 +66,14 @@ func RollbackRelease(req *rudderAPI.RollbackReleaseRequest) (*rudderAPI.Rollback client := rudderAPI.NewReleaseModuleServiceClient(conn) return client.RollbackRelease(context.Background(), req) } + +// ReleaseStatus calls Rudder ReleaseStatus method which should perform update +func ReleaseStatus(req *rudderAPI.ReleaseStatusRequest) (*rudderAPI.ReleaseStatusResponse, error) { + conn, err := grpc.Dial(grpcAddr, grpc.WithInsecure()) + if err != nil { + return nil, err + } + defer conn.Close() + client := rudderAPI.NewReleaseModuleServiceClient(conn) + return client.ReleaseStatus(context.Background(), req) +} diff --git a/pkg/tiller/release_modules.go b/pkg/tiller/release_modules.go index 5e18af15f..d85ca3d9b 100644 --- a/pkg/tiller/release_modules.go +++ b/pkg/tiller/release_modules.go @@ -31,6 +31,7 @@ type ReleaseModule interface { Create(r *release.Release, req *services.InstallReleaseRequest, env *environment.Environment) error Update(current, target *release.Release, req *services.UpdateReleaseRequest, env *environment.Environment) error Rollback(current, target *release.Release, req *services.RollbackReleaseRequest, env *environment.Environment) error + Status(r *release.Release, req *services.GetReleaseStatusRequest, env *environment.Environment) (string, error) } // LocalReleaseModule is a local implementation of ReleaseModule @@ -54,6 +55,10 @@ func (m *LocalReleaseModule) Rollback(current, target *release.Release, req *ser return env.KubeClient.Update(target.Namespace, c, t, req.Recreate, req.Timeout, req.Wait) } +func (m *LocalReleaseModule) Status(r *release.Release, req *services.GetReleaseStatusRequest, env *environment.Environment) (string, error) { + return env.KubeClient.Get(r.Namespace, bytes.NewBufferString(r.Manifest)) +} + // RemoteReleaseModule is a ReleaseModule which calls Rudder service to operate on a release type RemoteReleaseModule struct{} @@ -89,3 +94,9 @@ func (m *RemoteReleaseModule) Rollback(current, target *release.Release, req *se _, err := rudder.RollbackRelease(rollback) return err } + +func (m *RemoteReleaseModule) Status(r *release.Release, req *services.GetReleaseStatusRequest, env *environment.Environment) (string, error) { + statusRequest := &rudderAPI.ReleaseStatusRequest{Release: r} + resp, err := rudder.ReleaseStatus(statusRequest) + return resp.Info.Status.Resources, err +} diff --git a/pkg/tiller/release_server.go b/pkg/tiller/release_server.go index 962b8bd90..63090e2a9 100644 --- a/pkg/tiller/release_server.go +++ b/pkg/tiller/release_server.go @@ -262,8 +262,7 @@ func (s *ReleaseServer) GetReleaseStatus(c ctx.Context, req *services.GetRelease // Ok, we got the status of the release as we had jotted down, now we need to match the // manifest we stashed away with reality from the cluster. - kubeCli := s.env.KubeClient - resp, err := kubeCli.Get(rel.Namespace, bytes.NewBufferString(rel.Manifest)) + resp, err := s.ReleaseModule.Status(rel, req, s.env) if sc == release.Status_DELETED || sc == release.Status_FAILED { // Skip errors if this is already deleted or failed. return statusResp, nil