github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/newrelic/resource_newrelic_alert_policy.go (about)

     1  package newrelic
     2  
     3  import (
     4  	"log"
     5  	"strconv"
     6  
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  	"github.com/hashicorp/terraform/helper/validation"
     9  	newrelic "github.com/paultyng/go-newrelic/api"
    10  )
    11  
    12  func resourceNewRelicAlertPolicy() *schema.Resource {
    13  	return &schema.Resource{
    14  		Create: resourceNewRelicAlertPolicyCreate,
    15  		Read:   resourceNewRelicAlertPolicyRead,
    16  		// Update: Not currently supported in API
    17  		Delete: resourceNewRelicAlertPolicyDelete,
    18  		Importer: &schema.ResourceImporter{
    19  			State: schema.ImportStatePassthrough,
    20  		},
    21  		Schema: map[string]*schema.Schema{
    22  			"name": {
    23  				Type:     schema.TypeString,
    24  				Required: true,
    25  				ForceNew: true,
    26  			},
    27  			"incident_preference": {
    28  				Type:         schema.TypeString,
    29  				Optional:     true,
    30  				Default:      "PER_POLICY",
    31  				ForceNew:     true,
    32  				ValidateFunc: validation.StringInSlice([]string{"PER_POLICY", "PER_CONDITION", "PER_CONDITION_AND_TARGET"}, false),
    33  			},
    34  			"created_at": {
    35  				Type:     schema.TypeInt,
    36  				Computed: true,
    37  			},
    38  			"updated_at": {
    39  				Type:     schema.TypeInt,
    40  				Computed: true,
    41  			},
    42  		},
    43  	}
    44  }
    45  
    46  func buildAlertPolicyStruct(d *schema.ResourceData) *newrelic.AlertPolicy {
    47  	policy := newrelic.AlertPolicy{
    48  		Name: d.Get("name").(string),
    49  	}
    50  
    51  	if attr, ok := d.GetOk("incident_preference"); ok {
    52  		policy.IncidentPreference = attr.(string)
    53  	}
    54  
    55  	return &policy
    56  }
    57  
    58  func resourceNewRelicAlertPolicyCreate(d *schema.ResourceData, meta interface{}) error {
    59  	client := meta.(*newrelic.Client)
    60  	policy := buildAlertPolicyStruct(d)
    61  
    62  	log.Printf("[INFO] Creating New Relic alert policy %s", policy.Name)
    63  
    64  	policy, err := client.CreateAlertPolicy(*policy)
    65  	if err != nil {
    66  		return err
    67  	}
    68  
    69  	d.SetId(strconv.Itoa(policy.ID))
    70  
    71  	return nil
    72  }
    73  
    74  func resourceNewRelicAlertPolicyRead(d *schema.ResourceData, meta interface{}) error {
    75  	client := meta.(*newrelic.Client)
    76  
    77  	id, err := strconv.ParseInt(d.Id(), 10, 32)
    78  	if err != nil {
    79  		return err
    80  	}
    81  
    82  	log.Printf("[INFO] Reading New Relic alert policy %v", id)
    83  
    84  	policy, err := client.GetAlertPolicy(int(id))
    85  	if err != nil {
    86  		if err == newrelic.ErrNotFound {
    87  			d.SetId("")
    88  			return nil
    89  		}
    90  
    91  		return err
    92  	}
    93  
    94  	d.Set("name", policy.Name)
    95  	d.Set("incident_preference", policy.IncidentPreference)
    96  	d.Set("created_at", policy.CreatedAt)
    97  	d.Set("updated_at", policy.UpdatedAt)
    98  
    99  	return nil
   100  }
   101  
   102  func resourceNewRelicAlertPolicyDelete(d *schema.ResourceData, meta interface{}) error {
   103  	client := meta.(*newrelic.Client)
   104  
   105  	id, err := strconv.ParseInt(d.Id(), 10, 32)
   106  	if err != nil {
   107  		return err
   108  	}
   109  
   110  	log.Printf("[INFO] Deleting New Relic alert policy %v", id)
   111  
   112  	if err := client.DeleteAlertPolicy(int(id)); err != nil {
   113  		return err
   114  	}
   115  
   116  	d.SetId("")
   117  
   118  	return nil
   119  }