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  }