Skip to content
Open
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
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ require (
github.com/IBM/configuration-aggregator-go-sdk v0.0.2
github.com/IBM/container-registry-go-sdk v1.2.0
github.com/IBM/continuous-delivery-go-sdk/v2 v2.0.6
github.com/IBM/event-notifications-go-admin-sdk v0.18.0
github.com/IBM/event-notifications-go-admin-sdk v0.20.0
github.com/IBM/eventstreams-go-sdk v1.4.0
github.com/IBM/go-sdk-core/v5 v5.21.0
github.com/IBM/ibm-backup-recovery-sdk-go v1.0.3
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -116,8 +116,8 @@ github.com/IBM/container-registry-go-sdk v1.2.0 h1:DX08GSKFvgCcUne9rWwb9+UttevV4
github.com/IBM/container-registry-go-sdk v1.2.0/go.mod h1:fE1iNfehccXBx1wmX/RUWksDteWOOOXJFtHWYlT4zKk=
github.com/IBM/continuous-delivery-go-sdk/v2 v2.0.6 h1:CdJWGVzcHngf6un5N2C4KDgIzqViA2Md6pSeZNZzsLQ=
github.com/IBM/continuous-delivery-go-sdk/v2 v2.0.6/go.mod h1:Iibf+4gRasEZHakDgnMm7TOX87xex0L+DfghUclcmcg=
github.com/IBM/event-notifications-go-admin-sdk v0.18.0 h1:G4230wYVCjHnHFEcingfMVznjSJeUoSWzyEMsEFYCmo=
github.com/IBM/event-notifications-go-admin-sdk v0.18.0/go.mod h1:9fG6k1gYRqiChZvmn1iRIjaKCXuDBCOlPH6xPJN+mMU=
github.com/IBM/event-notifications-go-admin-sdk v0.20.0 h1:IuIWVLQuNfIfuw/ZRqu06x85zIKq6HiMzT4vlgPeJTw=
github.com/IBM/event-notifications-go-admin-sdk v0.20.0/go.mod h1:9fG6k1gYRqiChZvmn1iRIjaKCXuDBCOlPH6xPJN+mMU=
github.com/IBM/eventstreams-go-sdk v1.4.0 h1:yS/Ns29sBOe8W2tynQmz9HTKqQZ0ckse4Py5Oy/F2rM=
github.com/IBM/eventstreams-go-sdk v1.4.0/go.mod h1:2tuAxaYLctfqfr5jvyqSrxxEQGMwYPm3yJGWSj85YVQ=
github.com/IBM/go-sdk-core/v5 v5.0.0/go.mod h1:vyNdbFujJtdTj9HbihtvKwwS3k/GKSKpOx9ZIQ6MWDY=
Expand Down
222 changes: 114 additions & 108 deletions ibm/provider/provider.go

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
// Copyright IBM Corp. 2021 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0

package eventnotification

import (
"context"
"fmt"
"log"

"github.com/IBM-Cloud/terraform-provider-ibm/ibm/conns"
"github.com/IBM-Cloud/terraform-provider-ibm/ibm/flex"
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"

en "github.com/IBM/event-notifications-go-admin-sdk/eventnotificationsv1"
)

func DataSourceIBMEnAppConfigurationSubscription() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceIBMEnEventStreamsSubscriptionRead,

Schema: map[string]*schema.Schema{
"instance_guid": {
Type: schema.TypeString,
Required: true,
Description: "Unique identifier for IBM Cloud Event Notifications instance.",
},
"subscription_id": {
Type: schema.TypeString,
Required: true,
Description: "Unique identifier for result.",
},
"name": {
Type: schema.TypeString,
Computed: true,
Description: "Subscription name.",
},
"description": {
Type: schema.TypeString,
Computed: true,
Description: "Subscription description.",
},
"destination_id": {
Type: schema.TypeString,
Computed: true,
Description: "The destination ID.",
},
"topic_id": {
Type: schema.TypeString,
Computed: true,
Description: "Topic ID.",
},
"attributes": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"template_id_notification": {
Type: schema.TypeString,
Computed: true,
Description: "The templete id for notification",
},
"feature_flag_enabled": {
Type: schema.TypeBool,
Computed: true,
Description: "App Configuration enable feature flag attribute",
},
},
},
},
"updated_at": {
Type: schema.TypeString,
Computed: true,
Description: "Last updated time.",
},
},
}
}

func dataSourceIBMEnAppConfigurationSubscriptionRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
enClient, err := meta.(conns.ClientSession).EventNotificationsApiV1()
if err != nil {
tfErr := flex.TerraformErrorf(err, err.Error(), "(Data) ibm_en_subscription_event_streams", "read")
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
return tfErr.GetDiag()
}

getSubscriptionOptions := &en.GetSubscriptionOptions{}

getSubscriptionOptions.SetInstanceID(d.Get("instance_guid").(string))
getSubscriptionOptions.SetID(d.Get("subscription_id").(string))

result, _, err := enClient.GetSubscriptionWithContext(context, getSubscriptionOptions)
if err != nil {
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("GetIntegrationWithContext failed: %s", err.Error()), "(Data) ibm_en_subscription_event_streams", "read")
log.Printf("[DEBUG]\n%s", tfErr.GetDebugMessage())
return tfErr.GetDiag()
}

