@@ -18,8 +18,10 @@ import (
18
18
"io/ioutil"
19
19
"net/http"
20
20
"reflect"
21
+ "strconv"
21
22
22
23
"github.com/pkg/errors"
24
+ "github.com/rancher/wrangler/pkg/data"
23
25
24
26
"github.com/erda-project/erda/apistructs"
25
27
"github.com/erda-project/erda/bundle/apierrors"
@@ -31,7 +33,7 @@ import (
31
33
32
34
// GetSteveResource gets k8s resource from steve server.
33
35
// Required fields: ClusterName, Name, Type.
34
- func (b * Bundle ) GetSteveResource (req * apistructs.SteveRequest ) (* apistructs. SteveResource , error ) {
36
+ func (b * Bundle ) GetSteveResource (req * apistructs.SteveRequest ) (data. Object , error ) {
35
37
if req .Type == "" || req .ClusterName == "" || req .Name == "" {
36
38
return nil , errors .New ("clusterName, name and type fields are required" )
37
39
}
@@ -60,20 +62,20 @@ func (b *Bundle) GetSteveResource(req *apistructs.SteveRequest) (*apistructs.Ste
60
62
return nil , apierrors .ErrInvoke .InternalError (err )
61
63
}
62
64
63
- if err = isSteveError (data ); err != nil {
64
- return nil , err
65
+ obj := map [string ]interface {}{}
66
+ if err = json .Unmarshal (data , & obj ); err != nil {
67
+ return nil , apierrors .ErrInvoke .InternalError (err )
65
68
}
66
69
67
- var resource apistructs.SteveResource
68
- if err = json .Unmarshal (data , & resource ); err != nil {
69
- return nil , apierrors .ErrInvoke .InternalError (err )
70
+ if err = isSteveError (obj ); err != nil {
71
+ return nil , err
70
72
}
71
- return & resource , nil
73
+ return obj , nil
72
74
}
73
75
74
76
// ListSteveResource lists k8s resource from steve server.
75
77
// Required fields: ClusterName, Type.
76
- func (b * Bundle ) ListSteveResource (req * apistructs.SteveRequest ) (* apistructs. SteveCollection , error ) {
78
+ func (b * Bundle ) ListSteveResource (req * apistructs.SteveRequest ) (data. Object , error ) {
77
79
if req .Type == "" || req .ClusterName == "" {
78
80
return nil , errors .New ("clusterName and type fields are required" )
79
81
}
@@ -102,20 +104,20 @@ func (b *Bundle) ListSteveResource(req *apistructs.SteveRequest) (*apistructs.St
102
104
return nil , apierrors .ErrInvoke .InternalError (err )
103
105
}
104
106
105
- if err = isSteveError (data ); err != nil {
106
- return nil , err
107
+ obj := map [string ]interface {}{}
108
+ if err = json .Unmarshal (data , & obj ); err != nil {
109
+ return nil , apierrors .ErrInvoke .InternalError (err )
107
110
}
108
111
109
- var collection apistructs.SteveCollection
110
- if err = json .Unmarshal (data , & collection ); err != nil {
111
- return nil , apierrors .ErrInvoke .InternalError (err )
112
+ if err = isSteveError (obj ); err != nil {
113
+ return nil , err
112
114
}
113
- return & collection , nil
115
+ return obj , nil
114
116
}
115
117
116
118
// UpdateSteveResource update a k8s resource described by req.Obj from steve server.
117
119
// Required fields: ClusterName, Type, Name, Obj
118
- func (b * Bundle ) UpdateSteveResource (req * apistructs.SteveRequest ) (* apistructs. SteveResource , error ) {
120
+ func (b * Bundle ) UpdateSteveResource (req * apistructs.SteveRequest ) (data. Object , error ) {
119
121
if req .Type == "" || req .ClusterName == "" || req .Name == "" {
120
122
return nil , errors .New ("clusterName, name and type fields are required" )
121
123
}
@@ -146,20 +148,20 @@ func (b *Bundle) UpdateSteveResource(req *apistructs.SteveRequest) (*apistructs.
146
148
return nil , apierrors .ErrInvoke .InternalError (err )
147
149
}
148
150
149
- if err = isSteveError (data ); err != nil {
150
- return nil , err
151
+ obj := map [string ]interface {}{}
152
+ if err = json .Unmarshal (data , & obj ); err != nil {
153
+ return nil , apierrors .ErrInvoke .InternalError (err )
151
154
}
152
155
153
- var resource apistructs.SteveResource
154
- if err = json .Unmarshal (data , & resource ); err != nil {
155
- return nil , apierrors .ErrInvoke .InternalError (err )
156
+ if err = isSteveError (obj ); err != nil {
157
+ return nil , err
156
158
}
157
- return & resource , nil
159
+ return obj , nil
158
160
}
159
161
160
162
// CreateSteveResource creates a k8s resource described by req.Obj from steve server.
161
163
// Required fields: ClusterName, Type, Obj
162
- func (b * Bundle ) CreateSteveResource (req * apistructs.SteveRequest ) (* apistructs. SteveResource , error ) {
164
+ func (b * Bundle ) CreateSteveResource (req * apistructs.SteveRequest ) (data. Object , error ) {
163
165
if req .Type == "" || req .ClusterName == "" {
164
166
return nil , errors .New ("clusterName and type fields are required" )
165
167
}
@@ -190,15 +192,15 @@ func (b *Bundle) CreateSteveResource(req *apistructs.SteveRequest) (*apistructs.
190
192
return nil , apierrors .ErrInvoke .InternalError (err )
191
193
}
192
194
193
- if err = isSteveError (data ); err != nil {
194
- return nil , err
195
+ obj := map [string ]interface {}{}
196
+ if err = json .Unmarshal (data , & obj ); err != nil {
197
+ return nil , apierrors .ErrInvoke .InternalError (err )
195
198
}
196
199
197
- var resource apistructs.SteveResource
198
- if err = json .Unmarshal (data , & resource ); err != nil {
199
- return nil , apierrors .ErrInvoke .InternalError (err )
200
+ if err = isSteveError (obj ); err != nil {
201
+ return nil , err
200
202
}
201
- return & resource , nil
203
+ return obj , nil
202
204
}
203
205
204
206
// DeleteSteveResource delete a k8s resource from steve server.
@@ -231,39 +233,27 @@ func (b *Bundle) DeleteSteveResource(req *apistructs.SteveRequest) error {
231
233
return apierrors .ErrInvoke .InternalError (err )
232
234
}
233
235
234
- return isSteveError (data )
236
+ obj := map [string ]interface {}{}
237
+ if err = json .Unmarshal (data , & obj ); err != nil {
238
+ return apierrors .ErrInvoke .InternalError (err )
239
+ }
240
+ return isSteveError (obj )
235
241
}
236
242
237
243
func isObjInvalid (obj interface {}) bool {
238
244
v := reflect .ValueOf (obj )
239
245
return v .Kind () == reflect .Ptr && ! v .IsNil ()
240
246
}
241
247
242
- func isSteveError (data []byte ) error {
243
- if len (data ) == 0 {
244
- return nil
245
- }
246
- var obj map [string ]interface {}
247
- err := json .Unmarshal (data , & obj )
248
- if err != nil {
249
- return apierrors .ErrInvoke .InternalError (err )
250
- }
251
-
252
- typ , ok := obj ["type" ].(string )
253
- if ! ok {
254
- return apierrors .ErrInvoke .InternalError (errors .New ("type field is null" ))
255
- }
256
-
257
- if typ != apistructs .SteveErrorType {
248
+ func isSteveError (obj data.Object ) error {
249
+ if obj .String ("type" ) != "error" {
258
250
return nil
259
251
}
260
-
261
- var steveErr apistructs.SteveError
262
- if err = json .Unmarshal (data , & steveErr ); err != nil {
263
- return apierrors .ErrInvoke .InternalError (err )
264
- }
265
- return toAPIError (steveErr .Status , apistructs.ErrorResponse {
266
- Code : steveErr .Code ,
267
- Msg : steveErr .Message ,
252
+ status , _ := strconv .ParseInt (obj .String ("status" ), 10 , 64 )
253
+ code := obj .String ("code" )
254
+ message := obj .String ("message" )
255
+ return toAPIError (int (status ), apistructs.ErrorResponse {
256
+ Code : code ,
257
+ Msg : message ,
268
258
})
269
259
}
0 commit comments