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 }