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