Skip to content

Commit

Permalink
feature: Add support for segment log stream (#437)
Browse files Browse the repository at this point in the history
Co-authored-by: Jeff Ishar <[email protected]>
Co-authored-by: Sergiu Ghitea <[email protected]>
  • Loading branch information
3 people authored Jan 27, 2023
1 parent c4d6f6a commit ac1ab8e
Show file tree
Hide file tree
Showing 4 changed files with 704 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/resources/log_stream.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ Optional:
- `mixpanel_region` (String) The Mixpanel region. Options are ["us", "eu"]. EU is required for customers with EU data residency requirements.
- `mixpanel_service_account_password` (String, Sensitive) The Mixpanel Service Account password.
- `mixpanel_service_account_username` (String) The Mixpanel Service Account username. Services Accounts can be created in the Project Settings page.
- `segment_write_key` (String, Sensitive) The [Segment Write Key](https://segment.com/docs/connections/find-writekey/).
- `splunk_domain` (String) The Splunk domain name.
- `splunk_port` (String) The Splunk port.
- `splunk_secure` (Boolean) This toggle should be turned off when using self-signed certificates.
Expand Down
22 changes: 22 additions & 0 deletions internal/provider/resource_auth0_log_stream.go
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ func newLogStream() *schema.Resource {
"splunk",
"sumo",
"mixpanel",
"segment",
}, true),
ForceNew: true,
Description: "Type of the log stream, which indicates the sink provider.",
Expand Down Expand Up @@ -245,6 +246,12 @@ func newLogStream() *schema.Resource {
RequiredWith: []string{"sink.0.mixpanel_region", "sink.0.mixpanel_project_id", "sink.0.mixpanel_service_account_username"},
Description: "The Mixpanel Service Account password.",
},
"segment_write_key": {
Type: schema.TypeString,
Optional: true,
Sensitive: true,
Description: "The [Segment Write Key](https://segment.com/docs/connections/find-writekey/).",
},
},
},
},
Expand Down Expand Up @@ -341,6 +348,8 @@ func flattenLogStreamSink(d *schema.ResourceData, sink interface{}) []interface{
m = flattenLogStreamSinkSumo(sinkType)
case *management.LogStreamSinkMixpanel:
m = flattenLogStreamSinkMixpanel(d, sinkType)
case *management.LogStreamSinkSegment:
m = flattenLogStreamSinkSegment(sinkType)
}

return []interface{}{m}
Expand Down Expand Up @@ -380,6 +389,12 @@ func flattenLogStreamSinkDatadog(o *management.LogStreamSinkDatadog) interface{}
}
}

func flattenLogStreamSinkSegment(o *management.LogStreamSinkSegment) interface{} {
return map[string]interface{}{
"segment_write_key": o.GetWriteKey(),
}
}

func flattenLogStreamSinkSplunk(o *management.LogStreamSinkSplunk) interface{} {
return map[string]interface{}{
"splunk_domain": o.GetDomain(),
Expand Down Expand Up @@ -454,6 +469,8 @@ func expandLogStream(d *schema.ResourceData) *management.LogStream {
logStream.Sink = expandLogStreamSinkSumo(sink)
case management.LogStreamTypeMixpanel:
logStream.Sink = expandLogStreamSinkMixpanel(sink)
case management.LogStreamTypeSegment:
logStream.Sink = expandLogStreamSinkSegment(sink)
default:
log.Printf("[WARN]: Unsupported log stream sink %s", logStream.GetType())
log.Printf("[WARN]: Raise an issue with the auth0 provider in order to support it:")
Expand Down Expand Up @@ -510,6 +527,11 @@ func expandLogStreamSinkDatadog(config cty.Value) *management.LogStreamSinkDatad
APIKey: value.String(config.GetAttr("datadog_api_key")),
}
}
func expandLogStreamSinkSegment(config cty.Value) *management.LogStreamSinkSegment {
return &management.LogStreamSinkSegment{
WriteKey: value.String(config.GetAttr("segment_write_key")),
}
}
func expandLogStreamSinkSplunk(config cty.Value) *management.LogStreamSinkSplunk {
return &management.LogStreamSinkSplunk{
Domain: value.String(config.GetAttr("splunk_domain")),
Expand Down
103 changes: 103 additions & 0 deletions internal/provider/resource_auth0_log_stream_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,109 @@ resource "auth0_log_stream" "my_log_stream" {
}
`

func TestAccLogStreamSegment(t *testing.T) {
httpRecorder := recorder.New(t)

resource.Test(t, resource.TestCase{
ProviderFactories: testProviders(httpRecorder),
Steps: []resource.TestStep{
{
Config: template.ParseTestName(logStreamSegmentConfig, t.Name()),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "name", fmt.Sprintf("Acceptance-Test-LogStream-segment-%s", t.Name())),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "type", "segment"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "sink.0.segment_write_key", "121233123455"),
),
},
{
Config: template.ParseTestName(logStreamSegmentConfigUpdate, t.Name()),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "name", fmt.Sprintf("Acceptance-Test-LogStream-segment-%s", t.Name())),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "type", "segment"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "filters.#", "0"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "sink.0.segment_write_key", "12120908909089"),
),
},
{
Config: template.ParseTestName(logStreamSegmentConfigUpdateWithFilters, t.Name()),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "name", fmt.Sprintf("Acceptance-Test-LogStream-segment-%s", t.Name())),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "type", "segment"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "filters.#", "2"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "filters.0.type", "category"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "filters.0.name", "auth.login.fail"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "filters.1.type", "category"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "filters.1.name", "auth.signup.fail"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "sink.0.segment_write_key", "12120908909089"),
),
},
{
Config: template.ParseTestName(logStreamSegmentConfigUpdateWithEmptyFilters, t.Name()),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "name", fmt.Sprintf("Acceptance-Test-LogStream-segment-%s", t.Name())),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "type", "segment"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "filters.#", "0"),
resource.TestCheckResourceAttr("auth0_log_stream.my_log_stream", "sink.0.segment_write_key", "12120908909089"),
),
},
},
})
}

const logStreamSegmentConfig = `
resource "auth0_log_stream" "my_log_stream" {
name = "Acceptance-Test-LogStream-segment-{{.testName}}"
type = "segment"
sink {
segment_write_key = "121233123455"
}
}
`
const logStreamSegmentConfigUpdate = `
resource "auth0_log_stream" "my_log_stream" {
name = "Acceptance-Test-LogStream-segment-{{.testName}}"
type = "segment"
sink {
segment_write_key = "12120908909089"
}
}
`

const logStreamSegmentConfigUpdateWithFilters = `
resource "auth0_log_stream" "my_log_stream" {
name = "Acceptance-Test-LogStream-segment-{{.testName}}"
type = "segment"
filters = [
{
type = "category"
name = "auth.login.fail"
},
{
type = "category"
name = "auth.signup.fail"
}
]
sink {
segment_write_key = "12120908909089"
}
}
`

const logStreamSegmentConfigUpdateWithEmptyFilters = `
resource "auth0_log_stream" "my_log_stream" {
name = "Acceptance-Test-LogStream-segment-{{.testName}}"
type = "segment"
filters = [ ]
sink {
segment_write_key = "12120908909089"
}
}
`

func TestAccLogStreamSumo(t *testing.T) {
httpRecorder := recorder.New(t)

Expand Down
Loading

0 comments on commit ac1ab8e

Please sign in to comment.