Skip to content

Commit

Permalink
IBM Cloud Object destination resources and data sources and docs upda…
Browse files Browse the repository at this point in the history
…te (IBM-Cloud#4534)

* adding new destination, updating email subscription and integrayion resources for event notification service

* Update go.mod

updating event notification package

* Update go.sum

updating event-notifications entry in go.sum

* adding resources for servicenow destination and FCM API changes

* updating secrets baseline

* fixing bo build issue

* fixing bo build issue

* formatting fix for provider file

* updating ibmcloud code engine destination resources

* updating continous delievery sdk

* ibm cloud cos object destination resources addition and documentation update and correction
  • Loading branch information
Divya-Singh1693 authored and omaraibrahim committed Jul 20, 2023
1 parent 44be56d commit 1cfd564
Show file tree
Hide file tree
Showing 17 changed files with 978 additions and 10 deletions.
4 changes: 3 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ require (
github.com/IBM/code-engine-go-sdk v0.0.0-20230324212854-743a707334f6
github.com/IBM/container-registry-go-sdk v0.0.15
github.com/IBM/continuous-delivery-go-sdk v1.1.0
github.com/IBM/event-notifications-go-admin-sdk v0.2.1
github.com/IBM/event-notifications-go-admin-sdk v0.2.2
github.com/IBM/eventstreams-go-sdk v1.2.0
github.com/IBM/go-sdk-core/v5 v5.13.1
github.com/IBM/ibm-cos-sdk-go v1.10.0
Expand Down Expand Up @@ -178,3 +178,5 @@ require (
replace github.com/softlayer/softlayer-go v1.0.3 => github.com/IBM-Cloud/softlayer-go v1.0.5-tf

replace github.com/dgrijalva/jwt-go v3.2.0+incompatible => github.com/golang-jwt/jwt v3.2.1+incompatible

replace github.com/IBM/secrets-manager-go-sdk v1.0.49 => github.com/IBM/secrets-manager-go-sdk v1.0.50-0.20230316070833-1e1d44fe67be
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,8 @@ github.com/IBM/container-registry-go-sdk v0.0.15 h1:sfEXm4qNj9ZCwTlFOsdjF5P/lvaj
github.com/IBM/container-registry-go-sdk v0.0.15/go.mod h1:KqSZFO4VIK9QAyF8O1JW6jkyzkfE/BNKUIo+OdzIDk4=
github.com/IBM/continuous-delivery-go-sdk v1.1.0 h1:E0hPM4H7Bmn31+4UAMavBngRjTMoqbjkBb4AlIgi0tA=
github.com/IBM/continuous-delivery-go-sdk v1.1.0/go.mod h1:JUHFfLCLDMtEQhfDvxBT79O2OcBmSV+is9bKRdnUF1o=
github.com/IBM/event-notifications-go-admin-sdk v0.2.1 h1:MXqf+NTX42jT40EuIKxZ0s0Xt6Ebgi0qmhckBNzEMXc=
github.com/IBM/event-notifications-go-admin-sdk v0.2.1/go.mod h1:1TlGAFP47DybbovJfHtYYgSI8xpLL8Q0wao6vsAlb6c=
github.com/IBM/event-notifications-go-admin-sdk v0.2.2 h1:Aww+OUcKgsbXyY7a/nlMH7nvZGn0sBTr6p6rUjOyy1Y=
github.com/IBM/event-notifications-go-admin-sdk v0.2.2/go.mod h1:1TlGAFP47DybbovJfHtYYgSI8xpLL8Q0wao6vsAlb6c=
github.com/IBM/eventstreams-go-sdk v1.2.0 h1:eP0afHArMGjwhGqvZAhhu/3EDKRch2JehpveqF1TUjs=
github.com/IBM/eventstreams-go-sdk v1.2.0/go.mod h1:2tuAxaYLctfqfr5jvyqSrxxEQGMwYPm3yJGWSj85YVQ=
github.com/IBM/go-sdk-core/v3 v3.0.0/go.mod h1:JI5NS2+iCoY/D8Oq3JNEZNA7qO42agu6fnaUmDsRcJA=
Expand Down
4 changes: 4 additions & 0 deletions ibm/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -758,6 +758,8 @@ func Provider() *schema.Provider {
"ibm_en_subscription_sn": eventnotification.DataSourceIBMEnFCMSubscription(),
"ibm_en_destination_ce": eventnotification.DataSourceIBMEnCodeEngineDestination(),
"ibm_en_subscription_ce": eventnotification.DataSourceIBMEnFCMSubscription(),
"ibm_en_destination_cos": eventnotification.DataSourceIBMEnCOSDestination(),
"ibm_en_subscription_cos": eventnotification.DataSourceIBMEnFCMSubscription(),

// // Added for Toolchain
"ibm_cd_toolchain": cdtoolchain.DataSourceIBMCdToolchain(),
Expand Down Expand Up @@ -1222,6 +1224,8 @@ func Provider() *schema.Provider {
"ibm_en_subscription_sn": eventnotification.ResourceIBMEnFCMSubscription(),
"ibm_en_destination_ce": eventnotification.ResourceIBMEnCodeEngineDestination(),
"ibm_en_subscription_ce": eventnotification.ResourceIBMEnFCMSubscription(),
"ibm_en_destination_cos": eventnotification.ResourceIBMEnCOSDestination(),
"ibm_en_subscription_cos": eventnotification.ResourceIBMEnFCMSubscription(),

// // Added for Toolchain
"ibm_cd_toolchain": cdtoolchain.ResourceIBMCdToolchain(),
Expand Down
197 changes: 197 additions & 0 deletions ibm/service/eventnotification/data_source_ibm_en_destination_cos.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,197 @@
// Copyright IBM Corp. 2021 All Rights Reserved.
// Licensed under the Mozilla Public License v2.0

package eventnotification

import (
"context"
"fmt"

"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 DataSourceIBMEnCOSDestination() *schema.Resource {
return &schema.Resource{
ReadContext: dataSourceIBMEnCOSDestinationRead,

Schema: map[string]*schema.Schema{
"instance_guid": {
Type: schema.TypeString,
Required: true,
Description: "Unique identifier for IBM Cloud Event Notifications instance.",
},
"destination_id": {
Type: schema.TypeString,
Required: true,
Description: "Unique identifier for Destination.",
},
"name": {
Type: schema.TypeString,
Computed: true,
Description: "Destination name.",
},
"description": {
Type: schema.TypeString,
Computed: true,
Description: "Destination description.",
},
"type": {
Type: schema.TypeString,
Computed: true,
Description: "Destination type ibmcf.",
},
"config": {
Type: schema.TypeList,
Computed: true,
Description: "Payload describing a destination configuration.",
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"params": {
Type: schema.TypeList,
Computed: true,
Elem: &schema.Resource{
Schema: map[string]*schema.Schema{
"bucket_name": {
Type: schema.TypeString,
Required: true,
Description: "The COS bucket name",
},
"instance_id": {
Type: schema.TypeString,
Required: true,
Description: "The instance id for COS instance",
},
"endpoint": {
Type: schema.TypeString,
Required: true,
Description: "The endpoint for the COS bucket endpoint",
},
},
},
},
},
},
},
"updated_at": {
Type: schema.TypeString,
Computed: true,
Description: "Last updated time.",
},
"subscription_count": {
Type: schema.TypeInt,
Computed: true,
Description: "Number of subscriptions.",
},
"subscription_names": {
Type: schema.TypeList,
Computed: true,
Description: "List of subscriptions.",
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
},
}
}

func dataSourceIBMEnCOSDestinationRead(context context.Context, d *schema.ResourceData, meta interface{}) diag.Diagnostics {
enClient, err := meta.(conns.ClientSession).EventNotificationsApiV1()
if err != nil {
return diag.FromErr(err)
}

options := &en.GetDestinationOptions{}

options.SetInstanceID(d.Get("instance_guid").(string))
options.SetID(d.Get("destination_id").(string))

result, response, err := enClient.GetDestinationWithContext(context, options)
if err != nil {
return diag.FromErr(fmt.Errorf("GetDestination failed %s\n%s", err, response))
}

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

if err = d.Set("name", result.Name); err != nil {
return diag.FromErr(fmt.Errorf("[ERROR] Error setting name: %s", err))
}

if result.Description != nil {
if err = d.Set("description", result.Description); err != nil {
return diag.FromErr(fmt.Errorf("[ERROR] Error setting description: %s", err))
}
}

if err = d.Set("type", result.Type); err != nil {
return diag.FromErr(fmt.Errorf("[ERROR] Error setting type: %s", err))
}

if result.Config != nil {
err = d.Set("config", enCOSDestinationFlattenConfig(*result.Config))
if err != nil {
return diag.FromErr(fmt.Errorf("[ERROR] Error setting config %s", err))
}
}

if result.SubscriptionNames != nil {
err = d.Set("subscription_names", result.SubscriptionNames)
if err != nil {
return diag.FromErr(fmt.Errorf("[ERROR] Error setting subscription_names %s", err))
}
}

if err = d.Set("updated_at", flex.DateTimeToString(result.UpdatedAt)); err != nil {
return diag.FromErr(fmt.Errorf("[ERROR] Error setting updated_at: %s", err))
}

if err = d.Set("subscription_count", flex.IntValue(result.SubscriptionCount)); err != nil {
return diag.FromErr(fmt.Errorf("[ERROR] Error setting subscription_count: %s", err))
}

return nil
}

func enCOSDestinationFlattenConfig(result en.DestinationConfig) (finalList []map[string]interface{}) {
finalList = []map[string]interface{}{}
finalMap := enCOSDestinationConfigToMap(result)
finalList = append(finalList, finalMap)

return finalList
}

func enCOSDestinationConfigToMap(configItem en.DestinationConfig) (configMap map[string]interface{}) {
configMap = map[string]interface{}{}

if configItem.Params != nil {
paramsList := []map[string]interface{}{}
paramsMap := enCOSDestinationConfigParamsToMap(configItem.Params)
paramsList = append(paramsList, paramsMap)
configMap["params"] = paramsList
}

return configMap
}

func enCOSDestinationConfigParamsToMap(paramsItem en.DestinationConfigOneOfIntf) (paramsMap map[string]interface{}) {
paramsMap = map[string]interface{}{}

params := paramsItem.(*en.DestinationConfigOneOf)

if params.BucketName != nil {
paramsMap["bucket_name"] = params.BucketName
}

if params.InstanceID != nil {
paramsMap["instance_id"] = params.InstanceID
}

if params.Endpoint != nil {
paramsMap["endpoint"] = params.Endpoint
}
return paramsMap
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
// 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 TestAccIBMEnCOSDestinationDataSourceBasic(t *testing.T) {
name := fmt.Sprintf("tf_name_%d", acctest.RandIntRange(10, 100))
instanceName := 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: testAccCheckIBMEnCOSDestinationDataSourceConfigBasic(instanceName, name, description),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("data.ibm_en_destination_cos.en_destination_data_6", "id"),
resource.TestCheckResourceAttrSet("data.ibm_en_destination_cos.en_destination_data_6", "instance_guid"),
resource.TestCheckResourceAttrSet("data.ibm_en_destination_cos.en_destination_data_6", "name"),
resource.TestCheckResourceAttrSet("data.ibm_en_destination_cos.en_destination_data_6", "description"),
resource.TestCheckResourceAttrSet("data.ibm_en_destination_cos.en_destination_data_6", "type"),
resource.TestCheckResourceAttrSet("data.ibm_en_destination_cos.en_destination_data_6", "updated_at"),
resource.TestCheckResourceAttrSet("data.ibm_en_destination_cos.en_destination_data_6", "destination_id"),
resource.TestCheckResourceAttrSet("data.ibm_en_destination_cos.en_destination_data_6", "subscription_count"),
),
},
},
})
}

func testAccCheckIBMEnCOSDestinationDataSourceConfigBasic(instanceName, name, description string) string {
return fmt.Sprintf(`
resource "ibm_resource_instance" "en_destination_datasource2" {
name = "%s"
location = "us-south"
plan = "standard"
service = "event-notifications"
}
resource "ibm_en_destination_cos" "en_destination_datasource_4" {
instance_guid = ibm_resource_instance.en_destination_resource.guid
name = "%s"
type = "ibmcos"
description = "%s"
config {
params {
bucket_name = "cos-destination-en-bucket"
instance_id = "42e13636e-0548-41a0-a178-e95be28464773"
endpoint = "https://s3.us-west.cloud-object-storage.test.appdomain.cloud"
}
}
}
data "ibm_en_destination_cos" "en_destination_data_6" {
instance_guid = ibm_resource_instance.en_destination_datasource2.guid
destination_id = ibm_en_destination_cos.en_destination_datasource_4.destination_id
}
`, instanceName, name, description)
}
Loading

0 comments on commit 1cfd564

Please sign in to comment.