Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(service_integration): add source and destination project names #1936

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ nav_order: 1
- Add `alloydbomni` BETA resource and datasource
- Add `aiven_alloydbomni_user` BETA resource and datasource
- Add `aiven_alloydbomni_database` BETA resource and datasource
- Add `aiven_service_integration` resource field `destination_service_project`: Destination service project name
- Add `aiven_service_integration` resource field `source_service_project`: Source service project name
- Add `aiven_service_integration` datasource field `destination_service_project`: Destination service project name
- Add `aiven_service_integration` datasource field `source_service_project`: Source service project name

## [4.30.0] - 2024-12-05

Expand Down
2 changes: 2 additions & 0 deletions docs/data-sources/service_integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ data "aiven_service_integration" "example_integration" {
- `clickhouse_postgresql_user_config` (List of Object) ClickhousePostgresql user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedatt--clickhouse_postgresql_user_config))
- `datadog_user_config` (List of Object) Datadog user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedatt--datadog_user_config))
- `destination_endpoint_id` (String) Destination endpoint for the integration.
- `destination_service_project` (String) Destination service project name
- `external_aws_cloudwatch_logs_user_config` (List of Object) ExternalAwsCloudwatchLogs user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedatt--external_aws_cloudwatch_logs_user_config))
- `external_aws_cloudwatch_metrics_user_config` (List of Object) ExternalAwsCloudwatchMetrics user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedatt--external_aws_cloudwatch_metrics_user_config))
- `external_elasticsearch_logs_user_config` (List of Object) ExternalElasticsearchLogs user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedatt--external_elasticsearch_logs_user_config))
Expand All @@ -51,6 +52,7 @@ data "aiven_service_integration" "example_integration" {
- `metrics_user_config` (List of Object) Metrics user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedatt--metrics_user_config))
- `prometheus_user_config` (List of Object) Prometheus user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedatt--prometheus_user_config))
- `source_endpoint_id` (String) Source endpoint for the integration.
- `source_service_project` (String) Source service project name

<a id="nestedatt--clickhouse_kafka_user_config"></a>
### Nested Schema for `clickhouse_kafka_user_config`
Expand Down
2 changes: 2 additions & 0 deletions docs/resources/service_integration.md
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,7 @@ resource "aiven_service_integration" "autoscaler_integration" {
- `datadog_user_config` (Block List, Max: 1) Datadog user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedblock--datadog_user_config))
- `destination_endpoint_id` (String) Destination endpoint for the integration.
- `destination_service_name` (String) Destination service for the integration.
- `destination_service_project` (String) Destination service project name
- `external_aws_cloudwatch_logs_user_config` (Block List, Max: 1) ExternalAwsCloudwatchLogs user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedblock--external_aws_cloudwatch_logs_user_config))
- `external_aws_cloudwatch_metrics_user_config` (Block List, Max: 1) ExternalAwsCloudwatchMetrics user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedblock--external_aws_cloudwatch_metrics_user_config))
- `external_elasticsearch_logs_user_config` (Block List, Max: 1) ExternalElasticsearchLogs user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedblock--external_elasticsearch_logs_user_config))
Expand All @@ -81,6 +82,7 @@ resource "aiven_service_integration" "autoscaler_integration" {
- `prometheus_user_config` (Block List, Max: 1) Prometheus user configurable settings. **Warning:** There's no way to reset advanced configuration options to default. Options that you add cannot be removed later (see [below for nested schema](#nestedblock--prometheus_user_config))
- `source_endpoint_id` (String) Source endpoint for the integration.
- `source_service_name` (String) Source service for the integration (if any)
- `source_service_project` (String) Source service project name
- `timeouts` (Block, Optional) (see [below for nested schema](#nestedblock--timeouts))

### Read-Only
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,13 @@ func aivenServiceIntegrationSchema() map[string]*schema.Schema {
Optional: true,
Type: schema.TypeString,
},
"destination_service_project": {
Description: "Destination service project name",
ForceNew: true,
Optional: true,
Computed: true,
Type: schema.TypeString,
},
"integration_type": {
Description: userconfig.Desc("Type of the service integration").PossibleValuesString(service.IntegrationTypeChoices()...).Build(),
ForceNew: true,
Expand All @@ -69,6 +76,14 @@ func aivenServiceIntegrationSchema() map[string]*schema.Schema {
Description: "Source service for the integration (if any)",
ForceNew: true,
Optional: true,
Computed: true,
Type: schema.TypeString,
},
"source_service_project": {
Description: "Source service project name",
ForceNew: true,
Optional: true,
Computed: true,
Type: schema.TypeString,
},
}
Expand Down Expand Up @@ -132,6 +147,8 @@ func resourceServiceIntegrationCreate(ctx context.Context, d *schema.ResourceDat
IntegrationType: service.IntegrationType(integrationType),
SourceEndpointId: plainEndpointID(schemautil.OptionalStringPointer(d, "source_endpoint_id")),
SourceService: schemautil.OptionalStringPointer(d, "source_service_name"),
DestProject: schemautil.OptionalStringPointer(d, "destination_service_project"),
SourceProject: schemautil.OptionalStringPointer(d, "source_service_project"),
}

uc, err := converters.Expand(converters.ServiceIntegrationUserConfig, integrationType, d)
Expand Down Expand Up @@ -336,5 +353,12 @@ func resourceServiceIntegrationCopyAPIResponseToTerraform(
return err
}

if err := d.Set("destination_service_project", res.DestProject); err != nil {
return err
}
if err := d.Set("source_service_project", res.SourceProject); err != nil {
return err
}

return converters.Flatten(converters.ServiceIntegrationUserConfig, string(integrationType), d, res.UserConfig)
}
Original file line number Diff line number Diff line change
Expand Up @@ -761,3 +761,103 @@ func TestAccAivenServiceIntegration_autoscaler(t *testing.T) {
},
})
}

