Skip to content

Commit a5bed36

Browse files
committed
fix epm
1 parent bd73d42 commit a5bed36

File tree

7 files changed

+237
-65
lines changed

7 files changed

+237
-65
lines changed

generated/fleet/fleet.gen.go

Lines changed: 107 additions & 32 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

generated/fleet/getschema.go

Lines changed: 43 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ var transformers = []TransformFunc{
7373
transformAddPackagePolicyVars,
7474
transformAddPackagePolicySecretReferences,
7575
transformFixPackageSearchResult,
76+
transformFixGetPackageResult,
7677
}
7778

7879
// transformFilterPaths filters the paths in a schema down to
@@ -232,16 +233,36 @@ func transformInlinePackageDefinitions(schema *Schema) {
232233

233234
// Get
234235
{
235-
props, ok := epmPath.Get.Responses.GetFields("200.content.application/json.schema.allOf.1.properties")
236+
respSchema, ok := epmPath.Get.Responses.GetFields("200.content.application/json.schema")
236237
if !ok {
237238
panic("properties not found")
238239
}
239240

240-
// status needs to be moved to schemes and a ref inserted in its place.
241-
value, _ := props.Get("status")
241+
// allOf.1 should also be inside "item"
242+
_allOf, _ := respSchema.Get("allOf")
243+
allOf := _allOf.([]any)
244+
respSchema.Delete("allOf")
245+
246+
list := make([]any, 2)
247+
allOf0, _ := Fields(allOf[0].(map[string]any)).GetFields("properties.item")
248+
allOf1 := Fields(allOf[1].(map[string]any))
249+
list[0] = allOf0
250+
list[1] = allOf1
251+
respSchema.Set("properties.item.allOf", list)
252+
253+
// item needs to be moved to schemas and a ref inserted in its place.
254+
value, _ := respSchema.Get("properties.item.allOf")
255+
respSchema.Delete("properties.item.allOf")
256+
schema.Components.Set("schemas.get_package_item.allOf", value)
257+
respSchema.Set("properties.item.$ref", "#/components/schemas/get_package_item")
258+
259+
// status needs to be moved to schemas and a ref inserted in its place.
260+
props, _ := schema.Components.GetFields("schemas.get_package_item.allOf.1.properties")
261+
value, _ = props.GetFields("status")
242262
schema.Components.Set("schemas.package_status", value)
243263
props.Delete("status")
244264
props.Set("status.$ref", "#/components/schemas/package_status")
265+
245266
}
246267

247268
// Post
@@ -369,6 +390,18 @@ func transformFixPackageSearchResult(schema *Schema) {
369390
properties.Delete("installationInfo")
370391
}
371392

393+
// transformFixGetPackageResult removes unneeded fields from the
394+
// GetPackageResult struct. These fields are also causing parsing errors.
395+
func transformFixGetPackageResult(schema *Schema) {
396+
properties, ok := schema.Components.GetFields("schemas.package_info.properties")
397+
if !ok {
398+
panic("properties not found")
399+
}
400+
properties.Delete("assets")
401+
properties.Delete("icons")
402+
properties.Delete("installationInfo")
403+
}
404+
372405
// downloadFile will download a file from url and return the
373406
// bytes. If the request fails, or a non 200 error code is
374407
// observed in the response, an error is returned instead.
@@ -462,11 +495,15 @@ func (f Fields) Get(key string) (any, bool) {
462495
if !ok {
463496
return nil, false
464497
}
465-
if m, isMap := slicedValue.(map[string]any); ok && isMap {
498+
499+
switch m := slicedValue.(type) {
500+
case map[string]any:
466501
return Fields(m).Get(postSliceKeys)
502+
case Fields:
503+
return m.Get(postSliceKeys)
504+
default:
505+
return slicedValue, true
467506
}
468-
return slicedValue, true
469-
470507
default:
471508
rootKey = key
472509
}

internal/clients/fleet/fleet.go

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import (
44
"context"
55
"errors"
66
"fmt"
7-
"io"
87
"net/http"
8+
"strings"
99

1010
fleetapi "github.com/elastic/terraform-provider-elasticstack/generated/fleet"
1111
"github.com/elastic/terraform-provider-elasticstack/internal/utils"
@@ -333,27 +333,21 @@ func DeletePackagePolicy(ctx context.Context, client *Client, id string, force b
333333
}
334334

335335
// ReadPackage reads a specific package from the API.
336-
func ReadPackage(ctx context.Context, client *Client, name, version string) diag.Diagnostics {
336+
func ReadPackage(ctx context.Context, client *Client, name, version string) (*fleetapi.GetPackageItem, diag.Diagnostics) {
337337
params := fleetapi.GetPackageParams{}
338338

339-
resp, err := client.API.GetPackage(ctx, name, version, &params)
339+
resp, err := client.API.GetPackageWithResponse(ctx, name, version, &params)
340340
if err != nil {
341-
return utils.FrameworkDiagFromError(err)
341+
return nil, utils.FrameworkDiagFromError(err)
342342
}
343-
defer resp.Body.Close()
344343

345-
switch resp.StatusCode {
344+
switch resp.StatusCode() {
346345
case http.StatusOK:
347-
return nil
346+
return resp.JSON200.Item, nil
348347
case http.StatusNotFound:
349-
return utils.FrameworkDiagFromError(ErrPackageNotFound)
348+
return nil, utils.FrameworkDiagFromError(ErrPackageNotFound)
350349
default:
351-
errData, err := io.ReadAll(resp.Body)
352-
if err != nil {
353-
return utils.FrameworkDiagFromError(err)
354-
}
355-
356-
return reportUnknownError(resp.StatusCode, errData)
350+
return nil, reportUnknownError(resp.StatusCode(), resp.Body)
357351
}
358352
}
359353

@@ -365,22 +359,16 @@ func InstallPackage(ctx context.Context, client *Client, name, version string, f
365359
IgnoreConstraints: nil,
366360
}
367361

368-
resp, err := client.API.InstallPackage(ctx, name, version, &params, body)
362+
resp, err := client.API.InstallPackageWithResponse(ctx, name, version, &params, body)
369363
if err != nil {
370364
return utils.FrameworkDiagFromError(err)
371365
}
372-
defer resp.Body.Close()
373366

374-
switch resp.StatusCode {
367+
switch resp.StatusCode() {
375368
case http.StatusOK:
376369
return nil
377370
default:
378-
errData, err := io.ReadAll(resp.Body)
379-
if err != nil {
380-
return utils.FrameworkDiagFromError(err)
381-
}
382-
383-
return reportUnknownError(resp.StatusCode, errData)
371+
return reportUnknownError(resp.StatusCode(), resp.Body)
384372
}
385373
}
386374

@@ -399,6 +387,14 @@ func Uninstall(ctx context.Context, client *Client, name, version string, force
399387
switch resp.StatusCode() {
400388
case http.StatusOK:
401389
return nil
390+
case http.StatusBadRequest:
391+
msg := resp.JSON400.Message
392+
// {"statusCode":400,"error":"Bad Request","message":"some-integration is not installed"}
393+
if msg != nil && strings.Contains(*msg, "is not installed") {
394+
return nil
395+
} else {
396+
return reportUnknownError(resp.StatusCode(), resp.Body)
397+
}
402398
case http.StatusNotFound:
403399
return nil
404400
default:

internal/fleet/integration/create.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import (
1111
)
1212

1313
func (r *integrationResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
14-
r.create(ctx, req.Plan, &resp.State, resp.Diagnostics)
14+
r.create(ctx, req.Plan, &resp.State, &resp.Diagnostics)
1515
}
1616

17-
func (r integrationResource) create(ctx context.Context, plan tfsdk.Plan, state *tfsdk.State, respDiags diag.Diagnostics) {
17+
func (r integrationResource) create(ctx context.Context, plan tfsdk.Plan, state *tfsdk.State, respDiags *diag.Diagnostics) {
1818
var planModel integrationModel
1919

2020
diags := plan.Get(ctx, &planModel)

0 commit comments

Comments
 (0)