-
Notifications
You must be signed in to change notification settings - Fork 9.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'apparentlymart-influxdb-provider'
Closes #3478
- Loading branch information
Showing
21 changed files
with
3,161 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
package main | ||
|
||
import ( | ||
"github.com/hashicorp/terraform/builtin/providers/influxdb" | ||
"github.com/hashicorp/terraform/plugin" | ||
) | ||
|
||
func main() { | ||
plugin.Serve(&plugin.ServeOpts{ | ||
ProviderFunc: influxdb.Provider, | ||
}) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
package main |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
package influxdb | ||
|
||
import ( | ||
"fmt" | ||
"net/url" | ||
"strings" | ||
|
||
"github.com/hashicorp/terraform/helper/schema" | ||
"github.com/hashicorp/terraform/terraform" | ||
"github.com/influxdata/influxdb/client" | ||
) | ||
|
||
var quoteReplacer = strings.NewReplacer(`"`, `\"`) | ||
|
||
// Provider returns a terraform.ResourceProvider. | ||
func Provider() terraform.ResourceProvider { | ||
return &schema.Provider{ | ||
ResourcesMap: map[string]*schema.Resource{ | ||
"influxdb_database": ResourceDatabase(), | ||
}, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
"url": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Optional: true, | ||
DefaultFunc: schema.EnvDefaultFunc( | ||
"INFLUXDB_URL", "http://localhost:8086/", | ||
), | ||
}, | ||
"username": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Optional: true, | ||
DefaultFunc: schema.EnvDefaultFunc("INFLUXDB_USERNAME", ""), | ||
}, | ||
"password": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Optional: true, | ||
DefaultFunc: schema.EnvDefaultFunc("INFLUXDB_PASSWORD", ""), | ||
}, | ||
}, | ||
|
||
ConfigureFunc: Configure, | ||
} | ||
} | ||
|
||
func Configure(d *schema.ResourceData) (interface{}, error) { | ||
url, err := url.Parse(d.Get("url").(string)) | ||
if err != nil { | ||
return nil, fmt.Errorf("invalid InfluxDB URL: %s", err) | ||
} | ||
|
||
config := client.Config{ | ||
URL: *url, | ||
Username: d.Get("username").(string), | ||
Password: d.Get("password").(string), | ||
} | ||
|
||
conn, err := client.NewClient(config) | ||
if err != nil { | ||
return nil, err | ||
} | ||
|
||
_, _, err = conn.Ping() | ||
if err != nil { | ||
return nil, fmt.Errorf("error pinging server: %s", err) | ||
} | ||
|
||
return conn, nil | ||
} | ||
|
||
func quoteIdentifier(ident string) string { | ||
return fmt.Sprintf(`"%s"`, quoteReplacer.Replace(ident)) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
package influxdb | ||
|
||
import ( | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform/helper/schema" | ||
"github.com/hashicorp/terraform/terraform" | ||
) | ||
|
||
// To run these acceptance tests, you will need an InfluxDB server. | ||
// If you download an InfluxDB distribution and run it with its default | ||
// settings, on the same host where the tests are being run, then these tests | ||
// should work with no further configuration. | ||
// | ||
// To run the tests against a remote InfluxDB server, set the INFLUXDB_URL, | ||
// INFLUXDB_USERNAME and INFLUXDB_PASSWORD environment variables. | ||
|
||
var testAccProviders map[string]terraform.ResourceProvider | ||
var testAccProvider *schema.Provider | ||
|
||
func init() { | ||
testAccProvider = Provider().(*schema.Provider) | ||
testAccProviders = map[string]terraform.ResourceProvider{ | ||
"influxdb": testAccProvider, | ||
} | ||
} | ||
|
||
func TestProvider(t *testing.T) { | ||
if err := Provider().(*schema.Provider).InternalValidate(); err != nil { | ||
t.Fatalf("err: %s", err) | ||
} | ||
} | ||
|
||
func TestProvider_impl(t *testing.T) { | ||
var _ terraform.ResourceProvider = Provider() | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,99 @@ | ||
package influxdb | ||
|
||
import ( | ||
"fmt" | ||
|
||
"github.com/hashicorp/terraform/helper/schema" | ||
"github.com/influxdata/influxdb/client" | ||
) | ||
|
||
func ResourceDatabase() *schema.Resource { | ||
return &schema.Resource{ | ||
Create: CreateDatabase, | ||
Read: ReadDatabase, | ||
Delete: DeleteDatabase, | ||
|
||
Schema: map[string]*schema.Schema{ | ||
"name": &schema.Schema{ | ||
Type: schema.TypeString, | ||
Required: true, | ||
ForceNew: true, | ||
}, | ||
}, | ||
} | ||
} | ||
|
||
func CreateDatabase(d *schema.ResourceData, meta interface{}) error { | ||
conn := meta.(*client.Client) | ||
|
||
name := d.Get("name").(string) | ||
queryStr := fmt.Sprintf("CREATE DATABASE %s", quoteIdentifier(name)) | ||
query := client.Query{ | ||
Command: queryStr, | ||
} | ||
|
||
resp, err := conn.Query(query) | ||
if err != nil { | ||
return err | ||
} | ||
if resp.Err != nil { | ||
return resp.Err | ||
} | ||
|
||
d.SetId(name) | ||
|
||
return nil | ||
} | ||
|
||
func ReadDatabase(d *schema.ResourceData, meta interface{}) error { | ||
conn := meta.(*client.Client) | ||
name := d.Id() | ||
|
||
// InfluxDB doesn't have a command to check the existence of a single | ||
// database, so we instead must read the list of all databases and see | ||
// if ours is present in it. | ||
query := client.Query{ | ||
Command: "SHOW DATABASES", | ||
} | ||
|
||
resp, err := conn.Query(query) | ||
if err != nil { | ||
return err | ||
} | ||
if resp.Err != nil { | ||
return resp.Err | ||
} | ||
|
||
for _, result := range resp.Results[0].Series[0].Values { | ||
if result[0] == name { | ||
return nil | ||
} | ||
} | ||
|
||
// If we fell out here then we didn't find our database in the list. | ||
d.SetId("") | ||
|
||
return nil | ||
} | ||
|
||
func DeleteDatabase(d *schema.ResourceData, meta interface{}) error { | ||
conn := meta.(*client.Client) | ||
name := d.Id() | ||
|
||
queryStr := fmt.Sprintf("DROP DATABASE %s", quoteIdentifier(name)) | ||
query := client.Query{ | ||
Command: queryStr, | ||
} | ||
|
||
resp, err := conn.Query(query) | ||
if err != nil { | ||
return err | ||
} | ||
if resp.Err != nil { | ||
return resp.Err | ||
} | ||
|
||
d.SetId("") | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
package influxdb | ||
|
||
import ( | ||
"testing" | ||
|
||
"github.com/hashicorp/terraform/helper/resource" | ||
) | ||
|
||
func TestAccDatabase(t *testing.T) { | ||
resource.Test(t, resource.TestCase{ | ||
Providers: testAccProviders, | ||
Steps: []resource.TestStep{ | ||
resource.TestStep{ | ||
Config: testAccDatabaseConfig, | ||
Check: resource.ComposeTestCheckFunc( | ||
resource.TestCheckResourceAttr( | ||
"influxdb_database.test", "name", "terraform-test", | ||
), | ||
), | ||
}, | ||
}, | ||
}) | ||
} | ||
|
||
var testAccDatabaseConfig = ` | ||
resource "influxdb_database" "test" { | ||
name = "terraform-test" | ||
} | ||
` |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
27 changes: 27 additions & 0 deletions
27
vendor/github.com/influxdata/influxdb/LICENSE_OF_DEPENDENCIES.md
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.