terraform/state/remote/remote.go

56 lines
1.4 KiB
Go
Raw Normal View History

2015-02-21 20:52:55 +01:00
package remote
2015-02-22 00:13:28 +01:00
import (
"fmt"
"github.com/hashicorp/terraform/state"
2015-02-22 00:13:28 +01:00
)
2015-02-21 20:52:55 +01:00
// Client is the interface that must be implemented for a remote state
// driver. It supports dumb put/get/delete, and the higher level structs
// handle persisting the state properly here.
type Client interface {
Get() (*Payload, error)
Put([]byte) error
Delete() error
}
// ClientLocker is an optional interface that allows a remote state
// backend to enable state lock/unlock.
type ClientLocker interface {
Client
state.Locker
}
2015-02-21 20:52:55 +01:00
// Payload is the return value from the remote state storage.
type Payload struct {
MD5 []byte
Data []byte
}
// Factory is the factory function to create a remote client.
type Factory func(map[string]string) (Client, error)
2015-02-22 00:13:28 +01:00
// NewClient returns a new Client with the given type and configuration.
// The client is looked up in the BuiltinClients variable.
func NewClient(t string, conf map[string]string) (Client, error) {
f, ok := BuiltinClients[t]
if !ok {
return nil, fmt.Errorf("unknown remote client type: %s", t)
}
return f(conf)
}
// BuiltinClients is the list of built-in clients that can be used with
// NewClient.
var BuiltinClients = map[string]Factory{
"artifactory": artifactoryFactory,
"azure": azureFactory,
2015-10-29 14:33:09 +01:00
"etcd": etcdFactory,
"gcs": gcsFactory,
2015-10-29 14:33:09 +01:00
"http": httpFactory,
"local": fileFactory,
"manta": mantaFactory,
2015-02-22 00:13:28 +01:00
}