terraform-provider-google/google/resource_storage_notification.go
The Magician c605b0bc4b [Terraform]: Apply gofmt -s to all files managed by MM (#2676)
<!-- This change is generated by MagicModules. -->
/cc @rileykarson
2018-12-20 17:22:22 -08:00

150 lines
3.9 KiB
Go

package google
import (
"fmt"
"strings"
"github.com/hashicorp/terraform/helper/schema"
"github.com/hashicorp/terraform/helper/validation"
"google.golang.org/api/storage/v1"
)
func resourceStorageNotification() *schema.Resource {
return &schema.Resource{
Create: resourceStorageNotificationCreate,
Read: resourceStorageNotificationRead,
Delete: resourceStorageNotificationDelete,
Importer: &schema.ResourceImporter{
State: schema.ImportStatePassthrough,
},
Schema: map[string]*schema.Schema{
"bucket": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
},
"payload_format": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
ValidateFunc: validation.StringInSlice([]string{"JSON_API_V1", "NONE"}, false),
},
"topic": {
Type: schema.TypeString,
Required: true,
ForceNew: true,
DiffSuppressFunc: compareSelfLinkOrResourceName,
},
"custom_attributes": {
Type: schema.TypeMap,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{
Type: schema.TypeString,
},
},
"event_types": {
Type: schema.TypeSet,
Optional: true,
ForceNew: true,
Elem: &schema.Schema{
Type: schema.TypeString,
ValidateFunc: validation.StringInSlice([]string{
"OBJECT_FINALIZE", "OBJECT_METADATA_UPDATE", "OBJECT_DELETE", "OBJECT_ARCHIVE"},
false),
},
},
"object_name_prefix": {
Type: schema.TypeString,
Optional: true,
ForceNew: true,
},
"self_link": {
Type: schema.TypeString,
Computed: true,
},
},
}
}
func resourceStorageNotificationCreate(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
bucket := d.Get("bucket").(string)
topicName := d.Get("topic").(string)
computedTopicName := getComputedTopicName("", topicName)
if computedTopicName != topicName {
project, err := getProject(d, config)
if err != nil {
return err
}
computedTopicName = getComputedTopicName(project, topicName)
}
storageNotification := &storage.Notification{
CustomAttributes: expandStringMap(d, "custom_attributes"),
EventTypes: convertStringSet(d.Get("event_types").(*schema.Set)),
ObjectNamePrefix: d.Get("object_name_prefix").(string),
PayloadFormat: d.Get("payload_format").(string),
Topic: computedTopicName,
}
res, err := config.clientStorage.Notifications.Insert(bucket, storageNotification).Do()
if err != nil {
return fmt.Errorf("Error creating notification config for bucket %s: %v", bucket, err)
}
d.SetId(fmt.Sprintf("%s/notificationConfigs/%s", bucket, res.Id))
return resourceStorageNotificationRead(d, meta)
}
func resourceStorageNotificationRead(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
bucket, notificationID := resourceStorageNotificationParseID(d.Id())
res, err := config.clientStorage.Notifications.Get(bucket, notificationID).Do()
if err != nil {
return handleNotFoundError(err, d, fmt.Sprintf("Notification configuration %s for bucket %s", notificationID, bucket))
}
d.Set("bucket", bucket)
d.Set("payload_format", res.PayloadFormat)
d.Set("topic", res.Topic)
d.Set("object_name_prefix", res.ObjectNamePrefix)
d.Set("event_types", res.EventTypes)
d.Set("self_link", res.SelfLink)
d.Set("custom_attributes", res.CustomAttributes)
return nil
}
func resourceStorageNotificationDelete(d *schema.ResourceData, meta interface{}) error {
config := meta.(*Config)
bucket, notificationID := resourceStorageNotificationParseID(d.Id())
err := config.clientStorage.Notifications.Delete(bucket, notificationID).Do()
if err != nil {
return fmt.Errorf("Error deleting notification configuration %s for bucket %s: %v", notificationID, bucket, err)
}
return nil
}
func resourceStorageNotificationParseID(id string) (string, string) {
//bucket, NotificationID
parts := strings.Split(id, "/")
return parts[0], parts[2]
}