terraform: Resources method for providers
This commit is contained in:
parent
9895f8162f
commit
0c1a341d90
|
@ -1,8 +1,8 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/hashicorp/terraform/plugin"
|
|
||||||
"github.com/hashicorp/terraform/builtin/providers/aws"
|
"github.com/hashicorp/terraform/builtin/providers/aws"
|
||||||
|
"github.com/hashicorp/terraform/plugin"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
package main
|
package main
|
||||||
|
|
|
@ -1,8 +1,16 @@
|
||||||
package aws
|
package aws
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/hashicorp/terraform/terraform"
|
||||||
|
)
|
||||||
|
|
||||||
type ResourceProvider struct {
|
type ResourceProvider struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *ResourceProvider) Configure(map[string]interface{}) ([]string, error) {
|
func (p *ResourceProvider) Configure(map[string]interface{}) ([]string, error) {
|
||||||
return nil, nil
|
return nil, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *ResourceProvider) Resources() []terraform.ResourceType {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -26,6 +26,18 @@ func (p *ResourceProvider) Configure(c map[string]interface{}) ([]string, error)
|
||||||
return resp.Warnings, err
|
return resp.Warnings, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *ResourceProvider) Resources() []terraform.ResourceType {
|
||||||
|
var result []terraform.ResourceType
|
||||||
|
|
||||||
|
err := p.Client.Call(p.Name+".Resources", new(interface{}), &result)
|
||||||
|
if err != nil {
|
||||||
|
// TODO: panic, log, what?
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
// ResourceProviderServer is a net/rpc compatible structure for serving
|
// ResourceProviderServer is a net/rpc compatible structure for serving
|
||||||
// a ResourceProvider. This should not be used directly.
|
// a ResourceProvider. This should not be used directly.
|
||||||
type ResourceProviderServer struct {
|
type ResourceProviderServer struct {
|
||||||
|
@ -47,3 +59,10 @@ func (s *ResourceProviderServer) Configure(
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *ResourceProviderServer) Resources(
|
||||||
|
nothing interface{},
|
||||||
|
result *[]terraform.ResourceType) error {
|
||||||
|
*result = s.Provider.Resources()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
|
@ -95,3 +95,29 @@ func TestResourceProvider_configure_warnings(t *testing.T) {
|
||||||
t.Fatalf("bad: %#v", e)
|
t.Fatalf("bad: %#v", e)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestResourceProvider_resources(t *testing.T) {
|
||||||
|
p := new(terraform.MockResourceProvider)
|
||||||
|
client, server := testClientServer(t)
|
||||||
|
name, err := Register(server, p)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("err: %s", err)
|
||||||
|
}
|
||||||
|
provider := &ResourceProvider{Client: client, Name: name}
|
||||||
|
|
||||||
|
expected := []terraform.ResourceType{
|
||||||
|
{"foo"},
|
||||||
|
{"bar"},
|
||||||
|
}
|
||||||
|
|
||||||
|
p.ResourcesReturn = expected
|
||||||
|
|
||||||
|
// Resources
|
||||||
|
result := provider.Resources()
|
||||||
|
if !p.ResourcesCalled {
|
||||||
|
t.Fatal("resources should be called")
|
||||||
|
}
|
||||||
|
if !reflect.DeepEqual(result, expected) {
|
||||||
|
t.Fatalf("bad: %#v", result)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -12,7 +12,7 @@ type ResourceProvider interface {
|
||||||
|
|
||||||
// Resources returns all the available resource types that this provider
|
// Resources returns all the available resource types that this provider
|
||||||
// knows how to manage.
|
// knows how to manage.
|
||||||
//Resources() []ResourceType
|
Resources() []ResourceType
|
||||||
}
|
}
|
||||||
|
|
||||||
// ResourceType is a type of resource that a resource provider can manage.
|
// ResourceType is a type of resource that a resource provider can manage.
|
||||||
|
|
|
@ -7,6 +7,8 @@ type MockResourceProvider struct {
|
||||||
ConfigureConfig map[string]interface{}
|
ConfigureConfig map[string]interface{}
|
||||||
ConfigureReturnWarnings []string
|
ConfigureReturnWarnings []string
|
||||||
ConfigureReturnError error
|
ConfigureReturnError error
|
||||||
|
ResourcesCalled bool
|
||||||
|
ResourcesReturn []ResourceType
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *MockResourceProvider) Configure(c map[string]interface{}) ([]string, error) {
|
func (p *MockResourceProvider) Configure(c map[string]interface{}) ([]string, error) {
|
||||||
|
@ -14,3 +16,8 @@ func (p *MockResourceProvider) Configure(c map[string]interface{}) ([]string, er
|
||||||
p.ConfigureConfig = c
|
p.ConfigureConfig = c
|
||||||
return p.ConfigureReturnWarnings, p.ConfigureReturnError
|
return p.ConfigureReturnWarnings, p.ConfigureReturnError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (p *MockResourceProvider) Resources() []ResourceType {
|
||||||
|
p.ResourcesCalled = true
|
||||||
|
return p.ResourcesReturn
|
||||||
|
}
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
package terraform
|
||||||
|
|
||||||
|
import (
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestMockResourceProvider_impl(t *testing.T) {
|
||||||
|
var _ ResourceProvider = new(MockResourceProvider)
|
||||||
|
}
|
Loading…
Reference in New Issue