update provisioner to support consul based storage
Change-Id: Iaa649396d23bbf28a4d99a188c9846aea1310cd0
diff --git a/provisioner/storage.go b/provisioner/storage.go
index 92c5339..b12b7ef 100644
--- a/provisioner/storage.go
+++ b/provisioner/storage.go
@@ -1,11 +1,33 @@
package main
+import (
+ "fmt"
+ "net/url"
+ "strings"
+)
+
type Storage interface {
Put(id string, update StatusMsg) error
Get(id string) (*StatusMsg, error)
List() ([]StatusMsg, error)
}
+func NewStorage(spec string) (Storage, error) {
+ conn, err := url.Parse(spec)
+ if err != nil {
+ return nil, err
+ }
+
+ switch strings.ToUpper(conn.Scheme) {
+ case "MEMORY":
+ return NewMemoryStorage(), nil
+ case "CONSUL":
+ return NewConsulStorage(spec)
+ default:
+ return nil, fmt.Errorf("Unknown storage scheme specified, '%s'", conn.Scheme)
+ }
+}
+
type MemoryStorage struct {
Data map[string]StatusMsg
}