func TestAccAivenServiceIntegration_destination_service_name(t *testing.T) {
projectMetrics := os.Getenv("AIVEN_PROJECT_NAME")
projectServices := os.Getenv("AIVEN_PROJECT_NAME_SECONDARY")
if projectServices == "" {
t.Skip("AIVEN_PROJECT_NAME_SECONDARY is not set")
}

thanosToGrafanaName := "aiven_service_integration.thanos_to_grafana"
kafkaToThanosName := "aiven_service_integration.kafka_to_thanos"
resource.ParallelTest(t, resource.TestCase{
ProtoV6ProviderFactories: acc.TestProtoV6ProviderFactories,
CheckDestroy: testAccCheckAivenServiceIntegrationResourceDestroy,
Steps: []resource.TestStep{
{
Config: testAccAivenServiceIntegrationDestinationServiceName(projectMetrics, projectServices),
Check: resource.ComposeTestCheckFunc(
// Same source and destination project names
resource.TestCheckResourceAttr(thanosToGrafanaName, "integration_type", "dashboard"),
resource.TestCheckResourceAttr(thanosToGrafanaName, "source_service_project", projectMetrics),
resource.TestCheckResourceAttr(thanosToGrafanaName, "destination_service_project", projectMetrics),

// Different source and destination project names
resource.TestCheckResourceAttr(kafkaToThanosName, "integration_type", "metrics"),
resource.TestCheckResourceAttr(kafkaToThanosName, "source_service_project", projectServices),
resource.TestCheckResourceAttr(kafkaToThanosName, "destination_service_project", projectMetrics),
),
},
},
})
}

func testAccAivenServiceIntegrationDestinationServiceName(projectMetrics, projectService string) string {
return fmt.Sprintf(`
data "aiven_project" "metrics" {
project = %[1]q
}

data "aiven_project" "services" {
project = %[2]q
}

resource "aiven_grafana" "grafana" {
project = data.aiven_project.metrics.project
cloud_name = "google-europe-west1"
plan = "startup-1"
service_name = "test-acc-grafana-%[3]s"
maintenance_window_dow = "sunday"
maintenance_window_time = "10:00:00"

grafana_user_config {
alerting_enabled = true
}
}

resource "aiven_thanos" "thanos" {
project = data.aiven_project.metrics.project
cloud_name = "google-europe-west1"
plan = "startup-4"
service_name = "test-acc-thanos-%[3]s"
maintenance_window_dow = "sunday"
maintenance_window_time = "10:00:00"
}

resource "aiven_kafka" "kafka_service" {
project = data.aiven_project.services.project
cloud_name = "google-europe-west1"
plan = "business-4"
service_name = "test-acc-kafka-%[3]s"
maintenance_window_dow = "sunday"
maintenance_window_time = "10:00:00"

kafka_user_config {
schema_registry = true
kafka_rest = true

kafka {
group_max_session_timeout_ms = 70000
log_retention_bytes = 1000000000
}
}
}

resource "aiven_service_integration" "thanos_to_grafana" {
project = data.aiven_project.metrics.project
integration_type = "dashboard"
source_service_name = aiven_grafana.grafana.service_name // project "metrics"
destination_service_name = aiven_thanos.thanos.service_name // project "metrics"
destination_service_project = aiven_thanos.thanos.project
}

resource "aiven_service_integration" "kafka_to_thanos" {
project = data.aiven_project.services.project
integration_type = "metrics"
source_service_name = aiven_kafka.kafka_service.service_name // project "services"
destination_service_name = aiven_thanos.thanos.service_name // project "metrics"
destination_service_project = aiven_thanos.thanos.project
}
`, projectMetrics, projectService, acc.RandStr())
}
Loading