DodoApp: Support dev virtual machines

Change-Id: Ib7641adb5be477bdde7cd9a06df4b45aa65a1c01
diff --git a/core/installer/values-tmpl/headscale.cue b/core/installer/values-tmpl/headscale.cue
index e13c1f0..fdbcb5a 100644
--- a/core/installer/values-tmpl/headscale.cue
+++ b/core/installer/values-tmpl/headscale.cue
@@ -8,89 +8,92 @@
 namespace: "app-headscale"
 icon: "<svg xmlns='http://www.w3.org/2000/svg' width='50' height='50' viewBox='0 0 48 48'><circle cx='24' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='10' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='24' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='38' r='4.5' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='38' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='24' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='10' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/><circle cx='38' cy='24' r='2' fill='none' stroke='currentColor' stroke-linecap='round' stroke-linejoin='round'/></svg>"
 
-images: {
-	headscale: {
-		repository: "headscale"
-		name: "headscale"
-		tag: "0.22.3"
-		pullPolicy: "IfNotPresent"
-	}
-	api: {
-		repository: "giolekva"
-		name: "headscale-api"
-		tag: "latest"
-		pullPolicy: "Always"
-	}
-}
-
-charts: {
-	oauth2Client: {
-		kind: "GitRepository"
-		address: "https://code.v1.dodo.cloud/helm-charts"
-		branch: "main"
-		path: "charts/oauth2-client"
-	}
-	headscale: {
-		kind: "GitRepository"
-		address: "https://code.v1.dodo.cloud/helm-charts"
-		branch: "main"
-		path: "charts/headscale"
-	}
-}
-
 _domain: "\(input.subdomain).\(input.network.domain)"
 _oauth2ClientSecretName: "oauth2-client"
 
-helm: {
-	"oauth2-client": {
-		chart: charts.oauth2Client
-		// TODO(gio): remove once hydra maester is installed as part of dodo itself
-		dependsOn: [{
-			name: "auth"
-			namespace: "\(global.namespacePrefix)core-auth"
-		}]
-		values: {
-			name: "\(release.namespace)-headscale"
-			secretName: _oauth2ClientSecretName
-			grantTypes: ["authorization_code"]
-			responseTypes: ["code"]
-			scope: "openid profile email"
-			redirectUris: ["https://\(_domain)/oidc/callback"]
-			hydraAdmin: "http://hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local"
+out: {
+	images: {
+		headscale: {
+			repository: "headscale"
+			name: "headscale"
+			tag: "0.22.3"
+			pullPolicy: "IfNotPresent"
+		}
+		api: {
+			repository: "giolekva"
+			name: "headscale-api"
+			tag: "latest"
+			pullPolicy: "Always"
 		}
 	}
-	headscale: {
-		chart: charts.headscale
-		dependsOn: [{
-			name: "auth"
-			namespace: "\(global.namespacePrefix)core-auth"
-		}]
-		values: {
-			image: {
-				repository: images.headscale.fullName
-				tag: images.headscale.tag
-				pullPolicy: images.headscale.pullPolicy
-			}
-			storage: size: "5Gi"
-			ingressClassName: input.network.ingressClass
-			certificateIssuer: input.network.certificateIssuer
-			domain: _domain
-			publicBaseDomain: input.network.domain
-			ipAddressPool: "\(global.id)-headscale"
-			oauth2: {
+
+	charts: {
+		oauth2Client: {
+			kind: "GitRepository"
+			address: "https://code.v1.dodo.cloud/helm-charts"
+			branch: "main"
+			path: "charts/oauth2-client"
+		}
+		headscale: {
+			kind: "GitRepository"
+			address: "https://code.v1.dodo.cloud/helm-charts"
+			branch: "main"
+			path: "charts/headscale"
+		}
+	}
+
+	helm: {
+		"oauth2-client": {
+			chart: charts.oauth2Client
+			// TODO(gio): remove once hydra maester is installed as part of dodo itself
+			dependsOn: [{
+				name: "auth"
+				namespace: "\(global.namespacePrefix)core-auth"
+			}]
+			values: {
+				name: "\(release.namespace)-headscale"
 				secretName: _oauth2ClientSecretName
-				issuer: "https://hydra.\(input.network.domain)"
+				grantTypes: ["authorization_code"]
+				responseTypes: ["code"]
+				scope: "openid profile email"
+				redirectUris: ["https://\(_domain)/oidc/callback"]
+				hydraAdmin: "http://hydra-admin.\(global.namespacePrefix)core-auth.svc.cluster.local"
 			}
-			api: {
-				port: 8585
-				ipSubnet: input.ipSubnet
+		}
+		headscale: {
+			chart: charts.headscale
+			dependsOn: [{
+				name: "auth"
+				namespace: "\(global.namespacePrefix)core-auth"
+			}]
+			values: {
 				image: {
-					repository: images.api.fullName
-					tag: images.api.tag
-					pullPolicy: images.api.pullPolicy
+					repository: images.headscale.fullName
+					tag: images.headscale.tag
+					pullPolicy: images.headscale.pullPolicy
 				}
+				storage: size: "5Gi"
+				ingressClassName: input.network.ingressClass
+				certificateIssuer: input.network.certificateIssuer
+				domain: _domain
+				publicBaseDomain: input.network.domain
+				ipAddressPool: "\(global.id)-headscale"
+				oauth2: {
+					secretName: _oauth2ClientSecretName
+					issuer: "https://hydra.\(input.network.domain)"
+				}
+				api: {
+					port: 8585
+					ipSubnet: input.ipSubnet
+					self: "http://headscale-api.\(release.namespace).svc.cluster/sync-users"
+					image: {
+						repository: images.api.fullName
+						tag: images.api.tag
+						pullPolicy: images.api.pullPolicy
+					}
+				}
+				ui: enabled: false
 			}
-			ui: enabled: false
 		}
 	}
 }