backend/init: a package for storing the factories for backends
This commit is contained in:
parent
c080334c3f
commit
f79e04500f
|
@ -0,0 +1,55 @@
|
|||
// Package init contains the list of backends that can be initialized and
|
||||
// basic helper functions for initializing those backends.
|
||||
package init
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/hashicorp/terraform/backend"
|
||||
|
||||
backendlegacy "github.com/hashicorp/terraform/backend/legacy"
|
||||
backendlocal "github.com/hashicorp/terraform/backend/local"
|
||||
backendconsul "github.com/hashicorp/terraform/backend/remote-state/consul"
|
||||
backendinmem "github.com/hashicorp/terraform/backend/remote-state/inmem"
|
||||
)
|
||||
|
||||
// backends is the list of available backends. This is a global variable
|
||||
// because backends are currently hardcoded into Terraform and can't be
|
||||
// modified without recompilation.
|
||||
//
|
||||
// To read an available backend, use the Backend function. This ensures
|
||||
// safe concurrent read access to the list of built-in backends.
|
||||
//
|
||||
// Backends are hardcoded into Terraform because the API for backends uses
|
||||
// complex structures and supporting that over the plugin system is currently
|
||||
// prohibitively difficult. For those wanting to implement a custom backend,
|
||||
// they can do so with recompilation.
|
||||
var backends map[string]func() backend.Backend
|
||||
var backendsLock sync.Mutex
|
||||
|
||||
func init() {
|
||||
// Our hardcoded backends. We don't need to acquire a lock here
|
||||
// since init() code is serial and can't spawn goroutines.
|
||||
backends = map[string]func() backend.Backend{
|
||||
"local": func() backend.Backend { return &backendlocal.Local{} },
|
||||
"consul": func() backend.Backend { return backendconsul.New() },
|
||||
"inmem": func() backend.Backend { return backendinmem.New() },
|
||||
}
|
||||
|
||||
// Add the legacy remote backends that haven't yet been convertd to
|
||||
// the new backend API.
|
||||
backendlegacy.Init(backends)
|
||||
}
|
||||
|
||||
// Backend returns the initialization factory for the given backend, or
|
||||
// nil if none exists.
|
||||
func Backend(name string) func() backend.Backend {
|
||||
backendsLock.Lock()
|
||||
defer backendsLock.Unlock()
|
||||
return backends[name]
|
||||
}
|
||||
|
||||
// NOTE(@mitchellh): At some point I'm sure we'll want Add() to add a backend
|
||||
// to the list. Right now we hardcode all backends and there isn't a reasonable
|
||||
// use case for this so we're leaving it out. It would be trivial to add in
|
||||
// the future.
|
Loading…
Reference in New Issue