d.SetId(fmt.Sprintf("%s/%s", *getSubscriptionOptions.InstanceID, *getSubscriptionOptions.ID))

if err = d.Set("name", result.Name); err != nil {
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting name: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
return tfErr.GetDiag()
}

if result.Description != nil {
if err = d.Set("description", result.Description); err != nil {
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting description: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
return tfErr.GetDiag()
}
}
if err = d.Set("updated_at", result.UpdatedAt); err != nil {
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting updated_at: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
return tfErr.GetDiag()
}

if err = d.Set("destination_id", result.DestinationID); err != nil {
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting destination_id: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
return tfErr.GetDiag()
}

if err = d.Set("topic_id", result.TopicID); err != nil {
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting topic_id: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
return tfErr.GetDiag()
}

if result.Attributes != nil {
if err = d.Set("attributes", enAppConfigurationSubscriptionFlattenAttributes(result.Attributes)); err != nil {
tfErr := flex.TerraformErrorf(err, fmt.Sprintf("Error setting attributes: %s", err), "(Data) ibm_en_subscription_event_streams", "read")
return tfErr.GetDiag()
}
}

return nil
}

func enAppConfigurationSubscriptionFlattenAttributes(result en.SubscriptionAttributesIntf) (finalList []map[string]interface{}) {
finalList = []map[string]interface{}{}

attributes := result.(*en.SubscriptionAttributes)

finalMap := enEventStreamsSubscriptionToMap(attributes)
finalList = append(finalList, finalMap)

return finalList
}

func enAppConfigurationSubscriptionToMap(attributeItem *en.SubscriptionAttributes) (attributeMap map[string]interface{}) {
attributeMap = map[string]interface{}{}

if attributeItem.TemplateIDNotification != nil {
attributeMap["template_id_notification"] = attributeItem.TemplateIDNotification
}
if attributeItem.FeatureFlagEnabled != nil {
attributeMap["feature_flag_enabled"] = attributeItem.FeatureFlagEnabled
}

return attributeMap
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
// Copyright IBM Corp. 2021 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0

package eventnotification_test

import (
"fmt"
"testing"

acc "github.com/IBM-Cloud/terraform-provider-ibm/ibm/acctest"

"github.com/hashicorp/terraform-plugin-sdk/v2/helper/acctest"
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/resource"
)

func TestAccIBMEnAppConfigurationSubscriptionDataSourceAllArgs(t *testing.T) {
instanceName := fmt.Sprintf("tf_instance_%d", acctest.RandIntRange(10, 100))
name := fmt.Sprintf("tf_name_%d", acctest.RandIntRange(10, 100))
description := fmt.Sprintf("tf_description_%d", acctest.RandIntRange(10, 100))

resource.Test(t, resource.TestCase{
PreCheck: func() { acc.TestAccPreCheck(t) },
Providers: acc.TestAccProviders,
Steps: []resource.TestStep{
{
Config: testAccCheckIBMEnAppConfigurationSubscriptionDataSourceConfig(instanceName, name, description),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "id"),
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "instance_guid"),
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "subscription_id"),
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "name"),
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "description"),
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "updated_at"),
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "destination_type"),
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "destination_id"),
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "destination_name"),
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "topic_id"),
resource.TestCheckResourceAttrSet("data.ibm_en_subscription_app_configuration.data_subscription_1", "topic_name"),
),
},
},
})
}

func testAccCheckIBMEnAppConfigurationSubscriptionDataSourceConfig(instanceName, name, description string) string {
return fmt.Sprintf(`
resource "ibm_resource_instance" "en_subscription_datasource" {
name = "%s"
location = "us-south"
plan = "standard"
service = "event-notifications"
}

resource "ibm_en_topic" "en_topic_resource_4" {
instance_guid = ibm_resource_instance.en_subscription_datasource.guid
name = "tf_topic_name_0664"
description = "tf_topic_description_0455"
}

resource "ibm_en_destination_app_configuration" "en_destination_resource_2" {
instance_guid = ibm_resource_instance.en_subscription_resource.guid
name = "event_streams_destination"
type = "event_streams"
description = "event streams destination tf"
config {
params {
type = "features"
crn = "crn:v1:staging:public:apprapp:us-south:a/9f007405a9fe4a5d9345fa8c131610c8:3a86a8e4-fe8b-4e43-9727-2f2cf987f1c8::"
feature_id = "cross"
environment_id = "dev"
}
}
}
resource "ibm_en_subscription_app_configuration" "en_subscription_resource_1" {
name = "%s"
description = "%s"
instance_guid = ibm_resource_instance.en_subscription_resource.guid
topic_id = ibm_en_topic.en_topic_resource_2.topic_id
destination_id = ibm_en_destination_app_configuration.en_destination_resource_2.destination_id
attributes {
feature_flag_enabled = true
}
}

data "ibm_en_subscription_app_configuration" "data_subscription_1" {
instance_guid = ibm_resource_instance.en_subscription_datasource.guid
subscription_id = ibm_en_subscription_app_configuration.en_subscription_resource_4.subscription_id
}

`, instanceName, name, description)
}
Loading
Loading