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

     1  package influxdb
     2  
     3  import (
     4  	"fmt"
     5  
     6  	"github.com/hashicorp/terraform/helper/schema"
     7  	"github.com/influxdata/influxdb/client"
     8  )
     9  
    10  func resourceDatabase() *schema.Resource {
    11  	return &schema.Resource{
    12  		Create: createDatabase,
    13  		Read:   readDatabase,
    14  		Delete: deleteDatabase,
    15  
    16  		Schema: map[string]*schema.Schema{
    17  			"name": &schema.Schema{
    18  				Type:     schema.TypeString,
    19  				Required: true,
    20  				ForceNew: true,
    21  			},
    22  		},
    23  	}
    24  }
    25  
    26  func createDatabase(d *schema.ResourceData, meta interface{}) error {
    27  	conn := meta.(*client.Client)
    28  
    29  	name := d.Get("name").(string)
    30  	queryStr := fmt.Sprintf("CREATE DATABASE %s", quoteIdentifier(name))
    31  	query := client.Query{
    32  		Command: queryStr,
    33  	}
    34  
    35  	resp, err := conn.Query(query)
    36  	if err != nil {
    37  		return err
    38  	}
    39  	if resp.Err != nil {
    40  		return resp.Err
    41  	}
    42  
    43  	d.SetId(name)
    44  
    45  	return nil
    46  }
    47  
    48  func readDatabase(d *schema.ResourceData, meta interface{}) error {
    49  	conn := meta.(*client.Client)
    50  	name := d.Id()
    51  
    52  	// InfluxDB doesn't have a command to check the existence of a single
    53  	// database, so we instead must read the list of all databases and see
    54  	// if ours is present in it.
    55  	query := client.Query{
    56  		Command: "SHOW DATABASES",
    57  	}
    58  
    59  	resp, err := conn.Query(query)
    60  	if err != nil {
    61  		return err
    62  	}
    63  	if resp.Err != nil {
    64  		return resp.Err
    65  	}
    66  
    67  	for _, result := range resp.Results[0].Series[0].Values {
    68  		if result[0] == name {
    69  			return nil
    70  		}
    71  	}
    72  
    73  	// If we fell out here then we didn't find our database in the list.
    74  	d.SetId("")
    75  
    76  	return nil
    77  }
    78  
    79  func deleteDatabase(d *schema.ResourceData, meta interface{}) error {
    80  	conn := meta.(*client.Client)
    81  	name := d.Id()
    82  
    83  	queryStr := fmt.Sprintf("DROP DATABASE %s", quoteIdentifier(name))
    84  	query := client.Query{
    85  		Command: queryStr,
    86  	}
    87  
    88  	resp, err := conn.Query(query)
    89  	if err != nil {
    90  		return err
    91  	}
    92  	if resp.Err != nil {
    93  		return resp.Err
    94  	}
    95  
    96  	d.SetId("")
    97  
    98  	return nil
    99  }