-
Notifications
You must be signed in to change notification settings - Fork 24
/
provider.go
67 lines (51 loc) · 1.63 KB
/
provider.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package config
import (
"reflect"
"github.com/jumppad-labs/hclconfig/types"
"github.com/jumppad-labs/jumppad/pkg/clients"
sdk "github.com/jumppad-labs/plugin-sdk"
)
// Provider defines an interface to be implemented by providers
//
//go:generate mockery --name Provider --filename provider.go
type Provider interface {
// Init is called when the provider is created, it is passed a logger that
// can be used for any logging purposes. Any other clients must be created
// by the provider
Init(types.Resource, sdk.Logger) error
// Create is called when a resource does not exist or creation has previously
// failed and 'up' is run
Create() error
// Destroy is called when a resource is failed or created and 'down' is run
Destroy() error
// Refresh is called when a resource is created and 'up' is run
Refresh() error
// Changed returns if a resource has changed since the last run
Changed() (bool, error)
// Lookup is a utility to determine the existence of a resource
Lookup() ([]string, error)
}
// ConfigWrapper allows the provider config to be deserialized to a type
type ConfigWrapper struct {
Type string
Value interface{}
}
type Providers interface {
GetProvider(c types.Resource) Provider
}
type ProvidersImpl struct {
clients *clients.Clients
}
func NewProviders(c *clients.Clients) Providers {
return &ProvidersImpl{c}
}
func (p *ProvidersImpl) GetProvider(r types.Resource) Provider {
// find the type
if t, ok := registeredProviders[r.Metadata().ResourceType]; ok {
ptr := reflect.New(reflect.TypeOf(t).Elem())
prov := ptr.Interface().(Provider)
prov.Init(r, p.clients.Logger)
return prov
}
return nil
}