Skip to content

Commit a7c00a0

Browse files
committed
adds "active" attribute
1 parent 05f41a1 commit a7c00a0

File tree

5 files changed

+103
-10
lines changed

5 files changed

+103
-10
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ HOSTNAME=registry.terraform.io
33
NAMESPACE=benzaita
44
NAME=chaossearch
55
BINARY=terraform-provider-${NAME}
6-
VERSION=0.4.0
6+
VERSION=0.5.0
77
OS_ARCH=linux_amd64
88

99
default: install

chaossearch/client/model.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ type ReadObjectGroupResponse struct {
2525
PartitionBy string
2626
SourceBucket string
2727
IndexRetention int
28+
Active bool
2829
}
2930

3031
type CreateObjectGroupRequest struct {
@@ -39,6 +40,11 @@ type CreateObjectGroupRequest struct {
3940
IndexRetention int
4041
}
4142

43+
type SetActiveRequest struct {
44+
ObjectGroupName string
45+
Active bool
46+
}
47+
4248
type DeleteObjectGroupRequest struct {
4349
Name string
4450
}

chaossearch/client/operation_read_object_group.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,10 @@ func mapBucketTaggingToResponse(tagging *s3.GetBucketTaggingOutput, v *ReadObjec
6464
return err
6565
}
6666

67+
if err := readJSONTagValue(tagging, "cs3.modeled", &v.Active); err != nil {
68+
return err
69+
}
70+
6771
var filterObject struct {
6872
Type string `json:"_type"`
6973
}
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
package client
2+
3+
import (
4+
"bytes"
5+
"context"
6+
"encoding/json"
7+
"fmt"
8+
"net/http"
9+
)
10+
11+
func (client *Client) SetActive(ctx context.Context, req *SetActiveRequest) error {
12+
method := "POST"
13+
url := fmt.Sprintf("%s/Bucket/model", client.config.URL)
14+
15+
bodyAsBytes, err := marshalSetActiveRequest(req)
16+
if err != nil {
17+
return err
18+
}
19+
20+
httpReq, err := http.NewRequestWithContext(ctx, method, url, bytes.NewReader(bodyAsBytes))
21+
if err != nil {
22+
return fmt.Errorf("Failed to create request: %s", err)
23+
}
24+
25+
httpResp, err := client.signAndDo(httpReq, bodyAsBytes)
26+
if err != nil {
27+
return fmt.Errorf("Failed to %s to %s: %s", method, url, err)
28+
}
29+
defer httpResp.Body.Close()
30+
31+
return nil
32+
}
33+
34+
func marshalSetActiveRequest(req *SetActiveRequest) ([]byte, error) {
35+
var modelMode int
36+
37+
if req.Active {
38+
modelMode = 0
39+
} else {
40+
modelMode = -1
41+
}
42+
43+
body := map[string]interface{}{
44+
"BucketName": req.ObjectGroupName,
45+
"ModelMode": modelMode,
46+
}
47+
48+
bodyAsBytes, err := json.Marshal(body)
49+
if err != nil {
50+
return nil, err
51+
}
52+
53+
return bodyAsBytes, nil
54+
}

chaossearch/resource_object_group.go

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,12 @@ func resourceObjectGroup() *schema.Resource {
7979
Optional: true,
8080
ForceNew: false,
8181
},
82+
"active": {
83+
Type: schema.TypeBool,
84+
Description: "Whether the live indexing should be running or not",
85+
Required: true,
86+
ForceNew: false,
87+
},
8288

8389
// Workaround. Otherwise Terraform fails with "All fields are ForceNew or Computed w/out Optional, Update is superfluous"
8490
"description": {
@@ -93,7 +99,7 @@ func resourceObjectGroup() *schema.Resource {
9399
func resourceObjectGroupCreate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
94100
c := meta.(*ProviderMeta).Client
95101

96-
request := &client.CreateObjectGroupRequest{
102+
createObjectGroupRequest := &client.CreateObjectGroupRequest{
97103
Name: data.Get("name").(string),
98104
SourceBucket: data.Get("source_bucket").(string),
99105
FilterJSON: data.Get("filter_json").(string),
@@ -105,8 +111,16 @@ func resourceObjectGroupCreate(ctx context.Context, data *schema.ResourceData, m
105111
IndexRetention: data.Get("index_retention").(int),
106112
}
107113

108-
err := c.CreateObjectGroup(ctx, request)
109-
if err != nil {
114+
if err := c.CreateObjectGroup(ctx, createObjectGroupRequest); err != nil {
115+
return diag.FromErr(err)
116+
}
117+
118+
setActiveRequest := &client.SetActiveRequest{
119+
ObjectGroupName: data.Get("name").(string),
120+
Active: data.Get("active").(bool),
121+
}
122+
123+
if err := c.SetActive(ctx, setActiveRequest); err != nil {
110124
return diag.FromErr(err)
111125
}
112126

@@ -133,6 +147,7 @@ func resourceObjectGroupRead(ctx context.Context, data *schema.ResourceData, met
133147
data.Set("format", resp.Format)
134148
data.Set("live_events_sqs_arn", resp.LiveEventsSqsArn)
135149
data.Set("index_retention", resp.IndexRetention)
150+
data.Set("active", resp.Active)
136151

137152
// When the object in an Object Group use no compression, you need to create it with
138153
// `compression = ""`. However, when querying an Object Group whose object are not
@@ -155,13 +170,20 @@ func resourceObjectGroupRead(ctx context.Context, data *schema.ResourceData, met
155170
func resourceObjectGroupUpdate(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
156171
c := meta.(*ProviderMeta).Client
157172

158-
req := &client.UpdateObjectGroupRequest{
173+
setActiveRequest := &client.SetActiveRequest{
174+
ObjectGroupName: data.Get("name").(string),
175+
Active: data.Get("active").(bool),
176+
}
177+
if err := c.SetActive(ctx, setActiveRequest); err != nil {
178+
return diag.FromErr(err)
179+
}
180+
181+
updateObjectGroupRequest := &client.UpdateObjectGroupRequest{
159182
Name: data.Get("name").(string),
160183
IndexRetention: data.Get("index_retention").(int),
161184
}
162185

163-
err := c.UpdateObjectGroup(ctx, req)
164-
if err != nil {
186+
if err := c.UpdateObjectGroup(ctx, updateObjectGroupRequest); err != nil {
165187
return diag.FromErr(err)
166188
}
167189

@@ -171,12 +193,19 @@ func resourceObjectGroupUpdate(ctx context.Context, data *schema.ResourceData, m
171193
func resourceObjectGroupDelete(ctx context.Context, data *schema.ResourceData, meta interface{}) diag.Diagnostics {
172194
c := meta.(*ProviderMeta).Client
173195

174-
req := &client.DeleteObjectGroupRequest{
196+
stopIndexingRequest := &client.SetActiveRequest{
197+
ObjectGroupName: data.Get("name").(string),
198+
Active: false,
199+
}
200+
if err := c.SetActive(ctx, stopIndexingRequest); err != nil {
201+
return diag.FromErr(err)
202+
}
203+
204+
deleteObjectGroupRequest := &client.DeleteObjectGroupRequest{
175205
Name: data.Get("name").(string),
176206
}
177207

178-
err := c.DeleteObjectGroup(ctx, req)
179-
if err != nil {
208+
if err := c.DeleteObjectGroup(ctx, deleteObjectGroupRequest); err != nil {
180209
return diag.FromErr(err)
181210
}
182211

0 commit comments

Comments
 (0)