DodoApp: Support MongoDB
Change-Id: I275f662848fb7d78b98d5e935f5ca87d73ca60ec
diff --git a/core/installer/app_configs/app_base.cue b/core/installer/app_configs/app_base.cue
index 74860fa..122faa7 100644
--- a/core/installer/app_configs/app_base.cue
+++ b/core/installer/app_configs/app_base.cue
@@ -305,6 +305,134 @@
}
}
+#MongoDB: #WithOut & {
+ cluster?: #Cluster
+ _cluster: cluster
+ name: string
+ version: "8.0.1"
+ size: string | *"1Gi"
+ initdbScripts: {...}
+ _initdbScripts: initdbScripts
+
+ _size: size
+ _volumeClaimName: "\(name)-mongodb"
+
+ images: {
+ mongodb: {
+ registry: "docker.io"
+ repository: "bitnami"
+ name: "mongodb"
+ tag: version
+ pullPolicy: "IfNotPresent"
+ }
+ }
+ charts: {
+ mongodb: {
+ kind: "GitRepository"
+ address: "https://code.v1.dodo.cloud/helm-charts"
+ branch: "main"
+ path: "charts/mongodb"
+ }
+ }
+ volumes: {
+ "\(_volumeClaimName)": {
+ size: _size
+ if _cluster != _|_ {
+ cluster: _cluster
+ }
+ }
+ }
+ helm: {
+ mongodb: {
+ chart: charts.mongodb
+ if _cluster != _|_ {
+ cluster: _cluster
+ }
+ annotations: {
+ "dodo.cloud/resource-type": "mongodb"
+ "dodo.cloud/resource.mongodb.name": name
+ "dodo.cloud/resource.mongodb.version": version
+ "dodo.cloud/resource.mongodb.volume": _volumeClaimName
+ }
+ values: {
+ fullnameOverride: "mongodb-\(name)"
+ image: {
+ registry: images.mongodb.registry
+ repository: images.mongodb.imageName
+ tag: images.mongodb.tag
+ pullPolicy: images.mongodb.pullPolicy
+ }
+ architecture: "standalone"
+ useStatefulSet: false
+ auth: {
+ enabled: true
+ rootUser: "root"
+ rootPassword: "root"
+ usernames: ["mongo"]
+ passwords: ["mongo"]
+ databases: ["mongo"]
+ }
+ tls: enabled: false
+ disableJavascript: false
+ enableJournal: true
+ initdbScripts: _initdbScripts
+ service: {
+ type: "ClusterIP"
+ portName: "mongodb"
+ ports: mongodb: 27017
+ }
+ arbiter: enabled: false
+ hidden: enabled: false
+ persistence: {
+ enabled: true
+ existingClaim: _volumeClaimName
+ mountPath: "/bitnami/mongodb"
+ }
+ volumePermissions: securityContext: runAsUser: 0
+ }
+ }
+ }
+}
+
+#WithOut: {
+ cluster?: #Cluster
+ _cluster: cluster
+ mongodb: {...}
+ mongodb: {
+ for k, v in mongodb {
+ "\(k)": #MongoDB & v & {
+ if _cluster != _|_ {
+ cluster: _cluster
+ }
+ }
+ }
+ ...
+ }
+ images: {
+ for k, v in mongodb {
+ for x, y in v.images {
+ "\(x)": y
+ }
+ }
+ }
+ charts: {
+ for k, v in mongodb {
+ for x, y in v.charts {
+ "\(x)": y
+ }
+ }
+ }
+ helmR: {
+ for k, v in mongodb {
+ for x, y in v.helmR {
+ "\(x)": y
+ }
+ }
+ ...
+ }
+ ...
+}
+
#PostgreSQL: #WithOut & {
cluster?: #Cluster
_cluster: cluster
diff --git a/core/installer/app_configs/dodo_app.cue b/core/installer/app_configs/dodo_app.cue
index aa3b527..6fdb412 100644
--- a/core/installer/app_configs/dodo_app.cue
+++ b/core/installer/app_configs/dodo_app.cue
@@ -95,6 +95,7 @@
ingress: #AppIngress
volumes: [...#volume]
postgresql: [...#PostgreSQL]
+ mongodb: [...#MongoDB]
rootDir: string
runConfiguration: [...#Command]
dev: #Dev | *{ enabled: false }
@@ -104,8 +105,11 @@
for v in volumes {
"DODO_VOLUME_\(strings.ToUpper(v.name))=/dodo-volume/\(v.name)"
}
- for v in postgresql {
- "DODO_POSTGRESQL_\(strings.ToUpper(v.name))_URL=postgresql://postgres:postgres@postgres-\(v.name).\(release.namespace).svc.cluster.local/postgres"
+ for p in postgresql {
+ "DODO_POSTGRESQL_\(strings.ToUpper(p.name))_URL=postgresql://postgres:postgres@postgres-\(p.name).\(release.namespace).svc.cluster.local/postgres"
+ }
+ for m in mongodb {
+ "DODO_MONGODB_\(strings.ToUpper(m.name))_URL=mongodb://mongo:mongo@mongodb-\(m.name).\(release.namespace).svc.cluster.local/mongo"
}
]
@@ -412,6 +416,11 @@
"\(v.name)": v
}
}
+ mongodb: {
+ for v in app.mongodb {
+ "\(v.name)": v
+ }
+ }
vm: {
"\(_vmName)": _devVM
}
diff --git a/core/installer/app_test.go b/core/installer/app_test.go
index 47eb02c..a59571d 100644
--- a/core/installer/app_test.go
+++ b/core/installer/app_test.go
@@ -483,7 +483,7 @@
name: "data"
size: "5Gi"
}]
- postgresql: [{
+ mongodb: [{
name: "db"
size: "10Gi"
}]
diff --git a/core/installer/server/dodo-app/schemas/app.schema.json b/core/installer/server/dodo-app/schemas/app.schema.json
index 455829c..f400c17 100644
--- a/core/installer/server/dodo-app/schemas/app.schema.json
+++ b/core/installer/server/dodo-app/schemas/app.schema.json
@@ -48,6 +48,9 @@
"postgresql": {
"$ref": "#/definitions/postgresql"
},
+ "mongodb": {
+ "$ref": "#/definitions/mongodb"
+ },
"dev": {
"$ref": "#/definitions/dev"
}
@@ -100,6 +103,9 @@
"postgresql": {
"$ref": "#/definitions/postgresql"
},
+ "mongodb": {
+ "$ref": "#/definitions/mongodb"
+ },
"dev": {
"$ref": "#/definitions/dev"
}
@@ -129,6 +135,9 @@
"postgresql": {
"$ref": "#/definitions/postgresql"
},
+ "mongodb": {
+ "$ref": "#/definitions/mongodb"
+ },
"dev": {
"$ref": "#/definitions/dev"
},
@@ -258,6 +267,93 @@
"subdomain"
]
},
+ // mongo start
+ "mongo": {
+ "type": "object",
+ "properties": {
+ "name": {
+ "type": "string"
+ },
+ "size": {
+ "$ref": "#/definitions/size"
+ },
+ "initdbScripts": { "type": "object" }
+ },
+ "additionalProperties": false,
+ "required": [
+ "name",
+ "size"
+ ]
+ },
+ "mongodb": {
+ "type": "array",
+ "items": {
+ "$ref": "#/definitions/mongo"
+ }
+ },
+ "size": {
+ "type": "string",
+ "pattern": "[1-9][0-9]*(Mi|Gi)"
+ },
+ "ingress": {
+ "type": "object",
+ "properties": {
+ "network": {
+ "type": "string",
+ "oneOf": {{ .Networks }}
+ },
+ "subdomain": {
+ "type": "string",
+ "minLength": 1
+ },
+ "auth": {
+ "type": "object",
+ "oneOf": [
+ {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "enum": [
+ false
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "enabled"
+ ]
+ },
+ {
+ "type": "object",
+ "properties": {
+ "enabled": {
+ "enum": [
+ true
+ ]
+ },
+ "groups": {
+ "type": "string"
+ },
+ "noAuthPathPatterns": {
+ "type": "array",
+ "items": { "type": "string" }
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "enabled"
+ ]
+ }
+ ]
+ }
+ },
+ "additionalProperties": false,
+ "required": [
+ "network",
+ "subdomain"
+ ]
+ },
+
"command": {
"type": "object",
"properties": {
diff --git a/core/installer/server/dodo-app/server.go b/core/installer/server/dodo-app/server.go
index 609ce9f..4fbd6c2 100644
--- a/core/installer/server/dodo-app/server.go
+++ b/core/installer/server/dodo-app/server.go
@@ -630,6 +630,12 @@
Volume string
}
+type mongodb struct {
+ Name string
+ Version string
+ Volume string
+}
+
type ingress struct {
Name string
Host string
@@ -646,6 +652,7 @@
type resourceData struct {
Volume []volume
PostgreSQL []postgresql
+ MongoDB []mongodb
Ingress []ingress
VirtualMachine []vm
}
@@ -1815,6 +1822,20 @@
return resourceData{}, fmt.Errorf("no volume")
}
ret.PostgreSQL = append(ret.PostgreSQL, postgresql{name, version, volume})
+ case "mongodb":
+ name, ok := r.Annotations["dodo.cloud/resource.mongodb.name"]
+ if !ok {
+ return resourceData{}, fmt.Errorf("no name")
+ }
+ version, ok := r.Annotations["dodo.cloud/resource.mongodb.version"]
+ if !ok {
+ return resourceData{}, fmt.Errorf("no version")
+ }
+ volume, ok := r.Annotations["dodo.cloud/resource.mongodb.volume"]
+ if !ok {
+ return resourceData{}, fmt.Errorf("no volume")
+ }
+ ret.MongoDB = append(ret.MongoDB, mongodb{name, version, volume})
case "ingress":
name, ok := r.Annotations["dodo.cloud/resource.ingress.name"]
if !ok {
diff --git a/core/installer/server/dodo-app/templates/base.html b/core/installer/server/dodo-app/templates/base.html
index 19aaf52..722c640 100644
--- a/core/installer/server/dodo-app/templates/base.html
+++ b/core/installer/server/dodo-app/templates/base.html
@@ -46,6 +46,15 @@
<br/>
{{- end -}}
{{- end -}}
+{{- if gt (len .MongoDB) 0 -}}
+<h3>MongoDB</h3>
+{{- range $m := .MongoDB -}}
+Name: {{ $m.Name }}<br/>
+Version: {{ $m.Version }}<br/>
+Volume: {{ $m.Volume }}<br/>
+<br/>
+{{- end -}}
+{{- end -}}
{{- if gt (len .Volume) 0 -}}
<h3>Volumes</h3>
{{- range $v := .Volume -}}