Skip to content

Commit d3a1795

Browse files
committed
feat: return cluster error messages on wait handler
1 parent cca379b commit d3a1795

File tree

2 files changed

+48
-1
lines changed

2 files changed

+48
-1
lines changed

services/ske/wait/wait.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package wait
33
import (
44
"context"
55
"fmt"
6+
"strings"
67
"time"
78

89
"github.com/stackitcloud/stackit-sdk-go/core/wait"
@@ -56,6 +57,18 @@ func CreateOrUpdateClusterWaitHandler(ctx context.Context, a APIClientClusterInt
5657
return true, s, nil
5758
}
5859

60+
// TODO: discuss if we should check for cluster state?
61+
if s.Status.Errors != nil && len(*s.Status.Errors) > 0 {
62+
var errMsgs []string
63+
for _, clusterError := range *s.Status.Errors {
64+
if clusterError.Message != nil && clusterError.Code != nil {
65+
errMsgs = append(errMsgs, fmt.Sprintf("%s %s", *clusterError.Code, *clusterError.Message))
66+
}
67+
}
68+
69+
return true, s, fmt.Errorf(strings.Join(errMsgs, "\n"))
70+
}
71+
5972
if state == ske.CLUSTERSTATUSSTATE_HEALTHY || state == ske.CLUSTERSTATUSSTATE_HIBERNATED {
6073
return true, s, nil
6174
}

services/ske/wait/wait_test.go

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ type apiClientClusterMocked struct {
1818
name string
1919
resourceState ske.ClusterStatusState
2020
invalidArgusInstance bool
21+
errorList *[]ske.ClusterError
2122
}
2223

2324
const testRegion = "eu01"
@@ -45,7 +46,17 @@ func (a *apiClientClusterMocked) GetClusterExecute(_ context.Context, _, _, _ st
4546
return &ske.Cluster{
4647
Name: utils.Ptr("cluster"),
4748
Status: &ske.ClusterStatus{
48-
Aggregated: &rs,
49+
Aggregated: utils.Ptr(rs),
50+
Error: func() *ske.RuntimeError {
51+
if a.invalidArgusInstance {
52+
return &ske.RuntimeError{
53+
Code: utils.Ptr(ske.RUNTIMEERRORCODE_OBSERVABILITY_INSTANCE_NOT_FOUND),
54+
Message: utils.Ptr("invalid argus instance"),
55+
}
56+
}
57+
return nil
58+
}(),
59+
Errors: a.errorList,
4960
},
5061
}, nil
5162
}
@@ -77,6 +88,7 @@ func TestCreateOrUpdateClusterWaitHandler(t *testing.T) {
7788
invalidArgusInstance bool
7889
wantErr bool
7990
wantResp bool
91+
errorList *[]ske.ClusterError
8092
}{
8193
{
8294
desc: "create_succeeded",
@@ -120,6 +132,23 @@ func TestCreateOrUpdateClusterWaitHandler(t *testing.T) {
120132
wantErr: true,
121133
wantResp: false,
122134
},
135+
{
136+
desc: "status_errors_present",
137+
getFails: false,
138+
resourceState: ske.CLUSTERSTATUSSTATE_CREATING,
139+
errorList: &[]ske.ClusterError{
140+
{
141+
Code: utils.Ptr("ERR_CODE"),
142+
Message: utils.Ptr("Error 1"),
143+
},
144+
{
145+
Code: utils.Ptr("ERR_OTHER"),
146+
Message: utils.Ptr("Error 2"),
147+
},
148+
},
149+
wantErr: true,
150+
wantResp: true,
151+
},
123152
}
124153
for _, tt := range tests {
125154
t.Run(tt.desc, func(t *testing.T) {
@@ -130,6 +159,7 @@ func TestCreateOrUpdateClusterWaitHandler(t *testing.T) {
130159
name: name,
131160
resourceState: tt.resourceState,
132161
invalidArgusInstance: tt.invalidArgusInstance,
162+
errorList: tt.errorList,
133163
}
134164
var wantRes *ske.Cluster
135165
rs := ske.ClusterStatusState(tt.resourceState)
@@ -147,6 +177,10 @@ func TestCreateOrUpdateClusterWaitHandler(t *testing.T) {
147177
Message: utils.Ptr("invalid argus instance"),
148178
}
149179
}
180+
181+
if tt.errorList != nil && len(*tt.errorList) > 0 {
182+
wantRes.Status.Errors = tt.errorList
183+
}
150184
}
151185

152186
handler := CreateOrUpdateClusterWaitHandler(context.Background(), apiClient, "", testRegion, name)

0 commit comments

Comments
 (0)