github.com/bradfeehan/terraform@v0.7.0-rc3.0.20170529055808-34b45c5ad841/builtin/providers/aws/resource_aws_default_vpc_dhcp_options.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 resourceAwsDefaultVpcDhcpOptions() *schema.Resource {
    13  	// reuse aws_vpc_dhcp_options schema, and methods for READ, UPDATE
    14  	dvpc := resourceAwsVpcDhcpOptions()
    15  	dvpc.Create = resourceAwsDefaultVpcDhcpOptionsCreate
    16  	dvpc.Delete = resourceAwsDefaultVpcDhcpOptionsDelete
    17  
    18  	// domain_name is a computed value for Default Default DHCP Options Sets
    19  	dvpc.Schema["domain_name"] = &schema.Schema{
    20  		Type:     schema.TypeString,
    21  		Computed: true,
    22  	}
    23  	// domain_name_servers is a computed value for Default Default DHCP Options Sets
    24  	dvpc.Schema["domain_name_servers"] = &schema.Schema{
    25  		Type:     schema.TypeString,
    26  		Computed: true,
    27  	}
    28  	// ntp_servers is a computed value for Default Default DHCP Options Sets
    29  	dvpc.Schema["ntp_servers"] = &schema.Schema{
    30  		Type:     schema.TypeString,
    31  		Computed: true,
    32  	}
    33  
    34  	return dvpc
    35  }
    36  
    37  func resourceAwsDefaultVpcDhcpOptionsCreate(d *schema.ResourceData, meta interface{}) error {
    38  	conn := meta.(*AWSClient).ec2conn
    39  
    40  	var domainName string
    41  	awsRegion := meta.(*AWSClient).region
    42  	if awsRegion == "us-east-1" {
    43  		domainName = "ec2.internal"
    44  	} else {
    45  		domainName = awsRegion + ".compute.internal"
    46  	}
    47  	req := &ec2.DescribeDhcpOptionsInput{
    48  		Filters: []*ec2.Filter{
    49  			&ec2.Filter{
    50  				Name:   aws.String("key"),
    51  				Values: aws.StringSlice([]string{"domain-name"}),
    52  			},
    53  			&ec2.Filter{
    54  				Name:   aws.String("value"),
    55  				Values: aws.StringSlice([]string{domainName}),
    56  			},
    57  			&ec2.Filter{
    58  				Name:   aws.String("key"),
    59  				Values: aws.StringSlice([]string{"domain-name-servers"}),
    60  			},
    61  			&ec2.Filter{
    62  				Name:   aws.String("value"),
    63  				Values: aws.StringSlice([]string{"AmazonProvidedDNS"}),
    64  			},
    65  		},
    66  	}
    67  
    68  	resp, err := conn.DescribeDhcpOptions(req)
    69  	if err != nil {
    70  		return err
    71  	}
    72  
    73  	if len(resp.DhcpOptions) != 1 || resp.DhcpOptions[0] == nil {
    74  		return fmt.Errorf("Default DHCP Options Set not found")
    75  	}
    76  
    77  	d.SetId(aws.StringValue(resp.DhcpOptions[0].DhcpOptionsId))
    78  
    79  	if err := resourceAwsVpcDhcpOptionsUpdate(d, meta); err != nil {
    80  		return err
    81  	}
    82  
    83  	return resourceAwsVpcDhcpOptionsRead(d, meta)
    84  }
    85  
    86  func resourceAwsDefaultVpcDhcpOptionsDelete(d *schema.ResourceData, meta interface{}) error {
    87  	log.Printf("[WARN] Cannot destroy Default DHCP Options Set. Terraform will remove this resource from the state file, however resources may remain.")
    88  	d.SetId("")
    89  	return nil
    90  }