Skip to content

Commit

Permalink
Integration management (#57)
Browse files Browse the repository at this point in the history
* packages

* prg

* prg

* sets, map

* test

* api change

* datadog test

* slack test

* segment test

* markdown, tests
  • Loading branch information
laliconfigcat authored Aug 12, 2024
1 parent dabf8d9 commit 6b90dce
Show file tree
Hide file tree
Showing 46 changed files with 1,548 additions and 140 deletions.
129 changes: 129 additions & 0 deletions docs/resources/integration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
---
# generated by https://github.com/hashicorp/terraform-plugin-docs
page_title: "configcat_integration Resource - terraform-provider-configcat"
subcategory: ""
description: |-
Creates and manages an Integration. Read more about Integrations in ConfigCat https://configcat.com/docs/integrations/overview/
---

# configcat_integration (Resource)

Creates and manages an **Integration**. [Read more about Integrations in ConfigCat](https://configcat.com/docs/integrations/overview/)

## Example Usage

```terraform
variable "product_id" {
type = string
}
variable "config_id" {
type = string
}
variable "environment_id" {
type = string
}
# Configure connected configs and environments
resource "configcat_integration" "slack_integration_with_configs_and_environments" {
product_id = var.product_id
integration_type = "slack"
name = "Slack integration"
parameters = {
"incoming_webhook.url" = "https://mycompany.slack.com/services/B0000000000"
}
configs = [var.config_id]
environments = [var.environment_id]
}
# Slack integration (https://configcat.com/docs/integrations/slack/)
resource "configcat_integration" "slack_integration" {
product_id = var.product_id
integration_type = "slack"
name = "Slack integration"
parameters = {
"incoming_webhook.url" = "https://mycompany.slack.com/services/B0000000000" # The incoming webhook URL where the integration should post messages. Read more at https://api.slack.com/messaging/webhooks.
}
}
# Datadog integration (https://configcat.com/docs/integrations/datadog/)
resource "configcat_integration" "datadog_integration" {
product_id = var.product_id
integration_type = "dataDog"
name = "Datadog integration"
parameters = {
"apikey" = "" # Datadog API key. Read more at https://docs.datadoghq.com/account_management/api-app-keys/#api-keys
"site" = "Us" # Optional. Datadog site. Available values: Us, Eu, Us1Fed, Us3, Us5. Default: Us. Read more at https://docs.datadoghq.com/getting_started/site/.
}
}
# Amplitude integration (https://configcat.com/docs/integrations/amplitude/#annotations)
resource "configcat_integration" "amplitude_integration" {
product_id = var.product_id
integration_type = "amplitude"
name = "Amplitude integration"
parameters = {
"apikey" = "" # Amplitude API Key. Read more at https://amplitude.com/docs/apis/authentication.
"secretKey" = "" # Amplitude Secret Key. Read more at https://amplitude.com/docs/apis/authentication.
}
}
# Mixpanel integration (https://configcat.com/docs/integrations/mixpanel/#annotations)
resource "configcat_integration" "mixpanel_integration" {
product_id = var.product_id
integration_type = "mixPanel"
name = "Mixpanel integration"
parameters = {
"serviceAccountUserName" = "" # Mixpanel Service Account Username.
"serviceAccountSecret" = "" # Mixpanel Service Account Secret.
"projectId" = "" # Mixpanel Service Account Secret.
"server" = "StandardServer" # Mixpanel Server. Available values: StandardServer, EUResidencyServer. Default: StandardServer. Read more at https://docs.mixpanel.com/docs/privacy/eu-residency.
}
}
# Segment integration (https://configcat.com/docs/integrations/segment/#changeevents)
resource "configcat_integration" "mixpanel_integration" {
product_id = var.product_id
integration_type = "segment"
name = "Mixpanel integration"
parameters = {
"writeKey" = "" # Twilio Segment Write Key.
"server" = "StandardServer" # Twilio Segment Server. Available values: Us, Eu. Default: Us. Read more at https://segment.com/docs/guides/regional-segment/.
}
}
output "slack_integration_id" {
value = configcat_integration.slack_integration.id
}
```

<!-- schema generated by tfplugindocs -->
## Schema

### Required

- `integration_type` (String) The integration type of the Integration. Possible values: `dataDog`, `slack`, `amplitude`, `mixPanel`, `segment`, `pubNub`.
- `name` (String) The name of the Integration.
- `product_id` (String) The ID of the Product.

### Optional

- `configs` (Set of String) List of Config IDs that are connected with this Integration. If the list is empty, all of the Configs are connected.
- `environments` (Set of String) List of Environment IDs that are connected with this Integration. If the list is empty, all of the Environments are connected.
- `parameters` (Map of String) Parameters of the integration. The Parameters dictionary differs for each IntegrationType. See available options per integration type at the examples.

### Read-Only

- `id` (String) The unique ID of the Integration.

## Import

Import is supported using the following syntax:

```shell
# Integrations can be imported using the IntegrationId. Get the IntegrationId using the [List Integrations API](https://api.configcat.com/docs/index.html#tag/Integrations/operation/get-integrations) for example.

terraform import configcat_integration.example 08d86d63-2726-47cd-8bfc-59608ecb91e2
```
4 changes: 2 additions & 2 deletions docs/resources/permission_group.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,8 +61,8 @@ resource "configcat_permission_group" "custom_permission_group" {
accesstype = "custom"
environment_accesses = {
var.test_environment_id = "full"
var.productuction_environment_id = "readOnly"
(var.test_environment_id) = "full"
(var.productuction_environment_id) = "readOnly"
}
}
Expand Down
4 changes: 2 additions & 2 deletions docs/resources/product_preferences.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,8 @@ resource "configcat_product_preferences" "preferences" {
show_variation_id = false
reason_required = false
reason_required_environments = {
"${configcat_environment.test.id}" = false,
"${configcat_environment.production.id}" = true,
(configcat_environment.test.id) = false,
(configcat_environment.production.id) = true,
}
}
```
Expand Down
2 changes: 1 addition & 1 deletion docs/resources/setting_value_v2.md
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,7 @@ Required:
- `prerequisite_setting_id` (String) The prerequisite flag's identifier.

<a id="nestedatt--targeting_rules--conditions--prerequisite_flag_condition--comparison_value"></a>
### Nested Schema for `targeting_rules.conditions.prerequisite_flag_condition.prerequisite_setting_id`
### Nested Schema for `targeting_rules.conditions.prerequisite_flag_condition.comparison_value`

Optional:

Expand Down
3 changes: 3 additions & 0 deletions examples/resources/configcat_integration/import.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Integrations can be imported using the IntegrationId. Get the IntegrationId using the [List Integrations API](https://api.configcat.com/docs/index.html#tag/Integrations/operation/get-integrations) for example.

terraform import configcat_integration.example 08d86d63-2726-47cd-8bfc-59608ecb91e2
84 changes: 84 additions & 0 deletions examples/resources/configcat_integration/resource.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
variable "product_id" {
type = string
}

variable "config_id" {
type = string
}

variable "environment_id" {
type = string
}

# Configure connected configs and environments
resource "configcat_integration" "slack_integration_with_configs_and_environments" {
product_id = var.product_id
integration_type = "slack"
name = "Slack integration"
parameters = {
"incoming_webhook.url" = "https://mycompany.slack.com/services/B0000000000"
}

configs = [var.config_id]
environments = [var.environment_id]
}

# Slack integration (https://configcat.com/docs/integrations/slack/)
resource "configcat_integration" "slack_integration" {
product_id = var.product_id
integration_type = "slack"
name = "Slack integration"
parameters = {
"incoming_webhook.url" = "https://mycompany.slack.com/services/B0000000000" # The incoming webhook URL where the integration should post messages. Read more at https://api.slack.com/messaging/webhooks.
}
}

# Datadog integration (https://configcat.com/docs/integrations/datadog/)
resource "configcat_integration" "datadog_integration" {
product_id = var.product_id
integration_type = "dataDog"
name = "Datadog integration"
parameters = {
"apikey" = "" # Datadog API key. Read more at https://docs.datadoghq.com/account_management/api-app-keys/#api-keys
"site" = "Us" # Optional. Datadog site. Available values: Us, Eu, Us1Fed, Us3, Us5. Default: Us. Read more at https://docs.datadoghq.com/getting_started/site/.
}
}

# Amplitude integration (https://configcat.com/docs/integrations/amplitude/#annotations)
resource "configcat_integration" "amplitude_integration" {
product_id = var.product_id
integration_type = "amplitude"
name = "Amplitude integration"
parameters = {
"apikey" = "" # Amplitude API Key. Read more at https://amplitude.com/docs/apis/authentication.
"secretKey" = "" # Amplitude Secret Key. Read more at https://amplitude.com/docs/apis/authentication.
}
}

# Mixpanel integration (https://configcat.com/docs/integrations/mixpanel/#annotations)
resource "configcat_integration" "mixpanel_integration" {
product_id = var.product_id
integration_type = "mixPanel"
name = "Mixpanel integration"
parameters = {
"serviceAccountUserName" = "" # Mixpanel Service Account Username.
"serviceAccountSecret" = "" # Mixpanel Service Account Secret.
"projectId" = "" # Mixpanel Service Account Secret.
"server" = "StandardServer" # Mixpanel Server. Available values: StandardServer, EUResidencyServer. Default: StandardServer. Read more at https://docs.mixpanel.com/docs/privacy/eu-residency.
}
}

# Segment integration (https://configcat.com/docs/integrations/segment/#changeevents)
resource "configcat_integration" "mixpanel_integration" {
product_id = var.product_id
integration_type = "segment"
name = "Mixpanel integration"
parameters = {
"writeKey" = "" # Twilio Segment Write Key.
"server" = "StandardServer" # Twilio Segment Server. Available values: Us, Eu. Default: Us. Read more at https://segment.com/docs/guides/regional-segment/.
}
}

output "slack_integration_id" {
value = configcat_integration.slack_integration.id
}
37 changes: 20 additions & 17 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,24 +3,29 @@ module github.com/configcat/terraform-provider-configcat
go 1.21

require (
github.com/hashicorp/terraform-plugin-docs v0.18.0
github.com/hashicorp/terraform-plugin-framework v1.10.0
github.com/configcat/configcat-publicapi-go-client/v2 v2.0.0
github.com/hashicorp/terraform-plugin-docs v0.19.4
github.com/hashicorp/terraform-plugin-framework v1.11.0
github.com/hashicorp/terraform-plugin-go v0.23.0
github.com/hashicorp/terraform-plugin-log v0.9.0
github.com/hashicorp/terraform-plugin-testing v1.6.0
github.com/hashicorp/terraform-plugin-testing v1.10.0
github.com/stretchr/testify v1.9.0
)

require (
github.com/BurntSushi/toml v1.2.1 // indirect
github.com/Kunde21/markdownfmt/v3 v3.1.0 // indirect
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/hashicorp/cli v1.1.6 // indirect
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 // indirect
github.com/mattn/go-runewidth v0.0.9 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/yuin/goldmark v1.6.0 // indirect
github.com/yuin/goldmark v1.7.1 // indirect
github.com/yuin/goldmark-meta v1.1.0 // indirect
golang.org/x/sync v0.7.0 // indirect
go.abhg.dev/goldmark/frontmatter v0.2.0 // indirect
golang.org/x/sync v0.8.0 // indirect
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
gopkg.in/yaml.v2 v2.3.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
Expand All @@ -36,7 +41,6 @@ require (
github.com/armon/go-radix v1.0.0 // indirect
github.com/bgentry/speakeasy v0.1.0 // indirect
github.com/cloudflare/circl v1.3.7 // indirect
github.com/configcat/configcat-publicapi-go-client v1.12.0
github.com/fatih/color v1.17.0 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/go-cmp v0.6.0 // indirect
Expand All @@ -49,9 +53,9 @@ require (
github.com/hashicorp/go-multierror v1.1.1 // indirect
github.com/hashicorp/go-plugin v1.6.1 // indirect
github.com/hashicorp/go-uuid v1.0.3 // indirect
github.com/hashicorp/go-version v1.6.0 // indirect
github.com/hashicorp/hc-install v0.6.4 // indirect
github.com/hashicorp/hcl/v2 v2.20.1 // indirect
github.com/hashicorp/go-version v1.7.0 // indirect
github.com/hashicorp/hc-install v0.8.0 // indirect
github.com/hashicorp/hcl/v2 v2.21.0 // indirect
github.com/hashicorp/logutils v1.0.0 // indirect
github.com/hashicorp/terraform-exec v0.21.0 // indirect
github.com/hashicorp/terraform-json v0.22.1 // indirect
Expand All @@ -70,21 +74,20 @@ require (
github.com/mitchellh/reflectwalk v1.0.2 // indirect
github.com/oklog/run v1.1.0 // indirect
github.com/posener/complete v1.2.3 // indirect
github.com/russross/blackfriday v1.6.0 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
github.com/zclconf/go-cty v1.14.4 // indirect
golang.org/x/crypto v0.25.0 // indirect
github.com/zclconf/go-cty v1.15.0 // indirect
golang.org/x/crypto v0.26.0 // indirect
golang.org/x/exp v0.0.0-20230809150735-7b3493d9a819 // indirect
golang.org/x/mod v0.17.0 // indirect
golang.org/x/net v0.27.0 // indirect
golang.org/x/sys v0.23.0 // indirect
golang.org/x/text v0.16.0 // indirect
golang.org/x/mod v0.19.0 // indirect
golang.org/x/net v0.28.0 // indirect
golang.org/x/sys v0.24.0 // indirect
golang.org/x/text v0.17.0 // indirect
google.golang.org/appengine v1.6.8 // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf // indirect
google.golang.org/genproto/googleapis/rpc v0.0.0-20240808171019-573a1156607a // indirect
google.golang.org/grpc v1.65.0 // indirect
google.golang.org/protobuf v1.34.2 // indirect
)
Loading

0 comments on commit 6b90dce

Please sign in to comment.