github.com/danp/terraform@v0.9.5-0.20170426144147-39d740081351/builtin/providers/ns1/resource_datasource.go (about)

     1  package ns1
     2  
     3  import (
     4  	"github.com/hashicorp/terraform/helper/schema"
     5  
     6  	ns1 "gopkg.in/ns1/ns1-go.v2/rest"
     7  	"gopkg.in/ns1/ns1-go.v2/rest/model/data"
     8  )
     9  
    10  func dataSourceResource() *schema.Resource {
    11  	return &schema.Resource{
    12  		Schema: map[string]*schema.Schema{
    13  			"id": &schema.Schema{
    14  				Type:     schema.TypeString,
    15  				Computed: true,
    16  			},
    17  			"name": &schema.Schema{
    18  				Type:     schema.TypeString,
    19  				Required: true,
    20  			},
    21  			"sourcetype": &schema.Schema{
    22  				Type:     schema.TypeString,
    23  				Required: true,
    24  				ForceNew: true,
    25  			},
    26  			"config": &schema.Schema{
    27  				Type:     schema.TypeMap,
    28  				Optional: true,
    29  			},
    30  		},
    31  		Create: DataSourceCreate,
    32  		Read:   DataSourceRead,
    33  		Update: DataSourceUpdate,
    34  		Delete: DataSourceDelete,
    35  	}
    36  }
    37  
    38  func dataSourceToResourceData(d *schema.ResourceData, s *data.Source) {
    39  	d.SetId(s.ID)
    40  	d.Set("name", s.Name)
    41  	d.Set("sourcetype", s.Type)
    42  	d.Set("config", s.Config)
    43  }
    44  
    45  // DataSourceCreate creates an ns1 datasource
    46  func DataSourceCreate(d *schema.ResourceData, meta interface{}) error {
    47  	client := meta.(*ns1.Client)
    48  	s := data.NewSource(d.Get("name").(string), d.Get("sourcetype").(string))
    49  	s.Config = d.Get("config").(map[string]interface{})
    50  	if _, err := client.DataSources.Create(s); err != nil {
    51  		return err
    52  	}
    53  	dataSourceToResourceData(d, s)
    54  	return nil
    55  }
    56  
    57  // DataSourceRead fetches info for the given datasource from ns1
    58  func DataSourceRead(d *schema.ResourceData, meta interface{}) error {
    59  	client := meta.(*ns1.Client)
    60  	s, _, err := client.DataSources.Get(d.Id())
    61  	if err != nil {
    62  		return err
    63  	}
    64  	dataSourceToResourceData(d, s)
    65  	return nil
    66  }
    67  
    68  // DataSourceDelete deteltes the given datasource from ns1
    69  func DataSourceDelete(d *schema.ResourceData, meta interface{}) error {
    70  	client := meta.(*ns1.Client)
    71  	_, err := client.DataSources.Delete(d.Id())
    72  	d.SetId("")
    73  	return err
    74  }
    75  
    76  // DataSourceUpdate updates the datasource with given parameters
    77  func DataSourceUpdate(d *schema.ResourceData, meta interface{}) error {
    78  	client := meta.(*ns1.Client)
    79  	s := data.NewSource(d.Get("name").(string), d.Get("sourcetype").(string))
    80  	s.ID = d.Id()
    81  	if _, err := client.DataSources.Update(s); err != nil {
    82  		return err
    83  	}
    84  	dataSourceToResourceData(d, s)
    85  	return nil
    86  }