Skip to content

Commit

Permalink
[WIP] Use provider datacenter as default when the agent cannot be rea…
Browse files Browse the repository at this point in the history
…ched

According to the current documentation, the datacenter attribute should
default to the provider configuration and if it is not set to the
datacenter of the agent terraform is connected to:

	* `datacenter` - (Optional) The datacenter to use. This overrides the datacenter in the
	  provider setup and the agent's default datacenter.

This is not what the code actually does and the datacenter in the provider
configuration is not used most of the time.

Since changing the plugin behavior to what is actually documented may
break code relying on the current one. To keep backward compatibility,
we can change the documentation to:

	* `datacenter` - (Optional) The datacenter to use. This overrides the
	  agent's default datacenter and the datacenter in the provider setup.

and fall back to the provider configuration only when the datacenter of
the agent to which terraform is connected to can not be read (when ACL
is enabled and the token used by terraform does not have permission to
read /agent/self for example).

The change is very noisy as it requires to change the `ConfigureFunc` of
the provider from `(*consulapi.Client, error)` to `(*Config, error)` and
update all places where was being used.

I'm not sure how to write a test for this change as no other test requires
ACL to be enabled.

Discussion: hashicorp#57
  • Loading branch information
Rémi Lapeyre committed Dec 18, 2018
1 parent 53c97f4 commit 4de49fa
Show file tree
Hide file tree
Showing 33 changed files with 270 additions and 96 deletions.
7 changes: 5 additions & 2 deletions consul/data_source_consul_agent_config.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ package consul

import (
"fmt"
consulapi "github.com/hashicorp/consul/api"

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

Expand Down Expand Up @@ -51,7 +51,10 @@ func dataSourceConsulAgentConfig() *schema.Resource {
}

func dataSourceConsulAgentConfigRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
agentSelf, err := client.Agent().Self()
if err != nil {
return err
Expand Down
6 changes: 4 additions & 2 deletions consul/data_source_consul_agent_self.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"strconv"
"time"

consulapi "github.com/hashicorp/consul/api"
"github.com/hashicorp/errwrap"
"github.com/hashicorp/terraform/helper/schema"
)
Expand Down Expand Up @@ -735,7 +734,10 @@ func dataSourceConsulAgentSelf() *schema.Resource {
}

func dataSourceConsulAgentSelfRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
info, err := client.Agent().Self()
if err != nil {
return err
Expand Down
8 changes: 5 additions & 3 deletions consul/data_source_consul_key_prefix.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package consul

import (
consulapi "github.com/hashicorp/consul/api"
"github.com/hashicorp/terraform/helper/schema"
)

Expand Down Expand Up @@ -67,10 +66,13 @@ func dataSourceConsulKeyPrefix() *schema.Resource {
}

func dataSourceConsulKeyPrefixRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
kv := client.KV()
token := d.Get("token").(string)
dc, err := getDC(d, client)
dc, err := getDC(d, client, meta)
if err != nil {
return err
}
Expand Down
8 changes: 5 additions & 3 deletions consul/data_source_consul_keys.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package consul

import (
consulapi "github.com/hashicorp/consul/api"
"github.com/hashicorp/terraform/helper/schema"
)

Expand Down Expand Up @@ -54,10 +53,13 @@ func dataSourceConsulKeys() *schema.Resource {
}

func dataSourceConsulKeysRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
kv := client.KV()
token := d.Get("token").(string)
dc, err := getDC(d, client)
dc, err := getDC(d, client, meta)
if err != nil {
return err
}
Expand Down
8 changes: 5 additions & 3 deletions consul/data_source_consul_nodes.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ package consul
import (
"fmt"

consulapi "github.com/hashicorp/consul/api"
"github.com/hashicorp/errwrap"
"github.com/hashicorp/terraform/helper/schema"
)
Expand Down Expand Up @@ -95,10 +94,13 @@ func dataSourceConsulNodes() *schema.Resource {
}

func dataSourceConsulNodesRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}

// Parse out data source filters to populate Consul's query options
queryOpts, err := getQueryOpts(d, client)
queryOpts, err := getQueryOpts(d, client, meta)
if err != nil {
return errwrap.Wrapf("unable to get query options for fetching catalog nodes: {{err}}", err)
}
Expand Down
8 changes: 5 additions & 3 deletions consul/data_source_consul_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"sort"

consulapi "github.com/hashicorp/consul/api"
"github.com/hashicorp/errwrap"
"github.com/hashicorp/terraform/helper/schema"
)
Expand Down Expand Up @@ -136,10 +135,13 @@ func dataSourceConsulService() *schema.Resource {
}

func dataSourceConsulServiceRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}

// Parse out data source filters to populate Consul's query options
queryOpts, err := getQueryOpts(d, client)
queryOpts, err := getQueryOpts(d, client, meta)
if err != nil {
return errwrap.Wrapf("unable to get query options for fetching catalog services: {{err}}", err)
}
Expand Down
8 changes: 5 additions & 3 deletions consul/data_source_consul_services.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"sort"
"strings"

consulapi "github.com/hashicorp/consul/api"
"github.com/hashicorp/errwrap"
"github.com/hashicorp/terraform/helper/schema"
)
Expand Down Expand Up @@ -59,10 +58,13 @@ func dataSourceConsulServices() *schema.Resource {
}

func dataSourceConsulServicesRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}

// Parse out data source filters to populate Consul's query options
queryOpts, err := getQueryOpts(d, client)
queryOpts, err := getQueryOpts(d, client, meta)
if err != nil {
return errwrap.Wrapf("unable to get query options for fetching catalog services: {{err}}", err)
}
Expand Down
4 changes: 2 additions & 2 deletions consul/query_options.go
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ var schemaQueryOpts = &schema.Schema{
},
}

func getQueryOpts(d *schema.ResourceData, client *consulapi.Client) (*consulapi.QueryOptions, error) {
func getQueryOpts(d *schema.ResourceData, client *consulapi.Client, meta interface{}) (*consulapi.QueryOptions, error) {
queryOpts := &consulapi.QueryOptions{}

if v, ok := d.GetOk(queryOptAllowStale); ok {
Expand All @@ -81,7 +81,7 @@ func getQueryOpts(d *schema.ResourceData, client *consulapi.Client) (*consulapi.
}

if queryOpts.Datacenter == "" {
dc, err := getDC(d, client)
dc, err := getDC(d, client, meta)
if err != nil {
return nil, err
}
Expand Down
15 changes: 12 additions & 3 deletions consul/resource_consul_agent_service.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,10 @@ func resourceConsulAgentService() *schema.Resource {
}

func resourceConsulAgentServiceCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
agent := client.Agent()

name := d.Get("name").(string)
Expand Down Expand Up @@ -94,7 +97,10 @@ func resourceConsulAgentServiceCreate(d *schema.ResourceData, meta interface{})
}

func resourceConsulAgentServiceRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
agent := client.Agent()

name := d.Get("name").(string)
Expand All @@ -120,7 +126,10 @@ func resourceConsulAgentServiceRead(d *schema.ResourceData, meta interface{}) er
}

func resourceConsulAgentServiceDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
catalog := client.Agent()

id := d.Id()
Expand Down
13 changes: 10 additions & 3 deletions consul/resource_consul_agent_service_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"testing"

consulapi "github.com/hashicorp/consul/api"
"github.com/hashicorp/terraform/helper/resource"
"github.com/hashicorp/terraform/terraform"
)
Expand Down Expand Up @@ -33,7 +32,11 @@ func TestAccConsulAgentService_basic(t *testing.T) {
}

func testAccCheckConsulAgentServiceDestroy(s *terraform.State) error {
agent := testAccProvider.Meta().(*consulapi.Client).Agent()
client, err := testAccProvider.Meta().(*Config).Client()
if err != nil {
return err
}
agent := client.Agent()
services, err := agent.Services()
if err != nil {
return fmt.Errorf("Could not retrieve services: %#v", err)
Expand All @@ -47,7 +50,11 @@ func testAccCheckConsulAgentServiceDestroy(s *terraform.State) error {

func testAccCheckConsulAgentServiceExists() resource.TestCheckFunc {
return func(s *terraform.State) error {
agent := testAccProvider.Meta().(*consulapi.Client).Agent()
client, err := testAccProvider.Meta().(*Config).Client()
if err != nil {
return err
}
agent := client.Agent()
services, err := agent.Services()
if err != nil {
return err
Expand Down
19 changes: 14 additions & 5 deletions consul/resource_consul_catalog_entry.go
Original file line number Diff line number Diff line change
Expand Up @@ -117,15 +117,18 @@ func resourceConsulCatalogEntryServicesHash(v interface{}) int {
}

func resourceConsulCatalogEntryCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
catalog := client.Catalog()

var dc string
if v, ok := d.GetOk("datacenter"); ok {
dc = v.(string)
} else {
var err error
if dc, err = getDC(d, client); err != nil {
if dc, err = getDC(d, client, meta); err != nil {
return err
}
}
Expand Down Expand Up @@ -211,7 +214,10 @@ func resourceConsulCatalogEntryCreate(d *schema.ResourceData, meta interface{})
}

func resourceConsulCatalogEntryRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
catalog := client.Catalog()

// Get the DC, error if not available.
Expand All @@ -237,15 +243,18 @@ func resourceConsulCatalogEntryRead(d *schema.ResourceData, meta interface{}) er
}

func resourceConsulCatalogEntryDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
catalog := client.Catalog()

var dc string
if v, ok := d.GetOk("datacenter"); ok {
dc = v.(string)
} else {
var err error
if dc, err = getDC(d, client); err != nil {
if dc, err = getDC(d, client, meta); err != nil {
return err
}
}
Expand Down
20 changes: 16 additions & 4 deletions consul/resource_consul_catalog_entry_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,11 @@ func TestAccConsulCatalogEntry_extremove(t *testing.T) {
}

func testAccCheckConsulCatalogEntryDestroy(s *terraform.State) error {
catalog := testAccProvider.Meta().(*consulapi.Client).Catalog()
client, err := testAccProvider.Meta().(*Config).Client()
if err != nil {
return err
}
catalog := client.Catalog()
qOpts := consulapi.QueryOptions{}
services, _, err := catalog.Services(&qOpts)
if err != nil {
Expand All @@ -79,13 +83,17 @@ func testAccCheckConsulCatalogEntryDestroy(s *terraform.State) error {

func testAccCheckConsulCatalogEntryDeregister(node string) resource.TestCheckFunc {
return func(s *terraform.State) error {
catalog := testAccProvider.Meta().(*consulapi.Client).Catalog()
client, err := testAccProvider.Meta().(*Config).Client()
if err != nil {
return err
}
catalog := client.Catalog()
wOpts := consulapi.WriteOptions{}

deregistration := consulapi.CatalogDeregistration{
Node: node,
}
_, err := catalog.Deregister(&deregistration, &wOpts)
_, err = catalog.Deregister(&deregistration, &wOpts)
if err != nil {
return err
}
Expand All @@ -105,7 +113,11 @@ func testAccCheckConsulCatalogEntryDeregister(node string) resource.TestCheckFun

func testAccCheckConsulCatalogEntryExists() resource.TestCheckFunc {
return func(s *terraform.State) error {
catalog := testAccProvider.Meta().(*consulapi.Client).Catalog()
client, err := testAccProvider.Meta().(*Config).Client()
if err != nil {
return err
}
catalog := client.Catalog()
qOpts := consulapi.QueryOptions{}
services, _, err := catalog.Services(&qOpts)
if err != nil {
Expand Down
20 changes: 16 additions & 4 deletions consul/resource_consul_intention.go
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,10 @@ func resourceConsulIntention() *schema.Resource {
}

func resourceConsulIntentionCreate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
connect := client.Connect()

sourceName := d.Get("source_name").(string)
Expand Down Expand Up @@ -104,7 +107,10 @@ func resourceConsulIntentionCreate(d *schema.ResourceData, meta interface{}) err
}

func resourceConsulIntentionUpdate(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
connect := client.Connect()

sourceName := d.Get("source_name").(string)
Expand Down Expand Up @@ -156,7 +162,10 @@ func resourceConsulIntentionUpdate(d *schema.ResourceData, meta interface{}) err
}

func resourceConsulIntentionRead(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
connect := client.Connect()

dc := ""
Expand All @@ -182,7 +191,10 @@ func resourceConsulIntentionRead(d *schema.ResourceData, meta interface{}) error
}

func resourceConsulIntentionDelete(d *schema.ResourceData, meta interface{}) error {
client := meta.(*consulapi.Client)
client, err := meta.(*Config).Client()
if err != nil {
return err
}
connect := client.Connect()
id := d.Id()

Expand Down
Loading

0 comments on commit 4de49fa

Please sign in to comment.