DodoApp: Use service name as container image name
This avoids clashes between multiple service definitions.
Change-Id: I379111dba1ed5265bf1b1b17975a4219c45261d8
diff --git a/core/installer/app_configs/dodo_app.cue b/core/installer/app_configs/dodo_app.cue
index 9c433bd..1390459 100644
--- a/core/installer/app_configs/dodo_app.cue
+++ b/core/installer/app_configs/dodo_app.cue
@@ -554,8 +554,16 @@
}
#AgentApp: #SketchApp
+#AgentApp: {
+ agentMode: true
+ ...
+}
#NonAgentApp: #GoApp | #HugoApp | #PHPApp | #NextjsApp | #NodeJSApp | #DenoApp
+#NonAgentApp: {
+ agentMode: false
+ ...
+}
#App: #NonAgentApp | #AgentApp
@@ -570,8 +578,9 @@
_serviceDevDisabled: {
svcType: string
+ svcName: string
images: {
- app: {
+ "\(svcName)": {
repository: "giolekva"
name: "app-runner"
tag: strings.Replace(svcType, ":", "-", -1)
@@ -646,7 +655,10 @@
}],
])
- _sdd: _serviceDevDisabled & {svcType: svc.type}
+ _sdd: _serviceDevDisabled & {
+ svcType: svc.type
+ svcName: svc.name
+ }
images: _sdd.images
charts: _sdd.charts
@@ -697,9 +709,9 @@
}
values: {
image: {
- repository: images.app.fullName
- tag: images.app.tag
- pullPolicy: images.app.pullPolicy
+ repository: images[svc.name].fullName
+ tag: images[svc.name].tag
+ pullPolicy: images[svc.name].pullPolicy
}
// TODO(gio): install gvisor runtime during new remote cluster init
if cluster == _|_ {
@@ -853,7 +865,10 @@
#Service: #ServiceDevEnabled | #ServiceDevDisabled
#Service: {
svc: type: string
- _sdd: _serviceDevDisabled & {svcType: svc.type}
+ _sdd: _serviceDevDisabled & {
+ svcType: svc.type
+ svcName: svc.name
+ }
charts: _serviceDevEnabled.charts & _sdd.charts
images: _serviceDevEnabled.images & _sdd.images
...
@@ -956,13 +971,16 @@
for v in _service {
"\(v.name)": #Service & {
name: v.name
- svc: v
+ svc: v & {
+ agentMode: false
+ }
}
}
for v in agent {
"\(v.name)": #Service & {
name: v.name
svc: v & {
+ agentMode: true
dev: enabled: false
volume: ["\(v.name)-apps"]
}
diff --git a/core/installer/dodo_app_test.go b/core/installer/dodo_app_test.go
index 6ebf98e..6e792a0 100644
--- a/core/installer/dodo_app_test.go
+++ b/core/installer/dodo_app_test.go
@@ -756,3 +756,171 @@
}
t.Log(string(r.Raw))
}
+
+const serviceAndAgent = `
+{
+ "service": [
+ {
+ "nodeId": "02efbce4-c338-4cb9-a101-63acfeaca4c7",
+ "type": "deno:2.2.0",
+ "name": "blog",
+ "source": {
+ "repository": "git@github.com:giolekva/dodo-blog.git",
+ "branch": "master",
+ "rootDir": "/"
+ },
+ "ports": [
+ {
+ "name": "web",
+ "value": 8080,
+ "protocol": "TCP"
+ }
+ ],
+ "env": [
+ {
+ "name": "DODO_POSTGRESQL_DB_URL"
+ },
+ {
+ "name": "DODO_PORT_WEB",
+ "alias": "PORT"
+ }
+ ],
+ "ingress": [
+ {
+ "nodeId": "bb4c754a-d50b-4686-b485-17ad1804f014",
+ "network": "Private",
+ "subdomain": "blog",
+ "port": {
+ "name": "web"
+ },
+ "auth": {
+ "enabled": false
+ }
+ }
+ ],
+ "expose": [],
+ "preBuildCommands": [
+ {
+ "bin": "deno run -A npm:prisma migrate dev"
+ }
+ ],
+ "dev": {
+ "enabled": false
+ }
+ }
+ ],
+ "agent": [
+ {
+ "nodeId": "76081511-fa20-4202-935a-a171c79a9daf",
+ "type": "sketch:latest",
+ "name": "lead",
+ "ports": [
+ {
+ "name": "agent",
+ "value": 2001,
+ "protocol": "TCP"
+ },
+ {
+ "name": "p8080",
+ "value": 8080,
+ "protocol": "TCP"
+ },
+ {
+ "name": "p8081",
+ "value": 8081,
+ "protocol": "TCP"
+ },
+ {
+ "name": "p8082",
+ "value": 8082,
+ "protocol": "TCP"
+ },
+ {
+ "name": "p8083",
+ "value": 8083,
+ "protocol": "TCP"
+ },
+ {
+ "name": "p8084",
+ "value": 8084,
+ "protocol": "TCP"
+ }
+ ],
+ "env": [
+ {
+ "name": "DODO_PORT_AGENT"
+ },
+ {
+ "name": "DODO_PORT_P8080"
+ },
+ {
+ "name": "DODO_PORT_P8081"
+ },
+ {
+ "name": "DODO_PORT_P8082"
+ },
+ {
+ "name": "DODO_PORT_P8083"
+ },
+ {
+ "name": "DODO_PORT_P8084"
+ }
+ ],
+ "ingress": [
+ {
+ "nodeId": "31cadf3f-0858-4a86-844b-733910817984",
+ "network": "Private",
+ "subdomain": "weq",
+ "port": {
+ "name": "agent"
+ },
+ "auth": {
+ "enabled": false
+ }
+ }
+ ],
+ "expose": [],
+ "preBuildCommands": [],
+ "dev": {
+ "enabled": false
+ }
+ }
+ ],
+ "volume": [],
+ "postgresql": [
+ {
+ "nodeId": "ba62db4b-2b07-49d0-ba29-ab65bd244997",
+ "name": "db",
+ "size": "1Gi",
+ "expose": []
+ }
+ ],
+ "mongodb": []
+}
+`
+
+func TestServiceAndAgent(t *testing.T) {
+ app, err := NewDodoApp([]byte(serviceAndAgent))
+ if err != nil {
+ for _, e := range errors.Errors(err) {
+ t.Log(e)
+ }
+ t.Fatal(err)
+ }
+ release := Release{
+ Namespace: "foo",
+ AppInstanceId: "foo-bar",
+ RepoAddr: "ssh://192.168.100.210:22/config",
+ AppDir: "/foo/bar",
+ }
+ keyGen := testKeyGen{}
+ r, err := app.Render(release, env, networks, nil, map[string]any{
+ "managerAddr": "",
+ "appId": "",
+ "geminiApiKey": "dev",
+ }, nil, keyGen)
+ if err != nil {
+ t.Fatal(err)
+ }
+ t.Log(string(r.Raw))
+}