aboutsummaryrefslogblamecommitdiffhomepage
path: root/mailgun/resource_mailgun_route.go
blob: 308da4425055c61eed4138891a703ace6ff9fd74 (plain) (tree)
1
2
3
4
5
6
7





                                                      
                                          














                                                             
                                                   


















































                                                                                  




















                                                                                  
                                 




























                                                                                                       
                                                     
                                   




                         
package mailgun

import (
	"context"
	"fmt"
	"github.com/hashicorp/terraform/helper/schema"
	"github.com/mailgun/mailgun-go/v3"
	"log"
	"time"
)

func resourceMailgunRoute() *schema.Resource {
	return &schema.Resource{
		Create: CreateRoute,
		Update: UpdateRoute,
		Delete: DeleteRoute,
		Read:   ReadRoute,
		Importer: &schema.ResourceImporter{
			State: schema.ImportStatePassthrough,
		},

		Schema: map[string]*schema.Schema{
			"route_id": &schema.Schema{
				Type:     schema.TypeString,
				Computed: true,
			},
			"created_at": &schema.Schema{
				Type:     schema.TypeString,
				Computed: true,
			},

			"priority": &schema.Schema{
				Type:     schema.TypeInt,
				Required: true,
			},

			"expression": &schema.Schema{
				Type:     schema.TypeString,
				Required: true,
			},

			"description": &schema.Schema{
				Type:     schema.TypeString,
				Required: true,
			},

			"actions": &schema.Schema{
				Type:     schema.TypeList,
				Required: true,
				Elem:     &schema.Schema{Type: schema.TypeString},
			},
		},
	}
}

func CreateRoute(d *schema.ResourceData, meta interface{}) error {
	mg := meta.(*mailgun.MailgunImpl)
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
	defer cancel()

	log.Printf("[DEBUG] creating  mailgun route: %s", d.Id())

	creationResponse, err := mg.CreateRoute(ctx, mailgun.Route{
		Priority:    d.Get("priority").(int),
		Description: d.Get("description").(string),
		Expression:  d.Get("expression").(string),
		Actions:     interfaceToStringTab(d.Get("actions")),
	})

	if err != nil {
		return fmt.Errorf("Error creating mailgun route: %s", err.Error())
	}

	d.SetId(creationResponse.Id)
	return ReadRoute(d, meta)
}

func UpdateRoute(d *schema.ResourceData, meta interface{}) error {
	mg := meta.(*mailgun.MailgunImpl)
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
	defer cancel()

	log.Printf("[DEBUG] updating  mailgun route: %s", d.Id())

	_, err := mg.UpdateRoute(ctx, d.Id(), mailgun.Route{
		Priority:    d.Get("priority").(int),
		Description: d.Get("description").(string),
		Expression:  d.Get("expression").(string),
		Actions:     interfaceToStringTab(d.Get("actions")),
	})

	if err != nil {
		return fmt.Errorf("Error updating mailgun route: %s", err.Error())
	}

	return ReadRoute(d, meta)
}

func DeleteRoute(d *schema.ResourceData, meta interface{}) error {
	mg := meta.(*mailgun.MailgunImpl)
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
	defer cancel()

	log.Printf("[DEBUG] Deleting mailgun route: %s", d.Id())

	err := mg.DeleteRoute(ctx, d.Id())

	return err
}

func ReadRoute(d *schema.ResourceData, meta interface{}) error {
	mg := meta.(*mailgun.MailgunImpl)
	ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
	defer cancel()

	route, err := mg.GetRoute(ctx, d.Id())

	if err != nil {
		return fmt.Errorf("Error Getting mailgun route Details for %s: Error: %s", d.Id(), err)
	}

	d.Set("priority", route.Priority)
	d.Set("description", route.Description)
	d.Set("expression", route.Expression)
	d.Set("actions", route.Actions)
	d.Set("created_at", route.CreatedAt.String())
	d.Set("route_id", route.Id)

	d.SetId(route.Id)

	return nil
}