Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions builtin/providers/nsone/provider.go
Original file line number Diff line number Diff line change
@@ -1,9 +1,12 @@
package nsone

import (
"github.com/ns1/ns1-go"
"net/http"

"github.com/hashicorp/terraform/helper/schema"
"github.com/hashicorp/terraform/terraform"

nsone "gopkg.in/ns1/ns1-go.v2/rest"
)

// Provider returns a terraform.ResourceProvider.
Expand Down Expand Up @@ -32,9 +35,10 @@ func Provider() terraform.ResourceProvider {
}

func nsoneConfigure(d *schema.ResourceData) (interface{}, error) {
n := nsone.New(d.Get("apikey").(string))
n.Debug()
n.RateLimitStrategySleep()
httpClient := &http.Client{}
n := nsone.NewClient(httpClient, nsone.SetAPIKey(d.Get("apikey").(string)))
// FIXME: n.Debug()
Copy link

@pashap pashap Sep 22, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

i wasnt sure what to do here either. v1 prints requests and responses when debug is enabled.

we can add a logger that logs every request with the following if that is what users would want.

    // Adds logging to each http request.
    doer := nsone.Decorate(httpClient, nsone.Logging(log.New(os.Stdout, "", log.LstdFlags)))
    client := nsone.NewClient(doer, nsone.SetAPIKey(k))

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this should also be tied to terraform's debug state

Copy link

@pashap pashap Sep 23, 2016

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, trying to find docs on terraform debug state now. We can add whatever logs to the requests/responses that we want with the decorator. my guess is that it should be logging both requests and responses. is their any documentation on the debug state?

// FIXME: n.RateLimitStrategySleep()
return n, nil
}

Expand Down
86 changes: 43 additions & 43 deletions builtin/providers/nsone/resource_apikey.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package nsone

import (
"github.com/ns1/ns1-go"
"github.com/hashicorp/terraform/helper/schema"

nsone "gopkg.in/ns1/ns1-go.v2/rest"
"gopkg.in/ns1/ns1-go.v2/rest/model/account"
)

func apikeyResource() *schema.Resource {
Expand Down Expand Up @@ -35,43 +37,43 @@ func apikeyResource() *schema.Resource {
}
}

