Skip to content

Commit a9044af

Browse files
feat: app configuration destination, subscription and template, Webho… (IBM-Cloud#6477)
* feat: app configuration destination, subscription and template, Webhook destination test support * fix: remove en local package reference from go.mod * subscription fix
1 parent 18ebc96 commit a9044af

24 files changed

+2836
-122
lines changed

go.mod

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ require (
1515
github.com/IBM/configuration-aggregator-go-sdk v0.0.2
1616
github.com/IBM/container-registry-go-sdk v1.2.0
1717
github.com/IBM/continuous-delivery-go-sdk/v2 v2.0.6
18-
github.com/IBM/event-notifications-go-admin-sdk v0.18.0
18+
github.com/IBM/event-notifications-go-admin-sdk v0.20.0
1919
github.com/IBM/eventstreams-go-sdk v1.4.0
2020
github.com/IBM/go-sdk-core/v5 v5.21.0
2121
github.com/IBM/ibm-backup-recovery-sdk-go v1.0.5

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,8 +115,8 @@ github.com/IBM/container-registry-go-sdk v1.2.0 h1:DX08GSKFvgCcUne9rWwb9+UttevV4
115115
github.com/IBM/container-registry-go-sdk v1.2.0/go.mod h1:fE1iNfehccXBx1wmX/RUWksDteWOOOXJFtHWYlT4zKk=
116116
github.com/IBM/continuous-delivery-go-sdk/v2 v2.0.6 h1:CdJWGVzcHngf6un5N2C4KDgIzqViA2Md6pSeZNZzsLQ=
117117
github.com/IBM/continuous-delivery-go-sdk/v2 v2.0.6/go.mod h1:Iibf+4gRasEZHakDgnMm7TOX87xex0L+DfghUclcmcg=
118-
github.com/IBM/event-notifications-go-admin-sdk v0.18.0 h1:G4230wYVCjHnHFEcingfMVznjSJeUoSWzyEMsEFYCmo=
119-
github.com/IBM/event-notifications-go-admin-sdk v0.18.0/go.mod h1:9fG6k1gYRqiChZvmn1iRIjaKCXuDBCOlPH6xPJN+mMU=
118+
github.com/IBM/event-notifications-go-admin-sdk v0.20.0 h1:IuIWVLQuNfIfuw/ZRqu06x85zIKq6HiMzT4vlgPeJTw=
119+
github.com/IBM/event-notifications-go-admin-sdk v0.20.0/go.mod h1:9fG6k1gYRqiChZvmn1iRIjaKCXuDBCOlPH6xPJN+mMU=
120120
github.com/IBM/eventstreams-go-sdk v1.4.0 h1:yS/Ns29sBOe8W2tynQmz9HTKqQZ0ckse4Py5Oy/F2rM=
121121
github.com/IBM/eventstreams-go-sdk v1.4.0/go.mod h1:2tuAxaYLctfqfr5jvyqSrxxEQGMwYPm3yJGWSj85YVQ=
122122
github.com/IBM/go-sdk-core/v5 v5.0.0/go.mod h1:vyNdbFujJtdTj9HbihtvKwwS3k/GKSKpOx9ZIQ6MWDY=

ibm/provider/provider.go

Lines changed: 114 additions & 108 deletions
Large diffs are not rendered by default.
Lines changed: 161 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,161 @@
1+
// Copyright IBM Corp. 2021 All Rights Reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package eventnotification
5+
6+
import (
7+
"context"
8+
"fmt"
9+
"log"
10+
11+
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
12+
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
14+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
15+
16+
en "github.com/IBM/event-notifications-go-admin-sdk/eventnotificationsv1"
17+
)
18+
19+
func DataSourceIBMEnAppConfigurationSubscription() *schema.Resource {
20+
return &schema.Resource{
21+
ReadContext: dataSourceIBMEnEventStreamsSubscriptionRead,
22+
23+
Schema: map[string]*schema.Schema{
24+
"instance_guid": {
25+
Type: schema.TypeString,
26+
Required: true,
27+
Description: "Unique identifier for IBM Cloud Event Notifications instance.",
28+
},
29+
"subscription_id": {
30+
Type: schema.TypeString,
31+
Required: true,
32+
Description: "Unique identifier for result.",
33+
},
34+
"name": {
35+
Type: schema.TypeString,
36+
Computed: true,
37+
Description: "Subscription name.",
38+
},
39+
"description": {
40+
Type: schema.TypeString,
41+
Computed: true,
42+
Description: "Subscription description.",
43+
},
44+
"destination_id": {
45+
Type: schema.TypeString,
46+
Computed: true,
47+
Description: "The destination ID.",
48+
},
49+
"topic_id": {
50+
Type: schema.TypeString,
51+
Computed: true,
52+
Description: "Topic ID.",
53+
},
54+
"attributes": {
55+
Type: schema.TypeList,
56+
Computed: true,
57+
Elem: &schema.Resource{
58+
Schema: map[string]*schema.Schema{
59+
"template_id_notification": {
60+
Type: schema.TypeString,
61+
Computed: true,
62+
Description: "The templete id for notification",
63+
},
64+
"feature_flag_enabled": {
65+
Type: schema.TypeBool,
66+
Computed: true,
67+
Description: "App Configuration enable feature flag attribute",
68+
},
69+
},
70+
},
71+
},
72+
"updated_at": {
73+
Type: schema.TypeString,
74+
Computed: true,
75+
Description: "Last updated time.",
76+
},
77+
},
78+
}
79+
}
80+
81+
func dataSourceIBMEnAppConfigurationSubscriptionRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
82+
enClient, err := meta.(conns.ClientSession).EventNotificationsApiV1()
83+
if err != nil {
84+
tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_en_subscription_event_streams", "read")
85+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
86+
return tfErr.GetDiag()
87+
}
88+
89+
getSubscriptionOptions := &en.GetSubscriptionOptions{}
90+
91+
getSubscriptionOptions.SetInstanceID(d.Get("instance_guid").(string))
92+
getSubscriptionOptions.SetID(d.Get("subscription_id").(string))
93+
94+
result, _, err := enClient.GetSubscriptionWithContext(context, getSubscriptionOptions)
95+
if err != nil {
96+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetIntegrationWithContext failed: %s", err.Error()), "(Data) ibm_en_subscription_event_streams", "read")
97+
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
98+
return tfErr.GetDiag()
99+
}
100+
101+
d.SetId(fmt.Sprintf("%s/%s", *getSubscriptionOptions.InstanceID, *getSubscriptionOptions.ID))
102+
103+
if err = d.Set("name", result.Name); err != nil {
104+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting name: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
105+
return tfErr.GetDiag()
106+
}
107+
108+
if result.Description != nil {
109+
if err = d.Set("description", result.Description); err != nil {
110+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting description: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
111+
return tfErr.GetDiag()
112+
}
113+
}
114+
if err = d.Set("updated_at", result.UpdatedAt); err != nil {
115+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting updated_at: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
116+
return tfErr.GetDiag()
117+
}
118+
119+
if err = d.Set("destination_id", result.DestinationID); err != nil {
120+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting destination_id: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
121+
return tfErr.GetDiag()
122+
}
123+
124+
if err = d.Set("topic_id", result.TopicID); err != nil {
125+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting topic_id: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
126+
return tfErr.GetDiag()
127+
}
128+
129+
if result.Attributes != nil {
130+
if err = d.Set("attributes", enAppConfigurationSubscriptionFlattenAttributes(result.Attributes)); err != nil {
131+
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting attributes: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
132+
return tfErr.GetDiag()
133+
}
134+
}
135+
136+
return nil
137+
}
138+
139+
func enAppConfigurationSubscriptionFlattenAttributes(result en.SubscriptionAttributesIntf) (finalList []map[string]interface{}) {
140+
finalList = []map[string]interface{}{}
141+
142+
attributes := result.(*en.SubscriptionAttributes)
143+
144+
finalMap := enEventStreamsSubscriptionToMap(attributes)
145+
finalList = append(finalList, finalMap)
146+
147+
return finalList
148+
}
149+
150+
func enAppConfigurationSubscriptionToMap(attributeItem *en.SubscriptionAttributes) (attributeMap map[string]interface{}) {
151+
attributeMap = map[string]interface{}{}
152+
153+
if attributeItem.TemplateIDNotification != nil {
154+
attributeMap["template_id_notification"] = attributeItem.TemplateIDNotification
155+
}
156+
if attributeItem.FeatureFlagEnabled != nil {
157+
attributeMap["feature_flag_enabled"] = attributeItem.FeatureFlagEnabled
158+
}
159+
160+
return attributeMap
161+
}
Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,91 @@
1+
// Copyright IBM Corp. 2021 All Rights Reserved.
2+
// Licensed under the Mozilla Public License v2.0
3+
4+
package eventnotification_test
5+
6+
import (
7+
"fmt"
8+
"testing"
9+
10+
acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest"
11+
12+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
13+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
14+
)
15+
16+
func TestAccIBMEnAppConfigurationSubscriptionDataSourceAllArgs(t *testing.T) {
17+
instanceName := fmt.Sprintf("tf_instance_%d", acctest.RandIntRange(10, 100))
18+
name := fmt.Sprintf("tf_name_%d", acctest.RandIntRange(10, 100))
19+
description := fmt.Sprintf("tf_description_%d", acctest.RandIntRange(10, 100))
20+
21+
resource.Test(t, resource.TestCase{
22+
PreCheck: func() { acc.TestAccPreCheck(t) },
23+
Providers: acc.TestAccProviders,
24+
Steps: []resource.TestStep{
25+
{
26+
Config: testAccCheckIBMEnAppConfigurationSubscriptionDataSourceConfig(instanceName, name, description),
27+
Check: resource.ComposeTestCheckFunc(
28+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "id"),
29+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "instance_guid"),
30+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "subscription_id"),
31+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "name"),
32+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "description"),
33+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "updated_at"),
34+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "destination_type"),
35+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "destination_id"),
36+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "destination_name"),
37+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "topic_id"),
38+
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "topic_name"),
39+
),
40+
},
41+
},
42+
})
43+
}
44+
45+
func testAccCheckIBMEnAppConfigurationSubscriptionDataSourceConfig(instanceName, name, description string) string {
46+
return fmt.Sprintf(`
47+
resource "ibm_resource_instance" "en_subscription_datasource" {
48+
name = "%s"
49+
location = "us-south"
50+
plan = "standard"
51+
service = "event-notifications"
52+
}
53+
54+
resource "ibm_en_topic" "en_topic_resource_4" {
55+
instance_guid = ibm_resource_instance.en_subscription_datasource.guid
56+
name = "tf_topic_name_0664"
57+
description = "tf_topic_description_0455"
58+
}
59+
60+
resource "ibm_en_destination_app_configuration" "en_destination_resource_2" {
61+
instance_guid = ibm_resource_instance.en_subscription_resource.guid
62+
name = "event_streams_destination"
63+
type = "event_streams"
64+
description = "event streams destination tf"
65+
config {
66+
params {
67+
type = "features"
68+
crn = "crn:v1:staging:public:apprapp:us-south:a/9f007405a9fe4a5d9345fa8c131610c8:3a86a8e4-fe8b-4e43-9727-2f2cf987f1c8::"
69+
feature_id = "cross"
70+
environment_id = "dev"
71+
}
72+
}
73+
}
74+
resource "ibm_en_subscription_app_configuration" "en_subscription_resource_1" {
75+
name = "%s"
76+
description = "%s"
77+
instance_guid = ibm_resource_instance.en_subscription_resource.guid
78+
topic_id = ibm_en_topic.en_topic_resource_2.topic_id
79+
destination_id = ibm_en_destination_app_configuration.en_destination_resource_2.destination_id
80+
attributes {
81+
feature_flag_enabled = true
82+
}
83+
}
84+
85+
data "ibm_en_subscription_app_configuration" "data_subscription_1" {
86+
instance_guid = ibm_resource_instance.en_subscription_datasource.guid
87+
subscription_id = ibm_en_subscription_app_configuration.en_subscription_resource_4.subscription_id
88+
}
89+
90+
`, instanceName, name, description)
91+
}

0 commit comments

Comments
 (0)