Clusters: Support persistent storage on remote clusters.

With this merged users can request persistent volumes and PostgreSQL
instances on remote clusters.

This is achieved by Cluster manager installing open-iscsi on all
remote servers and running longhorn on top of them.

Change-Id: Ic1b24ede12fa32bb99f38e560207230437b45fd6
diff --git a/core/installer/cluster/manager.go b/core/installer/cluster/manager.go
index c8e62d1..c422535 100644
--- a/core/installer/cluster/manager.go
+++ b/core/installer/cluster/manager.go
@@ -30,14 +30,17 @@
 	Kubeconfig       string   `json:"kubeconfig"`
 	Controllers      []Server `json:"controllers"`
 	Workers          []Server `json:"workers"`
+	StorageEnabled   bool     `json:"storageEnabled"`
 }
 
-type ClusterSetupFunc func(name, kubeconfig, ingressClassName string) (net.IP, error)
+type ClusterIngressSetupFunc func(name, kubeconfig, ingressClassName string) (net.IP, error)
+type ClusterSetupFunc func(m Manager) error
 
 type Manager interface {
-	Init(s Server, setupFn ClusterSetupFunc) (net.IP, error)
+	Init(s Server, setupFn ClusterIngressSetupFunc) (net.IP, error)
 	JoinController(s Server) error
 	JoinWorker(s Server) error
 	RemoveServer(name string) error
 	State() State
+	EnableStorage()
 }