Go client library to interact with the various IBM Cloud Event Notifications APIs.
- Overview
- Prerequisites
- Installation
- Initialize SDK
- Using the SDK
- Set Environment
- Questions
- Issues
- Open source @ IBM
- Contributing
- License
The IBM Cloud Event Notifications Go SDK allows developers to programmatically interact with Event Notifications service in IBM cloud.
Service Name | Package name |
---|
Event Notifications Service | eventnotificationsv1
- An IBM Cloud account.
- An Event Notifications Instance
- Go version 1.16 or above.
Install using the command.
go get -u github.com/IBM/event-notifications-go-admin-sdk
If your application uses Go modules for dependency management (recommended), just add an import for each service
that you will use in your application.
Here is an example:
import (
"github.com/IBM/event-notifications-go-admin-sdk/eventnotificationsv1"
)
Next, run go build
or go mod tidy
to download and install the new dependencies and update your application's
go.mod
file.
In the example above, the eventnotificationsv1
part of the import path is the package name
associated with the Example Service service.
See the service table above to find the approprate package name for the services used by your application.
Initialize the sdk to connect with your Event Notifications service instance.
func initInstance() *eventnotificationsv1.EventNotificationsV1 {
// IAM API key based authentication
authenticator := &core.IamAuthenticator{
ApiKey: <apikey>, // Event notifications service instance APIKey
}
// Set the options for the Event notification instance.
options := &eventnotificationsv1.EventNotificationsV1Options{
Authenticator: authenticator,
URL: "https://" + region + ".event-notifications.cloud.ibm.com/event-notifications",
}
eventNotificationsService, err := eventnotificationsv1.NewEventNotificationsV1(options)
if err != nil {
panic(err)
}
return eventNotificationsService
}
- region : Region of the Event Notifications Instance
SDK Methods to consume
listSourcesOptions := eventNotificationsService.NewListSourcesOptions(
<instance-id>, // Event notifications service instance GUID
)
sourceList, response, err := eventNotificationsService.ListSource(listSourcesOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(sourceList, "", " ")
fmt.Println(string(b))
getSourceOptions := eventNotificationsService.NewGetSourceOptions(
<instance-id>, // Event notifications service instance GUID
<source-id>, // Event notifications service instance Source ID
)
source, response, err := eventNotificationsService.GetSource(getSourceOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(source, "", " ")
fmt.Println(string(b))
rulesModel := &eventnotificationsv1.Rules{
Enabled: core.BoolPtr(false),
EventTypeFilter: core.StringPtr("$.notification_event_info.event_type == 'cert_manager'"), // Add your event type filter here.
NotificationFilter: core.StringPtr("$.notification.findings[0].severity == 'MODERATE'"), // Add your notification filter here.
}
topicUpdateSourcesItemModel := &eventnotificationsv1.TopicUpdateSourcesItem{
ID: core.StringPtr(<source-id>),
Rules: []eventnotificationsv1.Rules{*rulesModel},
}
createTopicOptions := &eventnotificationsv1.CreateTopicOptions{
InstanceID: core.StringPtr(<instance-id>),
Name: core.StringPtr(<topic-name>]),
Description: core.StringPtr(<topic-description>),
Sources: []eventnotificationsv1.TopicUpdateSourcesItem{*topicUpdateSourcesItemModel},
}
topic, response, err := eventNotificationsService.CreateTopic(createTopicOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(topic, "", " ")
fmt.Println(string(b))
listTopicsOptions := eventNotificationsService.NewListTopicsOptions(
<instance-id>,
)
topicList, response, err := eventNotificationsService.ListTopic(listTopicsOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(topicList, "", " ")
fmt.Println(string(b))
getTopicOptions := eventNotificationsService.NewGetTopicOptions(
<instance-id>, // Event notifications service instance GUID
<topic-id>, // Event notifications service instance Topic ID
)
topic, response, err := eventNotificationsService.GetTopic(getTopicOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(topic, "", " ")
fmt.Println(string(b))
rulesModel := &eventnotificationsv1.Rules{
Enabled: core.BoolPtr(true),
EventTypeFilter: core.StringPtr("$.notification_event_info.event_type == 'core_cert_manager'"), // Add your event type filter here.
NotificationFilter: core.StringPtr("$.notification.findings[0].severity == 'SEVERE'"), // Add your notification filter here.
}
topicUpdateSourcesItemModel := &eventnotificationsv1.TopicUpdateSourcesItem{
ID: core.StringPtr(<source-id>), // Event notifications service instance Source ID
Rules: []eventnotificationsv1.Rules{*rulesModel},
}
replaceTopicOptions := &eventnotificationsv1.ReplaceTopicOptions{
InstanceID: core.StringPtr(<instance-id>), // Event notifications service instance GUID
ID: core.StringPtr(<topic-id>), // Event notifications service instance Topic ID
Name: core.StringPtr(<topic-update-name>), // Event notifications service instance Topic Name
Description: core.StringPtr(<topic-update-description>), // Event notifications service instance Topic description
Sources: []eventnotificationsv1.TopicUpdateSourcesItem{*topicUpdateSourcesItemModel},
}
topic, response, err := eventNotificationsInstance.ReplaceTopic(replaceTopicOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(topic, "", " ")
fmt.Println(string(b))
deleteTopicOptions := eventNotificationsService.NewDeleteTopicOptions(
<instance-id>,
<topic-id>,
)
response, err := eventNotificationsService.DeleteTopic(deleteTopicOptions)
if err != nil {
panic(err)
}
createDestinationOptions := eventNotificationsService.NewCreateDestinationOptions(
<instance-id>,
<destination-name>,
<destination-type>,
)
destinationConfigParamsModel := &eventnotificationsv1.DestinationConfigParamsWebhookDestinationConfig{
URL: core.StringPtr(<destination-config-url>),
Verb: core.StringPtr(<destination-config-verb>),
CustomHeaders: make(map[string]string),
SensitiveHeaders: []string{<header-key>},
}
destinationConfigModel := &eventnotificationsv1.DestinationConfig{
Params: destinationConfigParamsModel,
}
createDestinationOptions.SetConfig(destinationConfigModel)
destination, response, err := eventNotificationsService.CreateDestination(createDestinationOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(destination, "", " ")
fmt.Println(string(b))
listDestinationsOptions := eventNotificationsService.NewListDestinationsOptions(
<instance-id>,
)
destinationList, response, err := eventNotificationsService.ListDestinations(listDestinationsOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(destinationList, "", " ")
fmt.Println(string(b))
getDestinationOptions := eventNotificationsService.NewGetDestinationOptions(
<instance-id>, // Event notifications service instance GUID
<destination-id>, // Event notifications service instance Destination ID
)
destination, response, err := eventNotificationsService.GetDestination(getDestinationOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(destination, "", " ")
fmt.Println(string(b))
destinationConfigParamsModel := &eventnotificationsv1.DestinationConfigParamsWebhookDestinationConfig{
URL: core.StringPtr(<destination-config-update-url>),
Verb: core.StringPtr(<destination-config-update-verb>),
CustomHeaders: make(map[string]string),
SensitiveHeaders: []string{<header-key>},
}
destinationConfigModel := &eventnotificationsv1.DestinationConfig{
Params: destinationConfigParamsModel,
}
updateDestinationOptions := eventNotificationsService.NewUpdateDestinationOptions(
<instance-id>, // Event notifications service instance GUID
<destination-id>, // Event notifications service instance Destination ID
)
updateDestinationOptions.SetName(<destination-update-name>)
updateDestinationOptions.SetDescription(<destination-update-description>)
updateDestinationOptions.SetConfig(destinationConfigModel)
destination, response, err := eventNotificationsService.UpdateDestination(updateDestinationOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(destination, "", " ")
fmt.Println(string(b))
deleteDestinationOptions := eventNotificationsService.NewDeleteDestinationOptions(
<instance-id>, // Event notifications service instance GUID
<destination-id>, // Event notifications service instance Destination ID
)
response, err := eventNotificationsService.DeleteDestination(deleteDestinationOptions)
if err != nil {
panic(err)
}
`While Creating Subscription use any of one option from webhook or email`
subscriptionCreateAttributesModel := &eventnotificationsv1.SubscriptionCreateAttributes{
SigningEnabled: core.BoolPtr(false),
}
createSubscriptionOptions := eventNotificationsService.NewCreateSubscriptionOptions(
<instance-id>, // Event notifications service instance GUID
<subscription-name>,
<destination-id>, // Event notifications service instance Destination ID
<topic-id>, // Event notifications service instance Topic ID
subscriptionCreateAttributesModel,
)
createSubscriptionOptions.SetDescription(<subscription-description>)
subscription, response, err := eventNotificationsService.CreateSubscription(createSubscriptionOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(subscription, "", " ")
fmt.Println(string(b))
listSubscriptionsOptions := eventNotificationsService.NewListSubscriptionsOptions(
<instance-id>, // Event notifications service instance GUID
)
subscriptionList, response, err := eventNotificationsService.ListSubscriptions(listSubscriptionsOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(subscriptionList, "", " ")
fmt.Println(string(b))
getSubscriptionOptions := eventNotificationsService.NewGetSubscriptionOptions(
<instance-id>, // Event notifications service instance GUID
<subscription-id>, // Event notifications service instance Subscription ID
)
subscription, response, err := eventNotificationsService.GetSubscription(getSubscriptionOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(subscription, "", " ")
fmt.Println(string(b))
updateSubscriptionOptions := eventNotificationsService.NewUpdateSubscriptionOptions(
<instance-id>, // Event notifications service instance GUID
<subscription-id>, // Event notifications service instance Subscription ID
)
subscriptionUpdateAttributesModel := &eventnotificationsv1.SubscriptionUpdateAttributesWebhookAttributes{
SigningEnabled: core.BoolPtr(true),
}
updateSubscriptionOptions.SetAttributes(subscriptionUpdateAttributesModel)
updateSubscriptionOptions.SetDescription(<subscription-update-description>)
updateSubscriptionOptions.SetName(<subscription-update-name>)
subscription, response, err := eventNotificationsService.UpdateSubscription(updateSubscriptionOptions)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(subscription, "", " ")
fmt.Println(string(b))
deleteSubscriptionOptions := eventNotificationsService.NewDeleteSubscriptionOptions(
<instance-id>, // Event notifications service instance GUID
<subscription-id>, // Event notifications service instance Subscriptions ID
)
response, err := eventNotificationsService.DeleteSubscription(deleteSubscriptionOptions)
if err != nil {
panic(err)
}
Find event_notifications.env.hide in the repo and rename it to event_notifications.env
. After that add the values for,
EVENT_NOTIFICATIONS_URL
- Add the Event Notifications service instance Url.EVENT_NOTIFICATIONS_APIKEY
- Add the Event Notifications service instance apikey.EVENT_NOTIFICATIONS_GUID
- Add the Event Notifications service instance GUID.
Optional
EVENT_NOTIFICATIONS_AUTH_URL
- Add the IAM url if you are using IBM test cloud.
If you are having difficulties using this SDK or have a question about the IBM Cloud services, please ask a question at Stack Overflow.
Find more open source projects on the IBM Github Page
See CONTRIBUTING.
This SDK project is released under the Apache 2.0 license. The license's full text can be found in LICENSE.