Skip to content

Commit 2118714

Browse files
authored
Merge pull request #689 from ovh/dev/aamstutz/dbaas_logs_graylog_output_stream-add-write-token
feat: add write_token field in resource/datasource ovh_dbaas_logs_output_graylog_stream
2 parents 8828894 + 9687535 commit 2118714

7 files changed

+75
-10
lines changed

ovh/data_dbaas_logs_output_graylog_stream.go

+21-10
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
11
package ovh
22

33
import (
4+
"context"
45
"fmt"
56
"log"
67
"net/url"
78
"strings"
89

10+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
911
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1012
)
1113

1214
func dataSourceDbaasLogsOutputGraylogStream() *schema.Resource {
1315
return &schema.Resource{
14-
Read: func(d *schema.ResourceData, meta interface{}) error {
15-
return dataSourceDbaasLogsOutputGraylogStreamRead(d, meta)
16-
},
16+
ReadContext: dataSourceDbaasLogsOutputGraylogStreamRead,
1717
Schema: map[string]*schema.Schema{
1818
"service_name": {
1919
Type: schema.TypeString,
@@ -137,11 +137,17 @@ func dataSourceDbaasLogsOutputGraylogStream() *schema.Resource {
137137
Description: "Enable Websocket",
138138
Computed: true,
139139
},
140+
"write_token": {
141+
Type: schema.TypeString,
142+
Description: "Write token of the stream",
143+
Computed: true,
144+
Sensitive: true,
145+
},
140146
},
141147
}
142148
}
143149

144-
func dataSourceDbaasLogsOutputGraylogStreamRead(d *schema.ResourceData, meta interface{}) error {
150+
func dataSourceDbaasLogsOutputGraylogStreamRead(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
145151
config := meta.(*Config)
146152

147153
serviceName := d.Get("service_name").(string)
@@ -154,7 +160,7 @@ func dataSourceDbaasLogsOutputGraylogStreamRead(d *schema.ResourceData, meta int
154160
url.PathEscape(serviceName),
155161
)
156162
if err := config.OVHClient.Get(endpoint, &res); err != nil {
157-
return fmt.Errorf("Error calling Get %s:\n\t %q", endpoint, err)
163+
return diag.Errorf("Error calling Get %s:\n\t %q", endpoint, err)
158164
}
159165
streams := []*DbaasLogsOutputGraylogStream{}
160166

@@ -169,7 +175,7 @@ func dataSourceDbaasLogsOutputGraylogStreamRead(d *schema.ResourceData, meta int
169175

170176
stream := &DbaasLogsOutputGraylogStream{}
171177
if err := config.OVHClient.Get(endpoint, &stream); err != nil {
172-
return fmt.Errorf("Error calling Get %s:\n\t %q", endpoint, err)
178+
return diag.Errorf("Error calling Get %s:\n\t %q", endpoint, err)
173179
}
174180

175181
log.Printf("[INFO]Comparing : %s ? %s",
@@ -183,12 +189,10 @@ func dataSourceDbaasLogsOutputGraylogStreamRead(d *schema.ResourceData, meta int
183189
}
184190

185191
if len(streams) == 0 {
186-
return fmt.Errorf("Your query returned no results. " +
187-
"Please change your search criteria and try again.")
192+
return diag.Errorf("Your query returned no results. Please change your search criteria and try again.")
188193
}
189194
if len(streams) > 1 {
190-
return fmt.Errorf("Your query returned more than one result. " +
191-
"Please change your search criteria and try again.")
195+
return diag.Errorf("Your query returned more than one result. Please change your search criteria and try again.")
192196
}
193197

194198
for k, v := range streams[0].ToMap() {
@@ -200,5 +204,12 @@ func dataSourceDbaasLogsOutputGraylogStreamRead(d *schema.ResourceData, meta int
200204
}
201205
}
202206

207+
// Get stream write token, if available
208+
writeToken, err := resourceDbaasLogsOutputGraylogStreamGetWriteToken(ctx, config, serviceName, streams[0].StreamId)
209+
if err != nil {
210+
return diag.FromErr(err)
211+
}
212+
d.Set("write_token", writeToken)
213+
203214
return nil
204215
}

ovh/data_dbaas_logs_output_graylog_stream_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ func TestAccDataSourceDbaasLogsOutputGraylogStream_basic(t *testing.T) {
5252
"title",
5353
title,
5454
),
55+
resource.TestCheckResourceAttrSet(
56+
"data.ovh_dbaas_logs_output_graylog_stream.stream",
57+
"write_token",
58+
),
5559
),
5660
},
5761
},

ovh/resource_dbaas_logs_output_graylog_stream.go

+39
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,12 @@ func resourceDbaasLogsOutputGraylogStream() *schema.Resource {
196196
Description: "Stream last update",
197197
Computed: true,
198198
},
199+
"write_token": {
200+
Type: schema.TypeString,
201+
Description: "Write token of the stream",
202+
Computed: true,
203+
Sensitive: true,
204+
},
199205
},
200206
}
201207
}
@@ -302,9 +308,42 @@ func resourceDbaasLogsOutputGraylogStreamRead(ctx context.Context, d *schema.Res
302308
}
303309
}
304310

