github.com/jdextraze/terraform@v0.6.17-0.20160511153921-e33847c8a8af/builtin/providers/triton/resource_firewall_rule.go (about)

     1  package triton
     2  
     3  import (
     4  	"github.com/hashicorp/terraform/helper/schema"
     5  	"github.com/joyent/gocommon/errors"
     6  	"github.com/joyent/gosdc/cloudapi"
     7  )
     8  
     9  func resourceFirewallRule() *schema.Resource {
    10  	return &schema.Resource{
    11  		Create: resourceFirewallRuleCreate,
    12  		Exists: resourceFirewallRuleExists,
    13  		Read:   resourceFirewallRuleRead,
    14  		Update: resourceFirewallRuleUpdate,
    15  		Delete: resourceFirewallRuleDelete,
    16  
    17  		Schema: map[string]*schema.Schema{
    18  			"rule": {
    19  				Description: "firewall rule text",
    20  				Type:        schema.TypeString,
    21  				Required:    true,
    22  			},
    23  			"enabled": {
    24  				Description: "Indicates if the rule is enabled",
    25  				Type:        schema.TypeBool,
    26  				Optional:    true,
    27  				Default:     false,
    28  			},
    29  		},
    30  	}
    31  }
    32  
    33  func resourceFirewallRuleCreate(d *schema.ResourceData, meta interface{}) error {
    34  	client := meta.(*cloudapi.Client)
    35  
    36  	rule, err := client.CreateFirewallRule(cloudapi.CreateFwRuleOpts{
    37  		Rule:    d.Get("rule").(string),
    38  		Enabled: d.Get("enabled").(bool),
    39  	})
    40  	if err != nil {
    41  		return err
    42  	}
    43  
    44  	d.SetId(rule.Id)
    45  
    46  	err = resourceFirewallRuleRead(d, meta)
    47  	if err != nil {
    48  		return err
    49  	}
    50  
    51  	return nil
    52  }
    53  
    54  func resourceFirewallRuleExists(d *schema.ResourceData, meta interface{}) (bool, error) {
    55  	client := meta.(*cloudapi.Client)
    56  
    57  	rule, err := client.GetFirewallRule(d.Id())
    58  	if errors.IsResourceNotFound(err) {
    59  		return false, nil
    60  	}
    61  
    62  	return rule != nil && err == nil, err
    63  }
    64  
    65  func resourceFirewallRuleRead(d *schema.ResourceData, meta interface{}) error {
    66  	client := meta.(*cloudapi.Client)
    67  
    68  	rule, err := client.GetFirewallRule(d.Id())
    69  	if err != nil {
    70  		return err
    71  	}
    72  
    73  	d.SetId(rule.Id)
    74  	d.Set("rule", rule.Rule)
    75  	d.Set("enabled", rule.Enabled)
    76  
    77  	return nil
    78  }
    79  
    80  func resourceFirewallRuleUpdate(d *schema.ResourceData, meta interface{}) error {
    81  	client := meta.(*cloudapi.Client)
    82  
    83  	_, err := client.UpdateFirewallRule(
    84  		d.Id(),
    85  		cloudapi.CreateFwRuleOpts{
    86  			Rule:    d.Get("rule").(string),
    87  			Enabled: d.Get("enabled").(bool),
    88  		},
    89  	)
    90  	if err != nil {
    91  		return err
    92  	}
    93  
    94  	return resourceFirewallRuleRead(d, meta)
    95  }
    96  
    97  func resourceFirewallRuleDelete(d *schema.ResourceData, meta interface{}) error {
    98  	client := meta.(*cloudapi.Client)
    99  
   100  	if err := client.DeleteFirewallRule(d.Id()); err != nil {
   101  		return err
   102  	}
   103  
   104  	return nil
   105  }