github.com/nathanielks/terraform@v0.6.1-0.20170509030759-13e1a62319dc/builtin/providers/aws/data_source_aws_efs_file_system.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/efs"
     9  	"github.com/hashicorp/errwrap"
    10  	"github.com/hashicorp/terraform/helper/schema"
    11  )
    12  
    13  func dataSourceAwsEfsFileSystem() *schema.Resource {
    14  	return &schema.Resource{
    15  		Read: dataSourceAwsEfsFileSystemRead,
    16  
    17  		Schema: map[string]*schema.Schema{
    18  			"creation_token": {
    19  				Type:         schema.TypeString,
    20  				Optional:     true,
    21  				Computed:     true,
    22  				ForceNew:     true,
    23  				ValidateFunc: validateMaxLength(64),
    24  			},
    25  			"file_system_id": {
    26  				Type:     schema.TypeString,
    27  				Optional: true,
    28  				Computed: true,
    29  				ForceNew: true,
    30  			},
    31  			"performance_mode": {
    32  				Type:     schema.TypeString,
    33  				Computed: true,
    34  			},
    35  			"tags": tagsSchemaComputed(),
    36  		},
    37  	}
    38  }
    39  
    40  func dataSourceAwsEfsFileSystemRead(d *schema.ResourceData, meta interface{}) error {
    41  	efsconn := meta.(*AWSClient).efsconn
    42  
    43  	describeEfsOpts := &efs.DescribeFileSystemsInput{}
    44  
    45  	if v, ok := d.GetOk("creation_token"); ok {
    46  		describeEfsOpts.CreationToken = aws.String(v.(string))
    47  	}
    48  
    49  	if v, ok := d.GetOk("file_system_id"); ok {
    50  		describeEfsOpts.FileSystemId = aws.String(v.(string))
    51  	}
    52  
    53  	describeResp, err := efsconn.DescribeFileSystems(describeEfsOpts)
    54  	if err != nil {
    55  		return errwrap.Wrapf("Error retrieving EFS: {{err}}", err)
    56  	}
    57  	if len(describeResp.FileSystems) != 1 {
    58  		return fmt.Errorf("Search returned %d results, please revise so only one is returned", len(describeResp.FileSystems))
    59  	}
    60  
    61  	d.SetId(*describeResp.FileSystems[0].FileSystemId)
    62  
    63  	tags := make([]*efs.Tag, 0)
    64  	var marker string
    65  	for {
    66  		params := &efs.DescribeTagsInput{
    67  			FileSystemId: aws.String(d.Id()),
    68  		}
    69  		if marker != "" {
    70  			params.Marker = aws.String(marker)
    71  		}
    72  
    73  		tagsResp, err := efsconn.DescribeTags(params)
    74  		if err != nil {
    75  			return fmt.Errorf("Error retrieving EC2 tags for EFS file system (%q): %s",
    76  				d.Id(), err.Error())
    77  		}
    78  
    79  		for _, tag := range tagsResp.Tags {
    80  			tags = append(tags, tag)
    81  		}
    82  
    83  		if tagsResp.NextMarker != nil {
    84  			marker = *tagsResp.NextMarker
    85  		} else {
    86  			break
    87  		}
    88  	}
    89  
    90  	err = d.Set("tags", tagsToMapEFS(tags))
    91  	if err != nil {
    92  		return err
    93  	}
    94  
    95  	var fs *efs.FileSystemDescription
    96  	for _, f := range describeResp.FileSystems {
    97  		if d.Id() == *f.FileSystemId {
    98  			fs = f
    99  			break
   100  		}
   101  	}
   102  	if fs == nil {
   103  		log.Printf("[WARN] EFS (%s) not found, removing from state", d.Id())
   104  		d.SetId("")
   105  		return nil
   106  	}
   107  
   108  	d.Set("creation_token", fs.CreationToken)
   109  	d.Set("performance_mode", fs.PerformanceMode)
   110  	d.Set("file_system_id", fs.FileSystemId)
   111  
   112  	return nil
   113  }