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/values-tmpl/longhorn.cue b/core/installer/values-tmpl/longhorn.cue
new file mode 100644
index 0000000..80a693c
--- /dev/null
+++ b/core/installer/values-tmpl/longhorn.cue
@@ -0,0 +1,172 @@
+input: {
+}
+
+name: "longhorn"
+namespace: "longhorn"
+_pullPolicy: "IfNotPresent"
+
+out: {
+	images: {
+		longhornEngine: {
+			repository: "longhornio"
+			name: "longhorn-engine"
+			tag: "v1.5.2"
+			pullPolicy: _pullPolicy
+		}
+		longhornManager: {
+			repository: "longhornio"
+			name: "longhorn-manager"
+			tag: "v1.5.2"
+			pullPolicy: _pullPolicy
+		}
+		longhornUI: {
+			repository: "longhornio"
+			name: "longhorn-ui"
+			tag: "v1.5.2"
+			pullPolicy: _pullPolicy
+		}
+		longhornInstanceManager: {
+			repository: "longhornio"
+			name: "longhorn-instance-manager"
+			tag: "v1.5.2"
+			pullPolicy: _pullPolicy
+		}
+		longhornShareManager: {
+			repository: "longhornio"
+			name: "longhorn-share-manager"
+			tag: "v1.5.2"
+			pullPolicy: _pullPolicy
+		}
+		longhornBackingImageManager: {
+			repository: "longhornio"
+			name: "backing-image-manager"
+			tag: "v1.5.2"
+			pullPolicy: _pullPolicy
+		}
+		longhornSupportBundleKit: {
+			repository: "longhornio"
+			name: "support-bundle-kit"
+			tag: "v0.0.27"
+			pullPolicy: _pullPolicy
+		}
+		csiAttacher: {
+			repository: "longhornio"
+			name: "csi-attacher"
+			tag: "v4.2.0"
+			pullPolicy: _pullPolicy
+		}
+		csiProvisioner: {
+			repository: "longhornio"
+			name: "csi-provisioner"
+			tag: "v3.4.1"
+			pullPolicy: _pullPolicy
+		}
+		csiNodeDriverRegistrar: {
+			repository: "longhornio"
+			name: "csi-node-driver-registrar"
+			tag: "v2.7.0"
+			pullPolicy: _pullPolicy
+		}
+		csiResizer: {
+			repository: "longhornio"
+			name: "csi-resizer"
+			tag: "v1.7.0"
+			pullPolicy: _pullPolicy
+		}
+		csiSnapshotter: {
+			repository: "longhornio"
+			name: "csi-snapshotter"
+			tag: "v6.2.1"
+			pullPolicy: _pullPolicy
+		}
+		csiLivenessProbe: {
+			repository: "longhornio"
+			name: "livenessprobe"
+			tag: "v2.9.0"
+			pullPolicy: _pullPolicy
+		}
+	}
+	charts: {
+		longhorn: {
+			kind: "GitRepository"
+			address: "https://code.v1.dodo.cloud/helm-charts"
+			branch: "main"
+			path: "charts/longhorn"
+		}
+	}
+	helm: {
+		longhorn: {
+			chart: charts.longhorn
+			info: "Installing distributed storage servers"
+			values: {
+				image: {
+					longhorn: {
+						engine: {
+							repository: images.longhornEngine.imageName
+							tag: images.longhornEngine.tag
+						}
+						manager: {
+							repository: images.longhornManager.imageName
+							tag: images.longhornManager.tag
+						}
+						ui: {
+							repository: images.longhornUI.imageName
+							tag: images.longhornUI.tag
+						}
+						instanceManager: {
+							repository: images.longhornInstanceManager.imageName
+							tag: images.longhornInstanceManager.tag
+						}
+						shareManager: {
+							repository: images.longhornShareManager.imageName
+							tag: images.longhornShareManager.tag
+						}
+						backingImageManager: {
+							repository: images.longhornBackingImageManager.imageName
+							tag: images.longhornBackingImageManager.tag
+						}
+						supportBundleKit: {
+							repository: images.longhornSupportBundleKit.imageName
+							tag: images.longhornSupportBundleKit.tag
+						}
+					}
+					csi: {
+						attacher: {
+							repository: images.csiAttacher.imageName
+							tag: images.csiAttacher.tag
+						}
+						provisioner: {
+							repository: images.csiProvisioner.imageName
+							tag: images.csiProvisioner.tag
+						}
+						nodeDriverRegistrar: {
+							repository: images.csiNodeDriverRegistrar.imageName
+							tag: images.csiNodeDriverRegistrar.tag
+						}
+						resizer: {
+							repository: images.csiResizer.imageName
+							tag: images.csiResizer.tag
+						}
+						snapshotter: {
+							repository: images.csiSnapshotter.imageName
+							tag: images.csiSnapshotter.tag
+						}
+						livenessProbe: {
+							repository: images.csiLivenessProbe.imageName
+							tag: images.csiLivenessProbe.tag
+						}
+					}
+					pullPolicy: _pullPolicy
+				}
+				// if input.storageDir != _|_ {
+				// 	defaultSettings: defaultDataPath: input.storageDir
+				// }
+				// if input.volumeDefaultReplicaCount != _|_ {
+					persistence: defaultClassReplicaCount: 1 // input.volumeDefaultReplicaCount
+				// }
+				service: ui: type: "ClusterIP"
+				ingress: enabled: false
+			}
+		}
+	}
+}