github.com/bendemaree/terraform@v0.5.4-0.20150613200311-f50d97d6eee6/builtin/providers/openstack/resource_openstack_networking_router_interface_v2.go (about)

     1  package openstack
     2  
     3  import (
     4  	"fmt"
     5  	"log"
     6  
     7  	"github.com/hashicorp/terraform/helper/schema"
     8  	"github.com/rackspace/gophercloud"
     9  	"github.com/rackspace/gophercloud/openstack/networking/v2/extensions/layer3/routers"
    10  	"github.com/rackspace/gophercloud/openstack/networking/v2/ports"
    11  )
    12  
    13  func resourceNetworkingRouterInterfaceV2() *schema.Resource {
    14  	return &schema.Resource{
    15  		Create: resourceNetworkingRouterInterfaceV2Create,
    16  		Read:   resourceNetworkingRouterInterfaceV2Read,
    17  		Delete: resourceNetworkingRouterInterfaceV2Delete,
    18  
    19  		Schema: map[string]*schema.Schema{
    20  			"region": &schema.Schema{
    21  				Type:        schema.TypeString,
    22  				Required:    true,
    23  				ForceNew:    true,
    24  				DefaultFunc: envDefaultFuncAllowMissing("OS_REGION_NAME"),
    25  			},
    26  			"router_id": &schema.Schema{
    27  				Type:     schema.TypeString,
    28  				Required: true,
    29  				ForceNew: true,
    30  			},
    31  			"subnet_id": &schema.Schema{
    32  				Type:     schema.TypeString,
    33  				Required: true,
    34  				ForceNew: true,
    35  			},
    36  		},
    37  	}
    38  }
    39  
    40  func resourceNetworkingRouterInterfaceV2Create(d *schema.ResourceData, meta interface{}) error {
    41  	config := meta.(*Config)
    42  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
    43  	if err != nil {
    44  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    45  	}
    46  
    47  	createOpts := routers.InterfaceOpts{
    48  		SubnetID: d.Get("subnet_id").(string),
    49  	}
    50  
    51  	log.Printf("[DEBUG] Create Options: %#v", createOpts)
    52  	n, err := routers.AddInterface(networkingClient, d.Get("router_id").(string), createOpts).Extract()
    53  	if err != nil {
    54  		return fmt.Errorf("Error creating OpenStack Neutron router interface: %s", err)
    55  	}
    56  	log.Printf("[INFO] Router interface Port ID: %s", n.PortID)
    57  
    58  	d.SetId(n.PortID)
    59  
    60  	return resourceNetworkingRouterInterfaceV2Read(d, meta)
    61  }
    62  
    63  func resourceNetworkingRouterInterfaceV2Read(d *schema.ResourceData, meta interface{}) error {
    64  	config := meta.(*Config)
    65  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
    66  	if err != nil {
    67  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    68  	}
    69  
    70  	n, err := ports.Get(networkingClient, d.Id()).Extract()
    71  	if err != nil {
    72  		httpError, ok := err.(*gophercloud.UnexpectedResponseCodeError)
    73  		if !ok {
    74  			return fmt.Errorf("Error retrieving OpenStack Neutron Router Interface: %s", err)
    75  		}
    76  
    77  		if httpError.Actual == 404 {
    78  			d.SetId("")
    79  			return nil
    80  		}
    81  		return fmt.Errorf("Error retrieving OpenStack Neutron Router Interface: %s", err)
    82  	}
    83  
    84  	log.Printf("[DEBUG] Retreived Router Interface %s: %+v", d.Id(), n)
    85  
    86  	return nil
    87  }
    88  
    89  func resourceNetworkingRouterInterfaceV2Delete(d *schema.ResourceData, meta interface{}) error {
    90  	config := meta.(*Config)
    91  	networkingClient, err := config.networkingV2Client(d.Get("region").(string))
    92  	if err != nil {
    93  		return fmt.Errorf("Error creating OpenStack networking client: %s", err)
    94  	}
    95  
    96  	removeOpts := routers.InterfaceOpts{
    97  		SubnetID: d.Get("subnet_id").(string),
    98  	}
    99  
   100  	_, err = routers.RemoveInterface(networkingClient, d.Get("router_id").(string), removeOpts).Extract()
   101  	if err != nil {
   102  		return fmt.Errorf("Error deleting OpenStack Neutron Router Interface: %s", err)
   103  	}
   104  
   105  	d.SetId("")
   106  	return nil
   107  }