From 998d865ff55657251c1cc075375e6128e80bb0b5 Mon Sep 17 00:00:00 2001 From: shreddedbacon Date: Wed, 28 Feb 2024 15:45:52 +1100 Subject: [PATCH] refactor: support mongo-mongodb type conversion and add tests for mongo to mongodb-dbaas conversion --- cmd/template_dbaas_test.go | 27 ++++++ internal/generator/services.go | 1 + .../templating/dbaas/template_dbaas_test.go | 24 +++++ .../test-resources/result-mongodb-2.yaml | 30 +++++++ .../node/dbaas-templates/dbaas-1/dbaas.yaml | 90 +++++++++++++++++++ .../node/dbaas-templates/dbaas-2/dbaas.yaml | 60 +++++++++++++ .../testdata/node/docker-compose.mongo.yml | 55 ++++++++++++ internal/testdata/node/lagoon.mongo.yml | 70 +++++++++++++++ 8 files changed, 357 insertions(+) create mode 100644 internal/templating/dbaas/test-resources/result-mongodb-2.yaml create mode 100644 internal/testdata/node/dbaas-templates/dbaas-1/dbaas.yaml create mode 100644 internal/testdata/node/dbaas-templates/dbaas-2/dbaas.yaml create mode 100644 internal/testdata/node/docker-compose.mongo.yml create mode 100644 internal/testdata/node/lagoon.mongo.yml diff --git a/cmd/template_dbaas_test.go b/cmd/template_dbaas_test.go index e54bb159..6569098f 100644 --- a/cmd/template_dbaas_test.go +++ b/cmd/template_dbaas_test.go @@ -60,6 +60,33 @@ func TestDBaaSTemplateGeneration(t *testing.T) { templatePath: "testdata/output", want: "../internal/testdata/complex/dbaas-templates/dbaas-3", }, + { + name: "test4 - mongo", + args: testdata.GetSeedData( + testdata.TestData{ + ProjectName: "example-project", + EnvironmentName: "main", + Branch: "main", + LagoonYAML: "../internal/testdata/node/lagoon.mongo.yml", + }, true), + templatePath: "testdata/output", + want: "../internal/testdata/node/dbaas-templates/dbaas-1", + }, + { + name: "test5 - mongo override (the mongo should not generate because it has a mongodb-single override)", + args: testdata.GetSeedData( + testdata.TestData{ + ProjectName: "example-project", + EnvironmentName: "main", + Branch: "main", + LagoonYAML: "../internal/testdata/node/lagoon.mongo.yml", + ProjectVariables: []lagoon.EnvironmentVariable{ + {Name: "LAGOON_SERVICE_TYPES", Value: "mongo:mongodb-single", Scope: "build"}, + }, + }, true), + templatePath: "testdata/output", + want: "../internal/testdata/node/dbaas-templates/dbaas-2", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/internal/generator/services.go b/internal/generator/services.go index 27d24913..e382d4ac 100644 --- a/internal/generator/services.go +++ b/internal/generator/services.go @@ -17,6 +17,7 @@ var oldServiceMap = map[string]string{ "postgres-shared": "postgres-dbaas", "mongo-shared": "mongodb-dbaas", "python-ckandatapusher": "python", + "mongo": "mongodb", } // these are lagoon types that support autogenerated routes diff --git a/internal/templating/dbaas/template_dbaas_test.go b/internal/templating/dbaas/template_dbaas_test.go index 31774af0..3a696df1 100644 --- a/internal/templating/dbaas/template_dbaas_test.go +++ b/internal/templating/dbaas/template_dbaas_test.go @@ -92,6 +92,30 @@ func TestGenerateDBaaSTemplate(t *testing.T) { }, want: "test-resources/result-postgres-1.yaml", }, + { + name: "test4 - mongo", + args: args{ + lValues: generator.BuildValues{ + Project: "example-project", + Environment: "environment-with-really-really-reall-3fdb", + EnvironmentType: "production", + Namespace: "myexample-project-environment-with-really-really-reall-3fdb", + BuildType: "branch", + LagoonVersion: "v2.x.x", + Kubernetes: "generator.local", + Branch: "environment-with-really-really-reall-3fdb", + Services: []generator.ServiceValues{ + { + Name: "mongo", + OverrideName: "mongo", + Type: "mongodb-dbaas", + DBaaSEnvironment: "development", + }, + }, + }, + }, + want: "test-resources/result-mongodb-2.yaml", + }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { diff --git a/internal/templating/dbaas/test-resources/result-mongodb-2.yaml b/internal/templating/dbaas/test-resources/result-mongodb-2.yaml new file mode 100644 index 00000000..aec1f51b --- /dev/null +++ b/internal/templating/dbaas/test-resources/result-mongodb-2.yaml @@ -0,0 +1,30 @@ +--- +apiVersion: mongodb.amazee.io/v1 +kind: MongoDBConsumer +metadata: + annotations: + lagoon.sh/branch: environment-with-really-really-reall-3fdb + lagoon.sh/version: v2.x.x + creationTimestamp: null + labels: + app.kubernetes.io/instance: mongo + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: mongodb-dbaas + lagoon.sh/buildType: branch + lagoon.sh/environment: environment-with-really-really-reall-3fdb + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: mongo + lagoon.sh/service-type: mongodb-dbaas + lagoon.sh/template: mongodb-dbaas-0.1.0 + name: mongo +spec: + consumer: + auth: + tls: false + services: {} + environment: development + provider: + auth: + tls: false +status: {} diff --git a/internal/testdata/node/dbaas-templates/dbaas-1/dbaas.yaml b/internal/testdata/node/dbaas-templates/dbaas-1/dbaas.yaml new file mode 100644 index 00000000..8835d7dd --- /dev/null +++ b/internal/testdata/node/dbaas-templates/dbaas-1/dbaas.yaml @@ -0,0 +1,90 @@ +--- +apiVersion: mongodb.amazee.io/v1 +kind: MongoDBConsumer +metadata: + annotations: + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + creationTimestamp: null + labels: + app.kubernetes.io/instance: mongo + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: mongodb-dbaas + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: mongo + lagoon.sh/service-type: mongodb-dbaas + lagoon.sh/template: mongodb-dbaas-0.1.0 + name: mongo +spec: + consumer: + auth: + tls: false + services: {} + environment: production + provider: + auth: + tls: false +status: {} +--- +apiVersion: mongodb.amazee.io/v1 +kind: MongoDBConsumer +metadata: + annotations: + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + creationTimestamp: null + labels: + app.kubernetes.io/instance: mongo2 + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: mongodb-dbaas + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: mongo2 + lagoon.sh/service-type: mongodb-dbaas + lagoon.sh/template: mongodb-dbaas-0.1.0 + name: mongo2 +spec: + consumer: + auth: + tls: false + services: {} + environment: production + provider: + auth: + tls: false +status: {} +--- +apiVersion: mongodb.amazee.io/v1 +kind: MongoDBConsumer +metadata: + annotations: + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + creationTimestamp: null + labels: + app.kubernetes.io/instance: mongo3 + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: mongodb-dbaas + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: mongo3 + lagoon.sh/service-type: mongodb-dbaas + lagoon.sh/template: mongodb-dbaas-0.1.0 + name: mongo3 +spec: + consumer: + auth: + tls: false + services: {} + environment: production + provider: + auth: + tls: false +status: {} diff --git a/internal/testdata/node/dbaas-templates/dbaas-2/dbaas.yaml b/internal/testdata/node/dbaas-templates/dbaas-2/dbaas.yaml new file mode 100644 index 00000000..c42f53ca --- /dev/null +++ b/internal/testdata/node/dbaas-templates/dbaas-2/dbaas.yaml @@ -0,0 +1,60 @@ +--- +apiVersion: mongodb.amazee.io/v1 +kind: MongoDBConsumer +metadata: + annotations: + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + creationTimestamp: null + labels: + app.kubernetes.io/instance: mongo2 + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: mongodb-dbaas + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: mongo2 + lagoon.sh/service-type: mongodb-dbaas + lagoon.sh/template: mongodb-dbaas-0.1.0 + name: mongo2 +spec: + consumer: + auth: + tls: false + services: {} + environment: production + provider: + auth: + tls: false +status: {} +--- +apiVersion: mongodb.amazee.io/v1 +kind: MongoDBConsumer +metadata: + annotations: + lagoon.sh/branch: main + lagoon.sh/version: v2.7.x + creationTimestamp: null + labels: + app.kubernetes.io/instance: mongo3 + app.kubernetes.io/managed-by: build-deploy-tool + app.kubernetes.io/name: mongodb-dbaas + lagoon.sh/buildType: branch + lagoon.sh/environment: main + lagoon.sh/environmentType: production + lagoon.sh/project: example-project + lagoon.sh/service: mongo3 + lagoon.sh/service-type: mongodb-dbaas + lagoon.sh/template: mongodb-dbaas-0.1.0 + name: mongo3 +spec: + consumer: + auth: + tls: false + services: {} + environment: production + provider: + auth: + tls: false +status: {} diff --git a/internal/testdata/node/docker-compose.mongo.yml b/internal/testdata/node/docker-compose.mongo.yml new file mode 100644 index 00000000..0a4cf494 --- /dev/null +++ b/internal/testdata/node/docker-compose.mongo.yml @@ -0,0 +1,55 @@ +version: '2' +services: + node: + networks: + - amazeeio-network + - default + build: + context: . + dockerfile: node.dockerfile + labels: + lagoon.type: node + volumes: + - .:/app:delegated + environment: + - LAGOON_LOCALDEV_HTTP_PORT=3000 + - LAGOON_ROUTE=http://node.docker.amazee.io + + mongo: + image: fake/mongo:latest + labels: + lagoon.type: mongo + ports: + - "27100" # exposes the port 9200 with a random local port, find it with `docker-compose port opensearch 9200` + volumes: + - data:/mongo/data + + mongo2: + image: fake/mongo:latest + labels: + lagoon.type: mongodb + ports: + - "27100" # exposes the port 9200 with a random local port, find it with `docker-compose port opensearch 9200` + volumes: + - data2:/mongo/data + + mongo3: + image: fake/mongo:latest + labels: + lagoon.type: mongo-shared + ports: + - "27100" # exposes the port 9200 with a random local port, find it with `docker-compose port opensearch 9200` + volumes: + - data3:/mongo/data + +networks: + amazeeio-network: + external: true + +volumes: + data: + {} + data2: + {} + data3: + {} \ No newline at end of file diff --git a/internal/testdata/node/lagoon.mongo.yml b/internal/testdata/node/lagoon.mongo.yml new file mode 100644 index 00000000..c33fd315 --- /dev/null +++ b/internal/testdata/node/lagoon.mongo.yml @@ -0,0 +1,70 @@ +docker-compose-yaml: ../internal/testdata/node/docker-compose.mongo.yml + + +environment_variables: + git_sha: "true" + +environments: + main: + routes: + - node: + - example.com + + autogendisabled: + autogenerateRoutes: false + routes: + - node: + - example.com + + tworoutes: + routes: + - node: + - example.com + - www.example.com + + branch/routes: + routes: + - node: + - customdomain-will-be-main-domain.com + - customdomain-will-be-not-be-main-domain.com + + ingressclass: + routes: + - node: + - example.com: + ingressClass: "custom-ingress" + hsts: + routes: + - node: + - example.com: + hstsEnabled: true + hstsMaxAge: 10000 + + hsts2: + routes: + - node: + - example.com: + hstsEnabled: true + hstsMaxAge: 10000 + hstsIncludeSubdomains: true + hstsPreload: true + + pr-4841: + routes: + - nginx: + - performance.example.com + + alternativename: + routes: + - node: + - example.com: + alternativenames: + - www.example.com + - en.example.com + + wildcard: + routes: + - node: + - example.com: + tls-acme: false + wildcard: true \ No newline at end of file