Skip to content

Commit 6b90dce

Browse files
Integration management (#57)
* packages * prg * prg * sets, map * test * api change * datadog test * slack test * segment test * markdown, tests
1 parent dabf8d9 commit 6b90dce

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

46 files changed

+1548
-140
lines changed

docs/resources/integration.md

Lines changed: 129 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,129 @@
1+
---
2+
# generated by https://github.com/hashicorp/terraform-plugin-docs
3+
page_title: "configcat_integration Resource - terraform-provider-configcat"
4+
subcategory: ""
5+
description: |-
6+
Creates and manages an Integration. Read more about Integrations in ConfigCat https://configcat.com/docs/integrations/overview/
7+
---
8+
9+
# configcat_integration (Resource)
10+
11+
Creates and manages an **Integration**. [Read more about Integrations in ConfigCat](https://configcat.com/docs/integrations/overview/)
12+
13+
## Example Usage
14+
15+
```terraform
16+
variable "product_id" {
17+
type = string
18+
}
19+
20+
variable "config_id" {
21+
type = string
22+
}
23+
24+
variable "environment_id" {
25+
type = string
26+
}
27+
28+
# Configure connected configs and environments
29+
resource "configcat_integration" "slack_integration_with_configs_and_environments" {
30+
product_id = var.product_id
31+
integration_type = "slack"
32+
name = "Slack integration"
33+
parameters = {
34+
"incoming_webhook.url" = "https://mycompany.slack.com/services/B0000000000"
35+
}
36+
37+
configs = [var.config_id]
38+
environments = [var.environment_id]
39+
}
40+
41+
# Slack integration (https://configcat.com/docs/integrations/slack/)
42+
resource "configcat_integration" "slack_integration" {
43+
product_id = var.product_id
44+
integration_type = "slack"
45+
name = "Slack integration"
46+
parameters = {
47+
"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.
48+
}
49+
}
50+
51+
# Datadog integration (https://configcat.com/docs/integrations/datadog/)
52+
resource "configcat_integration" "datadog_integration" {
53+
product_id = var.product_id
54+
integration_type = "dataDog"
55+
name = "Datadog integration"
56+
parameters = {
57+
"apikey" = "" # Datadog API key. Read more at https://docs.datadoghq.com/account_management/api-app-keys/#api-keys
58+
"site" = "Us" # Optional. Datadog site. Available values: Us, Eu, Us1Fed, Us3, Us5. Default: Us. Read more at https://docs.datadoghq.com/getting_started/site/.
59+
}
60+
}
61+
62+
# Amplitude integration (https://configcat.com/docs/integrations/amplitude/#annotations)
63+
resource "configcat_integration" "amplitude_integration" {
64+
product_id = var.product_id
65+
integration_type = "amplitude"
66+
name = "Amplitude integration"
67+
parameters = {
68+
"apikey" = "" # Amplitude API Key. Read more at https://amplitude.com/docs/apis/authentication.
69+
"secretKey" = "" # Amplitude Secret Key. Read more at https://amplitude.com/docs/apis/authentication.
70+
}
71+
}
72+
73+
# Mixpanel integration (https://configcat.com/docs/integrations/mixpanel/#annotations)
74+
resource "configcat_integration" "mixpanel_integration" {
75+
product_id = var.product_id
76+
integration_type = "mixPanel"
77+
name = "Mixpanel integration"
78+
parameters = {
79+
"serviceAccountUserName" = "" # Mixpanel Service Account Username.
80+
"serviceAccountSecret" = "" # Mixpanel Service Account Secret.
81+
"projectId" = "" # Mixpanel Service Account Secret.
82+
"server" = "StandardServer" # Mixpanel Server. Available values: StandardServer, EUResidencyServer. Default: StandardServer. Read more at https://docs.mixpanel.com/docs/privacy/eu-residency.
83+
}
84+
}
85+
86+
# Segment integration (https://configcat.com/docs/integrations/segment/#changeevents)
87+
resource "configcat_integration" "mixpanel_integration" {
88+
product_id = var.product_id
89+
integration_type = "segment"
90+
name = "Mixpanel integration"
91+
parameters = {
92+
"writeKey" = "" # Twilio Segment Write Key.
93+
"server" = "StandardServer" # Twilio Segment Server. Available values: Us, Eu. Default: Us. Read more at https://segment.com/docs/guides/regional-segment/.
94+
}
95+
}
96+
97+
output "slack_integration_id" {
98+
value = configcat_integration.slack_integration.id
99+
}
100+
```
101+
102+
<!-- schema generated by tfplugindocs -->
103+
## Schema
104+
105+
### Required
106+
107+
- `integration_type` (String) The integration type of the Integration. Possible values: `dataDog`, `slack`, `amplitude`, `mixPanel`, `segment`, `pubNub`.
108+
- `name` (String) The name of the Integration.
109+
- `product_id` (String) The ID of the Product.
110+
111+
### Optional
112+
113+
- `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.
114+
- `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.
115+
- `parameters` (Map of String) Parameters of the integration. The Parameters dictionary differs for each IntegrationType. See available options per integration type at the examples.
116+
117+
### Read-Only
118+
119+
- `id` (String) The unique ID of the Integration.
120+
121+
## Import
122+
123+
Import is supported using the following syntax:
124+
125+
```shell
126+
# 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.
127+
128+
terraform import configcat_integration.example 08d86d63-2726-47cd-8bfc-59608ecb91e2
129+
```

docs/resources/permission_group.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ resource "configcat_permission_group" "custom_permission_group" {
6161
accesstype = "custom"
6262
6363
environment_accesses = {
64-
var.test_environment_id = "full"
65-
var.productuction_environment_id = "readOnly"
64+
(var.test_environment_id) = "full"
65+
(var.productuction_environment_id) = "readOnly"
6666
}
6767
}
6868

docs/resources/product_preferences.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,8 +43,8 @@ resource "configcat_product_preferences" "preferences" {
4343
show_variation_id = false
4444
reason_required = false
4545
reason_required_environments = {
46-
"${configcat_environment.test.id}" = false,
47-
"${configcat_environment.production.id}" = true,
46+
(configcat_environment.test.id) = false,
47+
(configcat_environment.production.id) = true,
4848
}
4949
}
5050
```

docs/resources/setting_value_v2.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ Required:
213213
- `prerequisite_setting_id` (String) The prerequisite flag's identifier.
214214

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

218218
Optional:
219219

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# 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.
2+
3+
terraform import configcat_integration.example 08d86d63-2726-47cd-8bfc-59608ecb91e2
Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
variable "product_id" {
2+
type = string
3+
}
4+
5+
variable "config_id" {
6+
type = string
7+
}
8+
9+
variable "environment_id" {
10+
type = string
11+
}
12+
13+
# Configure connected configs and environments
14+
resource "configcat_integration" "slack_integration_with_configs_and_environments" {
15+
product_id = var.product_id
16+
integration_type = "slack"
17+
name = "Slack integration"
18+
parameters = {
19+
"incoming_webhook.url" = "https://mycompany.slack.com/services/B0000000000"
20+
}
21+
22+
configs = [var.config_id]
23+
environments = [var.environment_id]
24+
}
25+
26+
# Slack integration (https://configcat.com/docs/integrations/slack/)
27+
resource "configcat_integration" "slack_integration" {
28+
product_id = var.product_id
29+
integration_type = "slack"
30+
name = "Slack integration"
31+
parameters = {
32+
"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.
33+
}
34+
}
35+
36+
# Datadog integration (https://configcat.com/docs/integrations/datadog/)
37+
resource "configcat_integration" "datadog_integration" {
38+
product_id = var.product_id
39+
integration_type = "dataDog"
40+
name = "Datadog integration"
41+
parameters = {
42+
"apikey" = "" # Datadog API key. Read more at https://docs.datadoghq.com/account_management/api-app-keys/#api-keys
43+
"site" = "Us" # Optional. Datadog site. Available values: Us, Eu, Us1Fed, Us3, Us5. Default: Us. Read more at https://docs.datadoghq.com/getting_started/site/.
44+
}
45+
}
46+
47+
# Amplitude integration (https://configcat.com/docs/integrations/amplitude/#annotations)
48+
resource "configcat_integration" "amplitude_integration" {
49+
product_id = var.product_id
50+
integration_type = "amplitude"
51+
name = "Amplitude integration"
52+
parameters = {
53+
"apikey" = "" # Amplitude API Key. Read more at https://amplitude.com/docs/apis/authentication.
54+
"secretKey" = "" # Amplitude Secret Key. Read more at https://amplitude.com/docs/apis/authentication.
55+
}
56+
}
57+
58+
# Mixpanel integration (https://configcat.com/docs/integrations/mixpanel/#annotations)
59+
resource "configcat_integration" "mixpanel_integration" {
60+
product_id = var.product_id
61+
integration_type = "mixPanel"
62+
name = "Mixpanel integration"
63+
parameters = {
64+
"serviceAccountUserName" = "" # Mixpanel Service Account Username.
65+
"serviceAccountSecret" = "" # Mixpanel Service Account Secret.
66+
"projectId" = "" # Mixpanel Service Account Secret.
67+
"server" = "StandardServer" # Mixpanel Server. Available values: StandardServer, EUResidencyServer. Default: StandardServer. Read more at https://docs.mixpanel.com/docs/privacy/eu-residency.
68+
}
69+
}
70+
71+
# Segment integration (https://configcat.com/docs/integrations/segment/#changeevents)
72+
resource "configcat_integration" "mixpanel_integration" {
73+
product_id = var.product_id
74+
integration_type = "segment"
75+
name = "Mixpanel integration"
76+
parameters = {
77+
"writeKey" = "" # Twilio Segment Write Key.
78+
"server" = "StandardServer" # Twilio Segment Server. Available values: Us, Eu. Default: Us. Read more at https://segment.com/docs/guides/regional-segment/.
79+
}
80+
}
81+
82+
output "slack_integration_id" {
83+
value = configcat_integration.slack_integration.id
84+
}

go.mod

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,24 +3,29 @@ module github.com/configcat/terraform-provider-configcat
33
go 1.21
44

55
require (
6-
github.com/hashicorp/terraform-plugin-docs v0.18.0
7-
github.com/hashicorp/terraform-plugin-framework v1.10.0
6+
github.com/configcat/configcat-publicapi-go-client/v2 v2.0.0
7+
github.com/hashicorp/terraform-plugin-docs v0.19.4
8+
github.com/hashicorp/terraform-plugin-framework v1.11.0
89
github.com/hashicorp/terraform-plugin-go v0.23.0
910
github.com/hashicorp/terraform-plugin-log v0.9.0
10-
github.com/hashicorp/terraform-plugin-testing v1.6.0
11+
github.com/hashicorp/terraform-plugin-testing v1.10.0
1112
github.com/stretchr/testify v1.9.0
1213
)
1314

1415
require (
16+
github.com/BurntSushi/toml v1.2.1 // indirect
1517
github.com/Kunde21/markdownfmt/v3 v3.1.0 // indirect
18+
github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect
1619
github.com/davecgh/go-spew v1.1.1 // indirect
1720
github.com/hashicorp/cli v1.1.6 // indirect
21+
github.com/hashicorp/go-retryablehttp v0.7.7 // indirect
1822
github.com/hashicorp/terraform-plugin-sdk/v2 v2.34.0 // indirect
1923
github.com/mattn/go-runewidth v0.0.9 // indirect
2024
github.com/pmezard/go-difflib v1.0.0 // indirect
21-
github.com/yuin/goldmark v1.6.0 // indirect
25+
github.com/yuin/goldmark v1.7.1 // indirect
2226
github.com/yuin/goldmark-meta v1.1.0 // indirect
23-
golang.org/x/sync v0.7.0 // indirect
27+
go.abhg.dev/goldmark/frontmatter v0.2.0 // indirect
28+
golang.org/x/sync v0.8.0 // indirect
2429
golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect
2530
gopkg.in/yaml.v2 v2.3.0 // indirect
2631
gopkg.in/yaml.v3 v3.0.1 // indirect
@@ -36,7 +41,6 @@ require (
3641
github.com/armon/go-radix v1.0.0 // indirect
3742
github.com/bgentry/speakeasy v0.1.0 // indirect
3843
github.com/cloudflare/circl v1.3.7 // indirect
39-
github.com/configcat/configcat-publicapi-go-client v1.12.0
4044
github.com/fatih/color v1.17.0 // indirect
4145
github.com/golang/protobuf v1.5.4 // indirect
4246
github.com/google/go-cmp v0.6.0 // indirect
@@ -49,9 +53,9 @@ require (
4953
github.com/hashicorp/go-multierror v1.1.1 // indirect
5054
github.com/hashicorp/go-plugin v1.6.1 // indirect
5155
github.com/hashicorp/go-uuid v1.0.3 // indirect
52-
github.com/hashicorp/go-version v1.6.0 // indirect
53-
github.com/hashicorp/hc-install v0.6.4 // indirect
54-
github.com/hashicorp/hcl/v2 v2.20.1 // indirect
56+
github.com/hashicorp/go-version v1.7.0 // indirect
57+
github.com/hashicorp/hc-install v0.8.0 // indirect
58+
github.com/hashicorp/hcl/v2 v2.21.0 // indirect
5559
github.com/hashicorp/logutils v1.0.0 // indirect
5660
github.com/hashicorp/terraform-exec v0.21.0 // indirect
5761
github.com/hashicorp/terraform-json v0.22.1 // indirect
@@ -70,21 +74,20 @@ require (
7074
github.com/mitchellh/reflectwalk v1.0.2 // indirect
7175
github.com/oklog/run v1.1.0 // indirect
7276
github.com/posener/complete v1.2.3 // indirect
73-
github.com/russross/blackfriday v1.6.0 // indirect
7477
github.com/shopspring/decimal v1.3.1 // indirect
7578
github.com/spf13/cast v1.5.0 // indirect
7679
github.com/vmihailenco/msgpack v4.0.4+incompatible // indirect
7780
github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect
7881
github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect
79-
github.com/zclconf/go-cty v1.14.4 // indirect
80-
golang.org/x/crypto v0.25.0 // indirect
82+
github.com/zclconf/go-cty v1.15.0 // indirect
83+
golang.org/x/crypto v0.26.0 // indirect
8184
golang.org/x/exp v0.0.0-20230809150735-7b3493d9a819 // indirect
82-
golang.org/x/mod v0.17.0 // indirect
83-
golang.org/x/net v0.27.0 // indirect
84-
golang.org/x/sys v0.23.0 // indirect
85-
golang.org/x/text v0.16.0 // indirect
85+
golang.org/x/mod v0.19.0 // indirect
86+
golang.org/x/net v0.28.0 // indirect
87+
golang.org/x/sys v0.24.0 // indirect
88+
golang.org/x/text v0.17.0 // indirect
8689
google.golang.org/appengine v1.6.8 // indirect
87-
google.golang.org/genproto/googleapis/rpc v0.0.0-20240730163845-b1a4ccb954bf // indirect
90+
google.golang.org/genproto/googleapis/rpc v0.0.0-20240808171019-573a1156607a // indirect
8891
google.golang.org/grpc v1.65.0 // indirect
8992
google.golang.org/protobuf v1.34.2 // indirect
9093
)

0 commit comments

Comments
 (0)