func apikeyToResourceData(d *schema.ResourceData, u *nsone.Apikey) error {
d.SetId(u.Id)
d.Set("name", u.Name)
d.Set("key", u.Key)
d.Set("teams", u.Teams)
permissionsToResourceData(d, u.Permissions)
func apikeyToResourceData(d *schema.ResourceData, k *account.APIKey) error {
d.SetId(k.ID)
d.Set("name", k.Name)
d.Set("key", k.Key)
d.Set("teams", k.TeamIDs)
permissionsToResourceData(d, k.Permissions)
return nil
}

func resourceDataToPermissions(d *schema.ResourceData) nsone.PermissionsMap {
var p nsone.PermissionsMap
func resourceDataToPermissions(d *schema.ResourceData) account.PermissionsMap {
var p account.PermissionsMap
if v, ok := d.GetOk("dns_view_zones"); ok {
p.Dns.ViewZones = v.(bool)
p.DNS.ViewZones = v.(bool)
}
if v, ok := d.GetOk("dns_manage_zones"); ok {
p.Dns.ManageZones = v.(bool)
p.DNS.ManageZones = v.(bool)
}
if v, ok := d.GetOk("dns_zones_allow_by_default"); ok {
p.Dns.ZonesAllowByDefault = v.(bool)
p.DNS.ZonesAllowByDefault = v.(bool)
}
if v, ok := d.GetOk("dns_zones_deny"); ok {
denyRaw := v.([]interface{})
p.Dns.ZonesDeny = make([]string, len(denyRaw))
p.DNS.ZonesDeny = make([]string, len(denyRaw))
for i, deny := range denyRaw {
p.Dns.ZonesDeny[i] = deny.(string)
p.DNS.ZonesDeny[i] = deny.(string)
}
} else {
p.Dns.ZonesDeny = make([]string, 0)
p.DNS.ZonesDeny = make([]string, 0)
}
if v, ok := d.GetOk("dns_zones_allow"); ok {
allowRaw := v.([]interface{})
p.Dns.ZonesAllow = make([]string, len(allowRaw))
p.DNS.ZonesAllow = make([]string, len(allowRaw))
for i, allow := range allowRaw {
p.Dns.ZonesAllow[i] = allow.(string)
p.DNS.ZonesAllow[i] = allow.(string)
}
} else {
p.Dns.ZonesAllow = make([]string, 0)
p.DNS.ZonesAllow = make([]string, 0)
}
if v, ok := d.GetOk("data_push_to_datafeeds"); ok {
p.Data.PushToDatafeeds = v.(bool)
Expand Down Expand Up @@ -118,66 +120,64 @@ func resourceDataToPermissions(d *schema.ResourceData) nsone.PermissionsMap {
return p
}

func resourceDataToApikey(u *nsone.Apikey, d *schema.ResourceData) error {
u.Id = d.Id()
u.Name = d.Get("name").(string)
func resourceDataToApikey(k *account.APIKey, d *schema.ResourceData) error {
k.ID = d.Id()
k.Name = d.Get("name").(string)
if v, ok := d.GetOk("teams"); ok {
teamsRaw := v.([]interface{})
u.Teams = make([]string, len(teamsRaw))
k.TeamIDs = make([]string, len(teamsRaw))
for i, team := range teamsRaw {
u.Teams[i] = team.(string)
k.TeamIDs[i] = team.(string)
}
} else {
u.Teams = make([]string, 0)
k.TeamIDs = make([]string, 0)
}
u.Permissions = resourceDataToPermissions(d)
k.Permissions = resourceDataToPermissions(d)
return nil
}

// ApikeyCreate creates ns1 API key
func ApikeyCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*nsone.APIClient)
mj := nsone.Apikey{}
if err := resourceDataToApikey(&mj, d); err != nil {
client := meta.(*nsone.Client)
k := account.APIKey{}
if err := resourceDataToApikey(&k, d); err != nil {
return err
}
if err := client.CreateApikey(&mj); err != nil {
if _, err := client.APIKeys.Create(&k); err != nil {
return err
}
return apikeyToResourceData(d, &mj)
return apikeyToResourceData(d, &k)
}

// ApikeyRead reads API key from ns1
func ApikeyRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*nsone.APIClient)
mj, err := client.GetApikey(d.Id())
client := meta.(*nsone.Client)
k, _, err := client.APIKeys.Get(d.Id())
if err != nil {
return err
}
apikeyToResourceData(d, &mj)
return nil
return apikeyToResourceData(d, k)
}

//ApikeyDelete deletes the given ns1 api key
func ApikeyDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*nsone.APIClient)
err := client.DeleteApikey(d.Id())
client := meta.(*nsone.Client)
_, err := client.APIKeys.Delete(d.Id())
d.SetId("")
return err
}

//ApikeyUpdate updates the given api key in ns1
func ApikeyUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*nsone.APIClient)
mj := nsone.Apikey{
Id: d.Id(),
client := meta.(*nsone.Client)
k := account.APIKey{
ID: d.Id(),
}
if err := resourceDataToApikey(&mj, d); err != nil {
if err := resourceDataToApikey(&k, d); err != nil {
return err
}
if err := client.UpdateApikey(&mj); err != nil {
if _, err := client.APIKeys.Update(&k); err != nil {
return err
}
apikeyToResourceData(d, &mj)
return nil
return apikeyToResourceData(d, &k)
}
53 changes: 28 additions & 25 deletions builtin/providers/nsone/resource_datafeed.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package nsone

import (
"github.com/ns1/ns1-go"
"github.com/hashicorp/terraform/helper/schema"

nsone "gopkg.in/ns1/ns1-go.v2/rest"
"gopkg.in/ns1/ns1-go.v2/rest/model/data"
)

func dataFeedResource() *schema.Resource {
Expand Down Expand Up @@ -33,61 +35,62 @@ func dataFeedResource() *schema.Resource {
}
}

func dataFeedToResourceData(d *schema.ResourceData, df *nsone.DataFeed) {
d.SetId(df.Id)
d.Set("name", df.Name)
d.Set("config", df.Config)
func dataFeedToResourceData(d *schema.ResourceData, f *data.Feed) {
d.SetId(f.ID)
d.Set("name", f.Name)
d.Set("config", f.Config)
}

func resourceDataToDataFeed(d *schema.ResourceData) *nsone.DataFeed {
df := nsone.NewDataFeed(d.Get("source_id").(string))
df.Name = d.Get("name").(string)
config := make(map[string]string)
func resourceDataToDataFeed(d *schema.ResourceData) *data.Feed {
config := make(data.Config)
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  • investigate using the data.NewFeed() constructor

for k, v := range d.Get("config").(map[string]interface{}) {
config[k] = v.(string)
}
df.Config = config
return df
return &data.Feed{
Name: d.Get("name").(string),
Config: config,
SourceID: d.Get("source_id").(string),
}
}

// DataFeedCreate creates an ns1 datafeed
func DataFeedCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*nsone.APIClient)
df := resourceDataToDataFeed(d)
if err := client.CreateDataFeed(df); err != nil {
client := meta.(*nsone.Client)
f := resourceDataToDataFeed(d)
if _, err := client.DataFeeds.Create(d.Get("source_id").(string), f); err != nil {
return err
}
dataFeedToResourceData(d, df)
dataFeedToResourceData(d, f)
return nil
}

// DataFeedRead reads the datafeed for the given ID from ns1
func DataFeedRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*nsone.APIClient)
df, err := client.GetDataFeed(d.Get("source_id").(string), d.Id())
client := meta.(*nsone.Client)
f, _, err := client.DataFeeds.Get(d.Get("source_id").(string), d.Id())
if err != nil {
return err
}
dataFeedToResourceData(d, df)
dataFeedToResourceData(d, f)
return nil
}

// DataFeedDelete delets the given datafeed from ns1
func DataFeedDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*nsone.APIClient)
err := client.DeleteDataFeed(d.Get("source_id").(string), d.Id())
client := meta.(*nsone.Client)
_, err := client.DataFeeds.Delete(d.Get("source_id").(string), d.Id())
d.SetId("")
return err
}

