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
 }