github.com/armen/terraform@v0.5.2-0.20150529052519-caa8117a08f1/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 }