github.com/koding/terraform@v0.6.4-0.20170608090606-5d7e0339779d/builtin/providers/triton/resource_firewall_rule.go (about)

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