/
create.go
57 lines (47 loc) · 1.71 KB
/
create.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package data_view
import (
"context"
"github.com/elastic/terraform-provider-elasticstack/internal/clients"
"github.com/elastic/terraform-provider-elasticstack/internal/utils"
"github.com/hashicorp/terraform-plugin-framework/resource"
"github.com/hashicorp/terraform-plugin-framework/types"
)
func (r *Resource) Create(ctx context.Context, request resource.CreateRequest, response *resource.CreateResponse) {
if !r.resourceReady(&response.Diagnostics) {
return
}
dataviewClient, err := r.client.GetDataViewsClient()
if err != nil {
response.Diagnostics.AddError("unable to get data view client", err.Error())
return
}
var model tfModelV0
response.Diagnostics.Append(request.Plan.Get(ctx, &model)...)
if response.Diagnostics.HasError() {
return
}
apiModel, diags := model.ToCreateRequest(ctx)
response.Diagnostics.Append(diags...)
authCtx := r.client.SetDataviewAuthContext(ctx)
respModel, res, err := dataviewClient.CreateDataView(authCtx, model.SpaceID.ValueString()).CreateDataViewRequestObject(apiModel).KbnXsrf("true").Execute()
if err != nil && res == nil {
response.Diagnostics.AddError("Failed to create data view", err.Error())
return
}
defer res.Body.Close()
response.Diagnostics.Append(utils.CheckHttpErrorFromFW(res, "Unable to create data view")...)
if response.Diagnostics.HasError() {
return
}
resourceID := clients.CompositeId{
ClusterId: model.SpaceID.ValueString(),
ResourceId: *respModel.DataView.Id,
}
model.ID = types.StringValue(resourceID.String())
readModel, diags := r.read(ctx, model)
response.Diagnostics = append(response.Diagnostics, diags...)
if response.Diagnostics.HasError() {
return
}
response.Diagnostics.Append(response.State.Set(ctx, readModel)...)
}