github.com/skyscape-cloud-services/terraform@v0.9.2-0.20170609144644-7ece028a1747/builtin/providers/aws/resource_aws_vpn_gateway_route_propagation.go (about) 1 package aws 2 3 import ( 4 "fmt" 5 "log" 6 7 "github.com/aws/aws-sdk-go/aws" 8 "github.com/aws/aws-sdk-go/service/ec2" 9 "github.com/hashicorp/terraform/helper/schema" 10 ) 11 12 func resourceAwsVpnGatewayRoutePropagation() *schema.Resource { 13 return &schema.Resource{ 14 Create: resourceAwsVpnGatewayRoutePropagationEnable, 15 Read: resourceAwsVpnGatewayRoutePropagationRead, 16 Delete: resourceAwsVpnGatewayRoutePropagationDisable, 17 18 Schema: map[string]*schema.Schema{ 19 "vpn_gateway_id": &schema.Schema{ 20 Type: schema.TypeString, 21 Required: true, 22 ForceNew: true, 23 }, 24 "route_table_id": &schema.Schema{ 25 Type: schema.TypeString, 26 Required: true, 27 ForceNew: true, 28 }, 29 }, 30 } 31 } 32 33 func resourceAwsVpnGatewayRoutePropagationEnable(d *schema.ResourceData, meta interface{}) error { 34 conn := meta.(*AWSClient).ec2conn 35 36 gwID := d.Get("vpn_gateway_id").(string) 37 rtID := d.Get("route_table_id").(string) 38 39 log.Printf("[INFO] Enabling VGW propagation from %s to %s", gwID, rtID) 40 _, err := conn.EnableVgwRoutePropagation(&ec2.EnableVgwRoutePropagationInput{ 41 GatewayId: aws.String(gwID), 42 RouteTableId: aws.String(rtID), 43 }) 44 if err != nil { 45 return fmt.Errorf("error enabling VGW propagation: %s", err) 46 } 47 48 d.SetId(fmt.Sprintf("%s_%s", gwID, rtID)) 49 return nil 50 } 51 52 func resourceAwsVpnGatewayRoutePropagationDisable(d *schema.ResourceData, meta interface{}) error { 53 conn := meta.(*AWSClient).ec2conn 54 55 gwID := d.Get("vpn_gateway_id").(string) 56 rtID := d.Get("route_table_id").(string) 57 58 log.Printf("[INFO] Disabling VGW propagation from %s to %s", gwID, rtID) 59 _, err := conn.DisableVgwRoutePropagation(&ec2.DisableVgwRoutePropagationInput{ 60 GatewayId: aws.String(gwID), 61 RouteTableId: aws.String(rtID), 62 }) 63 if err != nil { 64 return fmt.Errorf("error disabling VGW propagation: %s", err) 65 } 66 67 d.SetId("") 68 return nil 69 } 70 71 func resourceAwsVpnGatewayRoutePropagationRead(d *schema.ResourceData, meta interface{}) error { 72 conn := meta.(*AWSClient).ec2conn 73 74 gwID := d.Get("vpn_gateway_id").(string) 75 rtID := d.Get("route_table_id").(string) 76 77 log.Printf("[INFO] Reading route table %s to check for VPN gateway %s", rtID, gwID) 78 rtRaw, _, err := resourceAwsRouteTableStateRefreshFunc(conn, rtID)() 79 if err != nil { 80 return err 81 } 82 if rtRaw == nil { 83 log.Printf("[INFO] Route table %q doesn't exist, so dropping %q route propagation from state", rtID, gwID) 84 d.SetId("") 85 return nil 86 } 87 88 rt := rtRaw.(*ec2.RouteTable) 89 exists := false 90 for _, vgw := range rt.PropagatingVgws { 91 if *vgw.GatewayId == gwID { 92 exists = true 93 } 94 } 95 if !exists { 96 log.Printf("[INFO] %s is no longer propagating to %s, so dropping route propagation from state", rtID, gwID) 97 d.SetId("") 98 return nil 99 } 100 101 return nil 102 }