From 535bae5c4c425e050ea4fc7eacce63a867553ff0 Mon Sep 17 00:00:00 2001 From: sunlintong Date: Thu, 17 Aug 2023 10:21:33 +0800 Subject: [PATCH 1/2] feat(client): get release status --- client.go | 15 +++++++++++++++ client_test.go | 8 ++++++++ interface.go | 1 + mock/interface.go | 15 +++++++++++++++ mock/mock_test.go | 12 ++++++++++++ 5 files changed, 51 insertions(+) diff --git a/client.go b/client.go index 2c65d157..8019a20e 100644 --- a/client.go +++ b/client.go @@ -265,6 +265,11 @@ func (c *HelmClient) GetRelease(name string) (*release.Release, error) { return c.getRelease(name) } +// ReleaseStatus returns a release and it's status matching the provided 'name'. +func (c *HelmClient) ReleaseStatus(name string, showResources bool, version int) (*release.Release, error) { + return c.releaseStatus(name, showResources, version) +} + // RollbackRelease implicitly rolls back a release to the last revision. func (c *HelmClient) RollbackRelease(spec *ChartSpec) error { return c.rollbackRelease(spec) @@ -816,6 +821,16 @@ func (c *HelmClient) getRelease(name string) (*release.Release, error) { return getReleaseClient.Run(name) } +// releaseStatus returns a release and it's status matching the provided 'name'. +// showResources display the resources of the named release. +// version display the status of the named release with revision. +func (c *HelmClient) releaseStatus(name string, showResources bool, version int) (*release.Release, error) { + releaseStatusClient := action.NewStatus(c.ActionConfig) + releaseStatusClient.ShowResources = showResources + releaseStatusClient.Version = version + return releaseStatusClient.Run(name) +} + // rollbackRelease implicitly rolls back a release to the last revision. func (c *HelmClient) rollbackRelease(spec *ChartSpec) error { client := action.NewRollback(c.ActionConfig) diff --git a/client_test.go b/client_test.go index eb2fdd91..9d5cef73 100644 --- a/client_test.go +++ b/client_test.go @@ -3,6 +3,7 @@ package helmclient import ( "bytes" "context" + "helm.sh/helm/v3/pkg/chartutil" "helm.sh/helm/v3/pkg/action" @@ -328,6 +329,13 @@ func ExampleHelmClient_GetRelease() { } } +func ExampleHelmClient_ReleaseStatus() { + // Get specific details of a deployed release. + if _, err := helmClient.releaseStatus("etcd-operator", true, 0); err != nil { + panic(err) + } +} + func ExampleHelmClient_RollbackRelease() { // Define the released chart to be installed chartSpec := ChartSpec{ diff --git a/interface.go b/interface.go index dd1f4ba3..3656c0f7 100644 --- a/interface.go +++ b/interface.go @@ -20,6 +20,7 @@ type Client interface { ListDeployedReleases() ([]*release.Release, error) ListReleasesByStateMask(action.ListStates) ([]*release.Release, error) GetRelease(name string) (*release.Release, error) + ReleaseStatus(name string, showResources bool, version int) (*release.Release, error) // RollBack is an interface to abstract a rollback action. RollBack GetReleaseValues(name string, allValues bool) (map[string]interface{}, error) diff --git a/mock/interface.go b/mock/interface.go index 0fdc07a9..f32ad10c 100644 --- a/mock/interface.go +++ b/mock/interface.go @@ -188,6 +188,21 @@ func (mr *MockClientMockRecorder) ListReleasesByStateMask(arg0 interface{}) *gom return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ListReleasesByStateMask", reflect.TypeOf((*MockClient)(nil).ListReleasesByStateMask), arg0) } +// ReleaseStatus mocks base method. +func (m *MockClient) ReleaseStatus(name string, showResources bool, version int) (*release.Release, error) { + m.ctrl.T.Helper() + ret := m.ctrl.Call(m, "ReleaseStatus", name, showResources, version) + ret0, _ := ret[0].(*release.Release) + ret1, _ := ret[1].(error) + return ret0, ret1 +} + +// ReleaseStatus indicates an expected call of ReleaseStatus. +func (mr *MockClientMockRecorder) ReleaseStatus(name, showResources, version interface{}) *gomock.Call { + mr.mock.ctrl.T.Helper() + return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ReleaseStatus", reflect.TypeOf((*MockClient)(nil).ReleaseStatus), name, showResources, version) +} + // RollbackRelease mocks base method. func (m *MockClient) RollbackRelease(spec *helmclient.ChartSpec) error { m.ctrl.T.Helper() diff --git a/mock/mock_test.go b/mock/mock_test.go index 6cdfca66..84ed070f 100644 --- a/mock/mock_test.go +++ b/mock/mock_test.go @@ -61,4 +61,16 @@ func TestHelmClientInterfaces(t *testing.T) { panic(err) } }) + + t.Run("ReleaseStatus", func(t *testing.T) { + mockClient.EXPECT().ReleaseStatus(mockedRelease.Name, true, 0). + Return(&release.Release{Name: mockedRelease.Name}, nil) + r, err := mockClient.ReleaseStatus(mockedRelease.Name, true, 0) + if err != nil { + panic(err) + } + if r == nil { + panic(err) + } + }) } From 72c711db7864bc545711e17c2bc84b2b6e58fac0 Mon Sep 17 00:00:00 2001 From: jojotong <100849526+jojotong@users.noreply.github.com> Date: Tue, 19 Sep 2023 14:20:46 +0800 Subject: [PATCH 2/2] fix typo Co-authored-by: Eike David Lenz --- client.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/client.go b/client.go index 8019a20e..97d7dd7c 100644 --- a/client.go +++ b/client.go @@ -822,8 +822,8 @@ func (c *HelmClient) getRelease(name string) (*release.Release, error) { } // releaseStatus returns a release and it's status matching the provided 'name'. -// showResources display the resources of the named release. -// version display the status of the named release with revision. +// showResources displays the resources of the named release. +// version displays the status of the named release with revision. func (c *HelmClient) releaseStatus(name string, showResources bool, version int) (*release.Release, error) { releaseStatusClient := action.NewStatus(c.ActionConfig) releaseStatusClient.ShowResources = showResources