installer: migrate apps to cuelang
diff --git a/core/installer/values-tmpl/dns-zone-manager.cue b/core/installer/values-tmpl/dns-zone-manager.cue
new file mode 100644
index 0000000..4d977d0
--- /dev/null
+++ b/core/installer/values-tmpl/dns-zone-manager.cue
@@ -0,0 +1,175 @@
+input: {
+	apiConfigMapName: string
+	volume: {
+		size: string
+		claimName: string
+		mountPath: string
+	}
+}
+
+images: {
+	dnsZoneController: {
+		repository: "giolekva"
+		name: "dns-ns-controller"
+		tag: "latest"
+		pullPolicy: "Always"
+	}
+	kubeRBACProxy: {
+		registry: "gcr.io"
+		repository: "kubebuilder"
+		name: "kube-rbac-proxy"
+		tag: "v0.13.0"
+		pullPolicy: "IfNotPresent"
+	}
+	coredns: {
+		repository: "coredns"
+		name: "coredns"
+		tag: "1.11.1"
+		pullPolicy: "IfNotPresent"
+	}
+}
+
+charts: {
+	volume: {
+		chart: "charts/volumes"
+		sourceRef: {
+			kind: "GitRepository"
+			name: "pcloud"
+			namespace: global.pcloudEnvName
+		}
+	}
+	dnsZoneController: {
+		chart: "charts/dns-ns-controller"
+		sourceRef: {
+			kind: "GitRepository"
+			name: "pcloud"
+			namespace: global.pcloudEnvName
+		}
+	}
+	coredns: {
+		chart: "charts/coredns"
+		sourceRef: {
+			kind: "GitRepository"
+			name: "pcloud"
+			namespace: global.pcloudEnvName
+		}
+	}
+}
+
+_volumeName: "zone-configs"
+
+helm: {
+	volume: {
+		chart: charts.volume
+		values: {
+			name: input.volume.claimName
+			size: input.volume.size
+			accessMode: "ReadWriteMany"
+		}
+	}
+	"dns-zone-controller": {
+		chart: charts.dnsZoneController
+		values: {
+			installCRDs: true
+			apiConfigMapName: input.apiConfigMapName
+			volume: {
+				claimName: input.volume.claimName
+				mountPath: input.volume.mountPath
+			}
+			image: {
+				repository: images.dnsZoneController.fullName
+				tag: images.dnsZoneController.tag
+				pullPolicy: images.dnsZoneController.pullPolicy
+			}
+			kubeRBACProxy: {
+				image: {
+					repository: images.kubeRBACProxy.fullName
+					tag: images.kubeRBACProxy.tag
+					pullPolicy: images.kubeRBACProxy.pullPolicy
+				}
+			}
+		}
+	}
+	coredns: {
+		chart: charts.coredns
+		values: {
+			image: {
+				repository: images.coredns.fullName
+				tag: images.coredns.tag
+				pullPolicy: images.coredns.pullPolicy
+			}
+			replicaCount: 1
+			resources: {
+				limits: {
+					cpu: "100m"
+					memory: "128Mi"
+				}
+				requests: {
+					cpu: "100m"
+					memory: "128Mi"
+				}
+			}
+			rollingUpdate: {
+				maxUnavailable: 1
+				maxSurge: "25%"
+			}
+			terminationGracePeriodSeconds: 30
+			serviceType: "ClusterIP"
+			service: name: "coredns"
+			serviceAccount: create: false
+			rbac: {
+				create: true
+				pspEnable: false
+			}
+			isClusterService: true
+			securityContext: capabilities: add: ["NET_BIND_SERVICE"]
+			servers: [{
+				zones: [{
+					zone: "."
+				}]
+				port: 53
+				plugins: [
+					{
+						name: "log"
+					},
+					{
+						name: "health"
+						configBlock: "lameduck 5s"
+					},
+					{
+						name: "ready"
+					}
+			]
+			}]
+			extraConfig: import: parameters: "\(input.volume.mountPath)/coredns.conf"
+			extraVolumes: [{
+				name: _volumeName
+				persistentVolumeClaim: claimName: input.volume.claimName
+			}]
+			extraVolumeMounts: [{
+				name: _volumeName
+				mountPath: input.volume.mountPath
+			}]
+			livenessProbe: {
+				enabled: true
+				initialDelaySeconds: 60
+				periodSeconds: 10
+				timeoutSeconds: 5
+				failureThreshold: 5
+				successThreshold: 1
+			}
+			readinessProbe: {
+				enabled: true
+				initialDelaySeconds: 30
+				periodSeconds: 10
+				timeoutSeconds: 5
+				failureThreshold: 5
+				successThreshold: 1
+			}
+			zoneFiles: []
+			hpa: enabled: false
+			autoscaler: enabled: false
+			deployment: enabled: true
+		}
+	}
+}