Skip to content

Commit 4df74ff

Browse files
authored
feat(api): add target kubernetes infra handlers (#2404)
* feat(api): add target kubernetes infra handlers * f * f * f * f * f * f * f * f
1 parent fcf01cc commit 4df74ff

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

64 files changed

+1959
-310
lines changed

api/client/client.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,14 @@ type Client interface {
1414
GetLinuxInstallationConfig() (types.LinuxInstallationConfig, error)
1515
GetLinuxInstallationStatus() (types.Status, error)
1616
ConfigureLinuxInstallation(config types.LinuxInstallationConfig) (types.Status, error)
17-
SetupLinuxInfra() (types.LinuxInfra, error)
18-
GetLinuxInfraStatus() (types.LinuxInfra, error)
17+
SetupLinuxInfra(ignoreHostPreflights bool) (types.Infra, error)
18+
GetLinuxInfraStatus() (types.Infra, error)
1919

2020
GetKubernetesInstallationConfig() (types.KubernetesInstallationConfig, error)
2121
ConfigureKubernetesInstallation(config types.KubernetesInstallationConfig) (types.Status, error)
2222
GetKubernetesInstallationStatus() (types.Status, error)
23+
SetupKubernetesInfra() (types.Infra, error)
24+
GetKubernetesInfraStatus() (types.Infra, error)
2325
}
2426

2527
type client struct {

api/client/client_test.go

Lines changed: 109 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -211,9 +211,16 @@ func TestLinuxSetupInfra(t *testing.T) {
211211
assert.Equal(t, "application/json", r.Header.Get("Content-Type"))
212212
assert.Equal(t, "Bearer test-token", r.Header.Get("Authorization"))
213213

214+
// Decode request body
215+
var config types.LinuxInfraSetupRequest
216+
err := json.NewDecoder(r.Body).Decode(&config)
217+
require.NoError(t, err, "Failed to decode request body")
218+
219+
assert.True(t, config.IgnoreHostPreflights)
220+
214221
// Return successful response
215222
w.WriteHeader(http.StatusOK)
216-
json.NewEncoder(w).Encode(types.LinuxInfra{
223+
json.NewEncoder(w).Encode(types.Infra{
217224
Status: types.Status{
218225
State: types.StateRunning,
219226
Description: "Installing infra",
@@ -224,7 +231,7 @@ func TestLinuxSetupInfra(t *testing.T) {
224231

225232
// Test successful setup
226233
c := New(server.URL, WithToken("test-token"))
227-
infra, err := c.SetupLinuxInfra()
234+
infra, err := c.SetupLinuxInfra(true)
228235
assert.NoError(t, err)
229236
assert.Equal(t, types.StateRunning, infra.Status.State)
230237
assert.Equal(t, "Installing infra", infra.Status.Description)
@@ -240,9 +247,9 @@ func TestLinuxSetupInfra(t *testing.T) {
240247
defer errorServer.Close()
241248

242249
c = New(errorServer.URL, WithToken("test-token"))
243-
infra, err = c.SetupLinuxInfra()
250+
infra, err = c.SetupLinuxInfra(true)
244251
assert.Error(t, err)
245-
assert.Equal(t, types.LinuxInfra{}, infra)
252+
assert.Equal(t, types.Infra{}, infra)
246253

247254
apiErr, ok := err.(*types.APIError)
248255
require.True(t, ok, "Expected err to be of type *types.APIError")
@@ -261,7 +268,7 @@ func TestLinuxGetInfraStatus(t *testing.T) {
261268

262269
// Return successful response
263270
w.WriteHeader(http.StatusOK)
264-
json.NewEncoder(w).Encode(types.LinuxInfra{
271+
json.NewEncoder(w).Encode(types.Infra{
265272
Status: types.Status{
266273
State: types.StateSucceeded,
267274
Description: "Installation successful",
@@ -290,7 +297,7 @@ func TestLinuxGetInfraStatus(t *testing.T) {
290297
c = New(errorServer.URL, WithToken("test-token"))
291298
infra, err = c.GetLinuxInfraStatus()
292299
assert.Error(t, err)
293-
assert.Equal(t, types.LinuxInfra{}, infra)
300+
assert.Equal(t, types.Infra{}, infra)
294301

295302
apiErr, ok := err.(*types.APIError)
296303
require.True(t, ok, "Expected err to be of type *types.APIError")
@@ -453,6 +460,102 @@ func TestKubernetesGetInstallationStatus(t *testing.T) {
453460
assert.Equal(t, "Internal Server Error", apiErr.Message)
454461
}
455462

463+
func TestKubernetesSetupInfra(t *testing.T) {
464+
// Create a test server
465+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
466+
assert.Equal(t, "POST", r.Method)
467+
assert.Equal(t, "/api/kubernetes/install/infra/setup", r.URL.Path)
468+
469+
assert.Equal(t, "application/json", r.Header.Get("Content-Type"))
470+
assert.Equal(t, "Bearer test-token", r.Header.Get("Authorization"))
471+
472+
// Return successful response
473+
w.WriteHeader(http.StatusOK)
474+
json.NewEncoder(w).Encode(types.Infra{
475+
Status: types.Status{
476+
State: types.StateRunning,
477+
Description: "Installing infra",
478+
},
479+
})
480+
}))
481+
defer server.Close()
482+
483+
// Test successful setup
484+
c := New(server.URL, WithToken("test-token"))
485+
infra, err := c.SetupKubernetesInfra()
486+
assert.NoError(t, err)
487+
assert.Equal(t, types.StateRunning, infra.Status.State)
488+
assert.Equal(t, "Installing infra", infra.Status.Description)
489+
490+
// Test error response
491+
errorServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
492+
w.WriteHeader(http.StatusInternalServerError)
493+
json.NewEncoder(w).Encode(types.APIError{
494+
StatusCode: http.StatusInternalServerError,
495+
Message: "Internal Server Error",
496+
})
497+
}))
498+
defer errorServer.Close()
499+
500+
c = New(errorServer.URL, WithToken("test-token"))
501+
infra, err = c.SetupKubernetesInfra()
502+
assert.Error(t, err)
503+
assert.Equal(t, types.Infra{}, infra)
504+
505+
apiErr, ok := err.(*types.APIError)
506+
require.True(t, ok, "Expected err to be of type *types.APIError")
507+
assert.Equal(t, http.StatusInternalServerError, apiErr.StatusCode)
508+
assert.Equal(t, "Internal Server Error", apiErr.Message)
509+
}
510+
511+
func TestKubernetesGetInfraStatus(t *testing.T) {
512+
// Create a test server
513+
server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
514+
assert.Equal(t, "GET", r.Method)
515+
assert.Equal(t, "/api/kubernetes/install/infra/status", r.URL.Path)
516+
517+
assert.Equal(t, "application/json", r.Header.Get("Content-Type"))
518+
assert.Equal(t, "Bearer test-token", r.Header.Get("Authorization"))
519+
520+
// Return successful response
521+
w.WriteHeader(http.StatusOK)
522+
json.NewEncoder(w).Encode(types.Infra{
523+
Status: types.Status{
524+
State: types.StateSucceeded,
525+
Description: "Installation successful",
526+
},
527+
})
528+
}))
529+
defer server.Close()
530+
531+
// Test successful get
532+
c := New(server.URL, WithToken("test-token"))
533+
infra, err := c.GetKubernetesInfraStatus()
534+
assert.NoError(t, err)
535+
assert.Equal(t, types.StateSucceeded, infra.Status.State)
536+
assert.Equal(t, "Installation successful", infra.Status.Description)
537+
538+
// Test error response
539+
errorServer := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
540+
w.WriteHeader(http.StatusInternalServerError)
541+
json.NewEncoder(w).Encode(types.APIError{
542+
StatusCode: http.StatusInternalServerError,
543+
Message: "Internal Server Error",
544+
})
545+
}))
546+
defer errorServer.Close()
547+
548+
c = New(errorServer.URL, WithToken("test-token"))
549+
infra, err = c.GetKubernetesInfraStatus()
550+
assert.Error(t, err)
551+
assert.Equal(t, types.Infra{}, infra)
552+
553+
apiErr, ok := err.(*types.APIError)
554+
require.True(t, ok, "Expected err to be of type *types.APIError")
555+
assert.Equal(t, http.StatusInternalServerError, apiErr.StatusCode)
556+
assert.Equal(t, "Internal Server Error", apiErr.Message)
557+
}
558+
456559
func TestErrorFromResponse(t *testing.T) {
457560
// Create a response with an error
458561
resp := &http.Response{

api/client/install.go

Lines changed: 74 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -94,55 +94,62 @@ func (c *client) GetLinuxInstallationStatus() (types.Status, error) {
9494
return status, nil
9595
}
9696

97-
func (c *client) SetupLinuxInfra() (types.LinuxInfra, error) {
98-
req, err := http.NewRequest("POST", c.apiURL+"/api/linux/install/infra/setup", nil)
97+
func (c *client) SetupLinuxInfra(ignoreHostPreflights bool) (types.Infra, error) {
98+
b, err := json.Marshal(types.LinuxInfraSetupRequest{
99+
IgnoreHostPreflights: ignoreHostPreflights,
100+
})
99101
if err != nil {
100-
return types.LinuxInfra{}, err
102+
return types.Infra{}, err
103+
}
104+
105+
req, err := http.NewRequest("POST", c.apiURL+"/api/linux/install/infra/setup", bytes.NewBuffer(b))
106+
if err != nil {
107+
return types.Infra{}, err
101108
}
102109
req.Header.Set("Content-Type", "application/json")
103110
setAuthorizationHeader(req, c.token)
104111

105112
resp, err := c.httpClient.Do(req)
106113
if err != nil {
107-
return types.LinuxInfra{}, err
114+
return types.Infra{}, err
108115
}
109116
defer resp.Body.Close()
110117

111118
if resp.StatusCode != http.StatusOK {
112-
return types.LinuxInfra{}, errorFromResponse(resp)
119+
return types.Infra{}, errorFromResponse(resp)
113120
}
114121

115-
var infra types.LinuxInfra
122+
var infra types.Infra
116123
err = json.NewDecoder(resp.Body).Decode(&infra)
117124
if err != nil {
118-
return types.LinuxInfra{}, err
125+
return types.Infra{}, err
119126
}
120127

121128
return infra, nil
122129
}
123130

124-
func (c *client) GetLinuxInfraStatus() (types.LinuxInfra, error) {
131+
func (c *client) GetLinuxInfraStatus() (types.Infra, error) {
125132
req, err := http.NewRequest("GET", c.apiURL+"/api/linux/install/infra/status", nil)
126133
if err != nil {
127-
return types.LinuxInfra{}, err
134+
return types.Infra{}, err
128135
}
129136
req.Header.Set("Content-Type", "application/json")
130137
setAuthorizationHeader(req, c.token)
131138

132139
resp, err := c.httpClient.Do(req)
133140
if err != nil {
134-
return types.LinuxInfra{}, err
141+
return types.Infra{}, err
135142
}
136143
defer resp.Body.Close()
137144

138145
if resp.StatusCode != http.StatusOK {
139-
return types.LinuxInfra{}, errorFromResponse(resp)
146+
return types.Infra{}, errorFromResponse(resp)
140147
}
141148

142-
var infra types.LinuxInfra
149+
var infra types.Infra
143150
err = json.NewDecoder(resp.Body).Decode(&infra)
144151
if err != nil {
145-
return types.LinuxInfra{}, err
152+
return types.Infra{}, err
146153
}
147154

148155
return infra, nil
@@ -233,3 +240,57 @@ func (c *client) GetKubernetesInstallationStatus() (types.Status, error) {
233240

234241
return status, nil
235242
}
243+
244+
func (c *client) SetupKubernetesInfra() (types.Infra, error) {
245+
req, err := http.NewRequest("POST", c.apiURL+"/api/kubernetes/install/infra/setup", nil)
246+
if err != nil {
247+
return types.Infra{}, err
248+
}
249+
req.Header.Set("Content-Type", "application/json")
250+
setAuthorizationHeader(req, c.token)
251+
252+
resp, err := c.httpClient.Do(req)
253+
if err != nil {
254+
return types.Infra{}, err
255+
}
256+
defer resp.Body.Close()
257+
258+
if resp.StatusCode != http.StatusOK {
259+
return types.Infra{}, errorFromResponse(resp)
260+
}
261+
262+
var infra types.Infra
263+
err = json.NewDecoder(resp.Body).Decode(&infra)
264+
if err != nil {
265+
return types.Infra{}, err
266+
}
267+
268+
return infra, nil
269+
}
270+
271+
func (c *client) GetKubernetesInfraStatus() (types.Infra, error) {
272+
req, err := http.NewRequest("GET", c.apiURL+"/api/kubernetes/install/infra/status", nil)
273+
if err != nil {
274+
return types.Infra{}, err
275+
}
276+
req.Header.Set("Content-Type", "application/json")
277+
setAuthorizationHeader(req, c.token)
278+
279+
resp, err := c.httpClient.Do(req)
280+
if err != nil {
281+
return types.Infra{}, err
282+
}
283+
defer resp.Body.Close()
284+
285+
if resp.StatusCode != http.StatusOK {
286+
return types.Infra{}, errorFromResponse(resp)
287+
}
288+
289+
var infra types.Infra
290+
err = json.NewDecoder(resp.Body).Decode(&infra)
291+
if err != nil {
292+
return types.Infra{}, err
293+
}
294+
295+
return infra, nil
296+
}

0 commit comments

Comments
 (0)