// DataFeedUpdate updates the given datafeed with modified parameters
func DataFeedUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*nsone.APIClient)
df := resourceDataToDataFeed(d)
df.Id = d.Id()
if err := client.UpdateDataFeed(df); err != nil {
client := meta.(*nsone.Client)
f := resourceDataToDataFeed(d)
f.ID = d.Id()
if _, err := client.DataFeeds.Update(d.Get("source_id").(string), f); err != nil {
return err
}
dataFeedToResourceData(d, df)
dataFeedToResourceData(d, f)
return nil
}
26 changes: 14 additions & 12 deletions builtin/providers/nsone/resource_datafeed_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,15 @@ import (
"fmt"
"testing"

"github.com/ns1/ns1-go"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"

nsone "gopkg.in/ns1/ns1-go.v2/rest"
"gopkg.in/ns1/ns1-go.v2/rest/model/data"
)

func TestAccDataFeed_basic(t *testing.T) {
var dataFeed nsone.DataFeed
var dataFeed data.Feed
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Expand All @@ -29,7 +31,7 @@ func TestAccDataFeed_basic(t *testing.T) {
}

func TestAccDataFeed_updated(t *testing.T) {
var dataFeed nsone.DataFeed
var dataFeed data.Feed
resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
Providers: testAccProviders,
Expand Down Expand Up @@ -76,7 +78,7 @@ func testAccCheckDataFeedState(key, value string) resource.TestCheckFunc {
}
}

func testAccCheckDataFeedExists(n string, dsrc string, dataFeed *nsone.DataFeed) resource.TestCheckFunc {
func testAccCheckDataFeedExists(n string, dsrc string, dataFeed *data.Feed) resource.TestCheckFunc {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[n]
ds, ok := s.RootModule().Resources[dsrc]
Expand All @@ -93,9 +95,9 @@ func testAccCheckDataFeedExists(n string, dsrc string, dataFeed *nsone.DataFeed)
return fmt.Errorf("NoID is set for the datasource")
}

client := testAccProvider.Meta().(*nsone.APIClient)
client := testAccProvider.Meta().(*nsone.Client)

foundFeed, err := client.GetDataFeed(ds.Primary.Attributes["id"], rs.Primary.Attributes["id"])
foundFeed, _, err := client.DataFeeds.Get(ds.Primary.Attributes["id"], rs.Primary.Attributes["id"])

p := rs.Primary

Expand All @@ -114,7 +116,7 @@ func testAccCheckDataFeedExists(n string, dsrc string, dataFeed *nsone.DataFeed)
}

func testAccCheckDataFeedDestroy(s *terraform.State) error {
client := testAccProvider.Meta().(*nsone.APIClient)
client := testAccProvider.Meta().(*nsone.Client)

var dataFeedID string
var dataSourceID string
Expand All @@ -130,16 +132,16 @@ func testAccCheckDataFeedDestroy(s *terraform.State) error {
}
}

df, _ := client.GetDataFeed(dataSourceID, dataFeedID)
df, _, _ := client.DataFeeds.Get(dataSourceID, dataFeedID)

if df.Id != "" {
return fmt.Errorf("DataFeed still exists")
if df != nil {
return fmt.Errorf("DataFeed still exists: %#v", df)
}

return nil
}

func testAccCheckDataFeedAttributes(dataFeed *nsone.DataFeed) resource.TestCheckFunc {
func testAccCheckDataFeedAttributes(dataFeed *data.Feed) resource.TestCheckFunc {
return func(s *terraform.State) error {

if dataFeed.Config["label"] != "exampledc2" {
Expand All @@ -150,7 +152,7 @@ func testAccCheckDataFeedAttributes(dataFeed *nsone.DataFeed) resource.TestCheck
}
}

func testAccCheckDataFeedAttributesUpdated(dataFeed *nsone.DataFeed) resource.TestCheckFunc {
func testAccCheckDataFeedAttributesUpdated(dataFeed *data.Feed) resource.TestCheckFunc {
return func(s *terraform.State) error {

if dataFeed.Config["label"] != "exampledc3" {
Expand Down
Loading