311+
// Get stream write token, if available
312+
writeToken, err := resourceDbaasLogsOutputGraylogStreamGetWriteToken(ctx, config, serviceName, id)
313+
if err != nil {
314+
return diag.FromErr(helpers.CheckDeleted(d, err, endpoint))
315+
}
316+
d.Set("write_token", writeToken)
317+
305318
return nil
306319
}
307320

321+
func resourceDbaasLogsOutputGraylogStreamGetWriteToken(ctx context.Context, config *Config, serviceName, streamId string) (string, error) {
322+
var (
323+
ruleIds []string
324+
endpoint = fmt.Sprintf("/dbaas/logs/%s/output/graylog/stream/%s/rule", url.PathEscape(serviceName), url.PathEscape(streamId))
325+
)
326+
327+
if err := config.OVHClient.GetWithContext(ctx, endpoint, &ruleIds); err != nil {
328+
return "", fmt.Errorf("failed to list stream rules: %w", err)
329+
}
330+
331+
for _, ruleId := range ruleIds {
332+
rule := DbaasLogsOutputGraylogStreamRule{}
333+
ruleEndpoint := endpoint + "/" + url.PathEscape(ruleId)
334+
335+
if err := config.OVHClient.GetWithContext(ctx, ruleEndpoint, &rule); err != nil {
336+
return "", fmt.Errorf("failed to get stream rule %q: %w", ruleId, err)
337+
}
338+
339+
if rule.Field == "X-OVH-TOKEN" {
340+
return rule.Value, nil
341+
}
342+
}
343+
344+
return "", nil
345+
}
346+
308347
func resourceDbaasLogsOutputGraylogStreamDelete(ctx context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
309348
config := meta.(*Config)
310349

ovh/resource_dbaas_logs_output_graylog_stream_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,10 @@ func TestAccResourceDbaasLogsOutputGraylogStream_basic(t *testing.T) {
127127
"title",
128128
title,
129129
),
130+
resource.TestCheckResourceAttrSet(
131+
"ovh_dbaas_logs_output_graylog_stream.stream",
132+
"write_token",
133+
),
130134
),
131135
},
132136
},

ovh/types_dbaas_logs_output_graylog_stream.go

+5
Original file line numberDiff line numberDiff line change
@@ -155,3 +155,8 @@ func (opts *DbaasLogsOutputGraylogStreamUpdateOpts) FromResource(d *schema.Resou
155155

156156
return opts
157157
}
158+
159+
type DbaasLogsOutputGraylogStreamRule struct {
160+
Field string `json:"field"`
161+
Value string `json:"value"`
162+
}

website/docs/d/dbaas_logs_output_graylog_stream.html.markdown

+1
Original file line numberDiff line numberDiff line change
@@ -46,3 +46,4 @@ data "ovh_dbaas_logs_output_graylog_stream" "stream" {
4646
* `stream_id` - Stream ID
4747
* `updated_at` - Stream last update
4848
* `web_socket_enabled` - Enable Websocket
49+
* `write_token` - Write token of the stream (empty if the caller is not the owner of the stream)

website/docs/r/dbaas_logs_graylog_output_stream.html.markdown

+1
Original file line numberDiff line numberDiff line change
@@ -48,3 +48,4 @@ Id is set to the output stream Id. In addition, the following attributes are exp
4848
* `nb_archive` - Number of coldstored archivesr
4949
* `stream_id` - Stream ID
5050
* `updated_at` - Stream last updater
51+
* `write_token` - Write token of the stream (empty if the caller is not the owner of the stream)

0 commit comments

Comments
 (0)