Skip to content

Commit c97a300

Browse files
committed
impl fw resource.fleet_server_host
1 parent 3deb82a commit c97a300

File tree

15 files changed

+570
-261
lines changed

15 files changed

+570
-261
lines changed

generated/fleet/getschema.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -345,7 +345,7 @@ func transformFixPackageSearchResult(schema *Schema) {
345345
properties.Delete("installationInfo")
346346
}
347347

348-
// transformRemoveUnnecessaryGoPointers removes unneeded pointers from
348+
// transformRemoveUnnecessaryGoPointers removes pointers from
349349
// map and slice objects.
350350
func transformRemoveUnnecessaryGoPointers(schema *Schema) {
351351
var schemaMap map[string]any

internal/clients/fleet/fleet.go

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -189,10 +189,10 @@ func DeleteOutput(ctx context.Context, client *Client, id string) diag.Diagnosti
189189
}
190190

191191
// ReadFleetServerHost reads a specific fleet server host from the API.
192-
func ReadFleetServerHost(ctx context.Context, client *Client, id string) (*fleetapi.FleetServerHost, diag.Diagnostics) {
192+
func ReadFleetServerHost(ctx context.Context, client *Client, id string) (*fleetapi.FleetServerHost, fwdiag.Diagnostics) {
193193
resp, err := client.API.GetOneFleetServerHostsWithResponse(ctx, id)
194194
if err != nil {
195-
return nil, diag.FromErr(err)
195+
return nil, fromErr(err)
196196
}
197197

198198
switch resp.StatusCode() {
@@ -201,45 +201,45 @@ func ReadFleetServerHost(ctx context.Context, client *Client, id string) (*fleet
201201
case http.StatusNotFound:
202202
return nil, nil
203203
default:
204-
return nil, reportUnknownError(resp.StatusCode(), resp.Body)
204+
return nil, reportUnknownErrorFw(resp.StatusCode(), resp.Body)
205205
}
206206
}
207207

208208
// CreateFleetServerHost creates a new fleet server host.
209-
func CreateFleetServerHost(ctx context.Context, client *Client, req fleetapi.PostFleetServerHostsJSONRequestBody) (*fleetapi.FleetServerHost, diag.Diagnostics) {
209+
func CreateFleetServerHost(ctx context.Context, client *Client, req fleetapi.PostFleetServerHostsJSONRequestBody) (*fleetapi.FleetServerHost, fwdiag.Diagnostics) {
210210
resp, err := client.API.PostFleetServerHostsWithResponse(ctx, req)
211211
if err != nil {
212-
return nil, diag.FromErr(err)
212+
return nil, fromErr(err)
213213
}
214214

215215
switch resp.StatusCode() {
216216
case http.StatusOK:
217217
return resp.JSON200.Item, nil
218218
default:
219-
return nil, reportUnknownError(resp.StatusCode(), resp.Body)
219+
return nil, reportUnknownErrorFw(resp.StatusCode(), resp.Body)
220220
}
221221
}
222222

223223
// UpdateFleetServerHost updates an existing fleet server host.
224-
func UpdateFleetServerHost(ctx context.Context, client *Client, id string, req fleetapi.UpdateFleetServerHostsJSONRequestBody) (*fleetapi.FleetServerHost, diag.Diagnostics) {
224+
func UpdateFleetServerHost(ctx context.Context, client *Client, id string, req fleetapi.UpdateFleetServerHostsJSONRequestBody) (*fleetapi.FleetServerHost, fwdiag.Diagnostics) {
225225
resp, err := client.API.UpdateFleetServerHostsWithResponse(ctx, id, req)
226226
if err != nil {
227-
return nil, diag.FromErr(err)
227+
return nil, fromErr(err)
228228
}
229229

230230
switch resp.StatusCode() {
231231
case http.StatusOK:
232232
return &resp.JSON200.Item, nil
233233
default:
234-
return nil, reportUnknownError(resp.StatusCode(), resp.Body)
234+
return nil, reportUnknownErrorFw(resp.StatusCode(), resp.Body)
235235
}
236236
}
237237

238238
// DeleteFleetServerHost deletes an existing fleet server host.
239-
func DeleteFleetServerHost(ctx context.Context, client *Client, id string) diag.Diagnostics {
239+
func DeleteFleetServerHost(ctx context.Context, client *Client, id string) fwdiag.Diagnostics {
240240
resp, err := client.API.DeleteFleetServerHostsWithResponse(ctx, id)
241241
if err != nil {
242-
return diag.FromErr(err)
242+
return fromErr(err)
243243
}
244244

245245
switch resp.StatusCode() {
@@ -248,7 +248,7 @@ func DeleteFleetServerHost(ctx context.Context, client *Client, id string) diag.
248248
case http.StatusNotFound:
249249
return nil
250250
default:
251-
return reportUnknownError(resp.StatusCode(), resp.Body)
251+
return reportUnknownErrorFw(resp.StatusCode(), resp.Body)
252252
}
253253
}
254254

internal/fleet/fleet_server_host_resource.go

Lines changed: 0 additions & 174 deletions
This file was deleted.

internal/fleet/server_host/create.go

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
package server_host
2+
3+
import (
4+
"context"
5+
6+
"github.com/elastic/terraform-provider-elasticstack/internal/clients/fleet"
7+
"github.com/hashicorp/terraform-plugin-framework/resource"
8+
)
9+
10+
func (r *serverHostResource) Create(ctx context.Context, req resource.CreateRequest, resp *resource.CreateResponse) {
11+
var planModel serverHostModel
12+
13+
diags := req.Plan.Get(ctx, &planModel)
14+
resp.Diagnostics.Append(diags...)
15+
if resp.Diagnostics.HasError() {
16+
return
17+
}
18+
19+
client, err := r.client.GetFleetClient()
20+
if err != nil {
21+
resp.Diagnostics.AddError(err.Error(), "")
22+
return
23+
}
24+
25+
body, diags := planModel.toAPICreateModel(ctx)
26+
resp.Diagnostics.Append(diags...)
27+
if resp.Diagnostics.HasError() {
28+
return
29+
}
30+
31+
host, diags := fleet.CreateFleetServerHost(ctx, client, body)
32+
resp.Diagnostics.Append(diags...)
33+
if resp.Diagnostics.HasError() {
34+
return
35+
}
36+
37+
diags = planModel.populateFromAPI(ctx, host)
38+
resp.Diagnostics.Append(diags...)
39+
if resp.Diagnostics.HasError() {
40+
return
41+
}
42+
43+
diags = resp.State.Set(ctx, planModel)
44+
resp.Diagnostics.Append(diags...)
45+
}

internal/fleet/server_host/delete.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package server_host
2+
3+
import (
4+
"context"
5+
6+
"github.com/elastic/terraform-provider-elasticstack/internal/clients/fleet"
7+
"github.com/hashicorp/terraform-plugin-framework/resource"
8+
)
9+
10+
func (r *serverHostResource) Delete(ctx context.Context, req resource.DeleteRequest, resp *resource.DeleteResponse) {
11+
var stateModel serverHostModel
12+
13+
diags := req.State.Get(ctx, &stateModel)
14+
resp.Diagnostics.Append(diags...)
15+
if resp.Diagnostics.HasError() {
16+
return
17+
}
18+
19+
client, err := r.client.GetFleetClient()
20+
if err != nil {
21+
resp.Diagnostics.AddError(err.Error(), "")
22+
return
23+
}
24+
25+
hostID := stateModel.HostID.ValueString()
26+
diags = fleet.DeleteFleetServerHost(ctx, client, hostID)
27+
resp.Diagnostics.Append(diags...)
28+
}

internal/fleet/server_host/models.go

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package server_host
2+
3+
import (
4+
"context"
5+
6+
fleetapi "github.com/elastic/terraform-provider-elasticstack/generated/fleet"
7+
"github.com/elastic/terraform-provider-elasticstack/internal/utils"
8+
"github.com/hashicorp/terraform-plugin-framework/diag"
9+
"github.com/hashicorp/terraform-plugin-framework/path"
10+
"github.com/hashicorp/terraform-plugin-framework/types"
11+
)
12+
13+
type serverHostModel struct {
14+
Id types.String `tfsdk:"id"`
15+
HostID types.String `tfsdk:"host_id"`
16+
Name types.String `tfsdk:"name"`
17+
Hosts types.List `tfsdk:"hosts"`
18+
Default types.Bool `tfsdk:"default"`
19+
}
20+
21+
func (model *serverHostModel) populateFromAPI(ctx context.Context, data *fleetapi.FleetServerHost) (diags diag.Diagnostics) {
22+
if data == nil {
23+
return nil
24+
}
25+
26+
model.Id = types.StringValue(data.Id)
27+
model.HostID = types.StringValue(data.Id)
28+
model.Name = types.StringPointerValue(data.Name)
29+
model.Hosts = utils.SliceToListType_String(ctx, data.HostUrls, path.Root("hosts"), diags)
30+
model.Default = types.BoolValue(data.IsDefault)
31+
32+
return
33+
}
34+
35+
func (model serverHostModel) toAPICreateModel(ctx context.Context) (body fleetapi.PostFleetServerHostsJSONRequestBody, diags diag.Diagnostics) {
36+
body = fleetapi.PostFleetServerHostsJSONRequestBody{
37+
HostUrls: utils.ListTypeToSlice_String(ctx, model.Hosts, path.Root("hosts"), diags),
38+
Id: model.HostID.ValueStringPointer(),
39+
IsDefault: model.Default.ValueBoolPointer(),
40+
Name: model.Name.ValueString(),
41+
}
42+
return
43+
}
44+
45+
func (model serverHostModel) toAPIUpdateModel(ctx context.Context) (body fleetapi.UpdateFleetServerHostsJSONRequestBody, diags diag.Diagnostics) {
46+
body = fleetapi.UpdateFleetServerHostsJSONRequestBody{
47+
HostUrls: utils.ListTypeToSlice_String(ctx, model.Hosts, path.Root("hosts"), diags),
48+
IsDefault: model.Default.ValueBoolPointer(),
49+
Name: model.Name.ValueStringPointer(),
50+
}
51+
return
52+
}

0 commit comments

Comments
 (0)