From a8e74ba4d3f7403cc719c7081476d8ed4de8526e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Er=C3=A8be=20-=20Romain=20Gerard?= Date: Mon, 7 Feb 2022 09:20:25 +0100 Subject: [PATCH] fix(ENG-1068): normalize db service (#572) (#582) --- lib/aws/chart_values/mongodb/q-values.j2.yaml | 1 + lib/aws/chart_values/mysql/q-values.j2.yaml | 1 + .../chart_values/postgresql/q-values.j2.yaml | 1 + lib/aws/chart_values/redis/q-values.j2.yaml | 1 + lib/aws/services/mongodb/main.j2.tf | 5 + lib/aws/services/mysql/main.j2.tf | 4 + lib/aws/services/postgresql/main.j2.tf | 4 + lib/aws/services/redis/main.j2.tf | 5 + .../templates/external-name-service.yaml | 2 +- .../charts/external-name-svc/values.j2.yaml | 1 + .../services/mysql/templates/master-svc.yaml | 2 +- lib/common/services/mysql/values.yaml | 1 + .../services/postgresql/templates/svc.yaml | 2 +- lib/common/services/postgresql/values.yaml | 1 + .../redis/templates/redis-master-svc.yaml | 2 +- lib/common/services/redis/values.yaml | 1 + .../chart_values/mongodb/q-values.j2.yaml | 1 + .../chart_values/mysql/q-values.j2.yaml | 1 + .../chart_values/postgresql/q-values.j2.yaml | 1 + .../chart_values/redis/q-values.j2.yaml | 1 + .../chart_values/mongodb/q-values.j2.yaml | 1 + .../chart_values/mysql/q-values.j2.yaml | 1 + .../chart_values/postgresql/q-values.j2.yaml | 1 + .../chart_values/redis/q-values.j2.yaml | 1 + src/cloud_provider/aws/databases/mongodb.rs | 1 + src/cloud_provider/aws/databases/mysql.rs | 1 + .../aws/databases/postgresql.rs | 1 + src/cloud_provider/aws/databases/redis.rs | 1 + .../digitalocean/databases/mongodb.rs | 1 + .../digitalocean/databases/mysql.rs | 1 + .../digitalocean/databases/postgresql.rs | 1 + .../digitalocean/databases/redis.rs | 1 + .../scaleway/databases/mongodb.rs | 1 + .../scaleway/databases/mysql.rs | 1 + .../scaleway/databases/postgresql.rs | 1 + .../scaleway/databases/redis.rs | 1 + test_utilities/src/common.rs | 61 ++++----- test_utilities/src/utilities.rs | 13 +- tests/aws/aws_databases.rs | 118 +---------------- tests/digitalocean/do_databases.rs | 122 +---------------- tests/scaleway/scw_databases.rs | 124 +----------------- 41 files changed, 87 insertions(+), 405 deletions(-) diff --git a/lib/aws/chart_values/mongodb/q-values.j2.yaml b/lib/aws/chart_values/mongodb/q-values.j2.yaml index dc3bf279..9cfe1154 100644 --- a/lib/aws/chart_values/mongodb/q-values.j2.yaml +++ b/lib/aws/chart_values/mongodb/q-values.j2.yaml @@ -148,6 +148,7 @@ service: type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} # clusterIP: None port: {{ private_port }} + name: {{ service_name }} ## Specify the nodePort value for the LoadBalancer and NodePort service types. ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport diff --git a/lib/aws/chart_values/mysql/q-values.j2.yaml b/lib/aws/chart_values/mysql/q-values.j2.yaml index 226c9814..daa4475d 100644 --- a/lib/aws/chart_values/mysql/q-values.j2.yaml +++ b/lib/aws/chart_values/mysql/q-values.j2.yaml @@ -501,6 +501,7 @@ service: ## MySQL Service type ## type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} + name: {{ service_name }} ## MySQL Service port ## diff --git a/lib/aws/chart_values/postgresql/q-values.j2.yaml b/lib/aws/chart_values/postgresql/q-values.j2.yaml index c3553002..3e908351 100644 --- a/lib/aws/chart_values/postgresql/q-values.j2.yaml +++ b/lib/aws/chart_values/postgresql/q-values.j2.yaml @@ -251,6 +251,7 @@ service: type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} # clusterIP: None port: 5432 + name: {{ service_name }} ## Specify the nodePort value for the LoadBalancer and NodePort service types. ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport diff --git a/lib/aws/chart_values/redis/q-values.j2.yaml b/lib/aws/chart_values/redis/q-values.j2.yaml index 72ae0ccb..007bb33a 100644 --- a/lib/aws/chart_values/redis/q-values.j2.yaml +++ b/lib/aws/chart_values/redis/q-values.j2.yaml @@ -370,6 +370,7 @@ master: ## Redis Master Service type type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} port: 6379 + name: {{ service_name }} ## Specify the nodePort value for the LoadBalancer and NodePort service types. ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport diff --git a/lib/aws/services/mongodb/main.j2.tf b/lib/aws/services/mongodb/main.j2.tf index facbc357..8f20c381 100644 --- a/lib/aws/services/mongodb/main.j2.tf +++ b/lib/aws/services/mongodb/main.j2.tf @@ -50,6 +50,11 @@ resource "helm_release" "documentdb_instance_external_name" { value = "{{database_id}}" } + set { + name = "service_name" + value = "{{service_name}}" + } + depends_on = [ aws_docdb_cluster.documentdb_cluster ] diff --git a/lib/aws/services/mysql/main.j2.tf b/lib/aws/services/mysql/main.j2.tf index 7ca2e1c3..68e84b13 100644 --- a/lib/aws/services/mysql/main.j2.tf +++ b/lib/aws/services/mysql/main.j2.tf @@ -51,6 +51,10 @@ resource "helm_release" "mysql_instance_external_name" { name = "app_id" value = "{{database_id}}" } + set { + name = "service_name" + value = "{{service_name}}" + } depends_on = [ aws_db_instance.mysql_instance diff --git a/lib/aws/services/postgresql/main.j2.tf b/lib/aws/services/postgresql/main.j2.tf index 62a12559..9c0517db 100644 --- a/lib/aws/services/postgresql/main.j2.tf +++ b/lib/aws/services/postgresql/main.j2.tf @@ -51,6 +51,10 @@ resource "helm_release" "postgres_instance_external_name" { name = "app_id" value = "{{database_id}}" } + set { + name = "service_name" + value = "{{service_name}}" + } depends_on = [ aws_db_instance.postgresql_instance diff --git a/lib/aws/services/redis/main.j2.tf b/lib/aws/services/redis/main.j2.tf index a33130cd..5916f425 100644 --- a/lib/aws/services/redis/main.j2.tf +++ b/lib/aws/services/redis/main.j2.tf @@ -50,6 +50,11 @@ resource "helm_release" "elasticache_instance_external_name" { value = "{{database_id}}" } + set { + name = "service_name" + value = "{{service_name}}" + } + set { name= "publicly_accessible" value= {{ publicly_accessible }} diff --git a/lib/common/charts/external-name-svc/templates/external-name-service.yaml b/lib/common/charts/external-name-svc/templates/external-name-service.yaml index d59d9216..91aaec50 100644 --- a/lib/common/charts/external-name-svc/templates/external-name-service.yaml +++ b/lib/common/charts/external-name-svc/templates/external-name-service.yaml @@ -3,7 +3,7 @@ apiVersion: v1 metadata: # This service is used for deployed services that do not have ingress like database # It is used to provide to the end user an endpoint with desired name - name: {{.Values.app_id}}-dns + name: {{ .Values.service_name }} labels: appId: {{.Values.app_id}} {{ if .Values.publicly_accessible }} diff --git a/lib/common/charts/external-name-svc/values.j2.yaml b/lib/common/charts/external-name-svc/values.j2.yaml index 0d103728..6ab34f7c 100644 --- a/lib/common/charts/external-name-svc/values.j2.yaml +++ b/lib/common/charts/external-name-svc/values.j2.yaml @@ -1,4 +1,5 @@ target_hostname: "" source_fqdn: "" +service_name: "" app_id: "" publicly_accessible: {{ publicly_accessible }} \ No newline at end of file diff --git a/lib/common/services/mysql/templates/master-svc.yaml b/lib/common/services/mysql/templates/master-svc.yaml index 24142c32..790f2df5 100644 --- a/lib/common/services/mysql/templates/master-svc.yaml +++ b/lib/common/services/mysql/templates/master-svc.yaml @@ -1,7 +1,7 @@ apiVersion: v1 kind: Service metadata: - name: {{ template "mysql.fullname" . }} + name: {{ .Values.service.name }} labels: {{- include "mysql.labels" . | nindent 4 }} component: master {{- if or .Values.service.annotations .Values.metrics.service.annotations }} diff --git a/lib/common/services/mysql/values.yaml b/lib/common/services/mysql/values.yaml index 97d05aaf..7cc01845 100644 --- a/lib/common/services/mysql/values.yaml +++ b/lib/common/services/mysql/values.yaml @@ -490,6 +490,7 @@ service: ## type: ClusterIP + #name: {{ service_name }} ## MySQL Service port ## port: 3306 diff --git a/lib/common/services/postgresql/templates/svc.yaml b/lib/common/services/postgresql/templates/svc.yaml index d24b2a65..36473cc4 100644 --- a/lib/common/services/postgresql/templates/svc.yaml +++ b/lib/common/services/postgresql/templates/svc.yaml @@ -7,7 +7,7 @@ apiVersion: v1 kind: Service metadata: - name: {{ template "postgresql.fullname" . }} + name: {{ .Values.service.name }} labels: app: {{ template "postgresql.name" . }} chart: {{ template "postgresql.chart" . }} diff --git a/lib/common/services/postgresql/values.yaml b/lib/common/services/postgresql/values.yaml index e4651dae..c2ed1b0a 100644 --- a/lib/common/services/postgresql/values.yaml +++ b/lib/common/services/postgresql/values.yaml @@ -249,6 +249,7 @@ ldap: service: ## PosgresSQL service type type: ClusterIP + name: service_name # clusterIP: None port: 5432 diff --git a/lib/common/services/redis/templates/redis-master-svc.yaml b/lib/common/services/redis/templates/redis-master-svc.yaml index 94fcce20..b44adb2d 100644 --- a/lib/common/services/redis/templates/redis-master-svc.yaml +++ b/lib/common/services/redis/templates/redis-master-svc.yaml @@ -2,7 +2,7 @@ apiVersion: v1 kind: Service metadata: - name: {{ template "redis.fullname" . }}-master + name: {{ .Values.master.service.name }} namespace: {{ .Release.Namespace | quote }} labels: app: {{ template "redis.name" . }} diff --git a/lib/common/services/redis/values.yaml b/lib/common/services/redis/values.yaml index fb92acb3..d994d649 100644 --- a/lib/common/services/redis/values.yaml +++ b/lib/common/services/redis/values.yaml @@ -362,6 +362,7 @@ master: service: ## Redis Master Service type type: ClusterIP + name: service_name port: 6379 ## Specify the nodePort value for the LoadBalancer and NodePort service types. diff --git a/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml b/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml index f1c032c7..39ceece2 100644 --- a/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml @@ -151,6 +151,7 @@ service: type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} # clusterIP: None port: {{ private_port }} + name: {{ service_name }} ## Specify the nodePort value for the LoadBalancer and NodePort service types. ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport diff --git a/lib/digitalocean/chart_values/mysql/q-values.j2.yaml b/lib/digitalocean/chart_values/mysql/q-values.j2.yaml index d6247355..c51c70a0 100644 --- a/lib/digitalocean/chart_values/mysql/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/mysql/q-values.j2.yaml @@ -501,6 +501,7 @@ service: ## MySQL Service type ## type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} + name: {{ service_name }} ## MySQL Service port ## diff --git a/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml b/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml index 93c967d3..c61ac44d 100644 --- a/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml @@ -251,6 +251,7 @@ service: type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} # clusterIP: None port: 5432 + name: {{ service_name }} ## Specify the nodePort value for the LoadBalancer and NodePort service types. ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport diff --git a/lib/digitalocean/chart_values/redis/q-values.j2.yaml b/lib/digitalocean/chart_values/redis/q-values.j2.yaml index 70b91f04..3cb4c035 100644 --- a/lib/digitalocean/chart_values/redis/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/redis/q-values.j2.yaml @@ -370,6 +370,7 @@ master: ## Redis Master Service type type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} port: 6379 + name: {{ service_name }} ## Specify the nodePort value for the LoadBalancer and NodePort service types. ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport diff --git a/lib/scaleway/chart_values/mongodb/q-values.j2.yaml b/lib/scaleway/chart_values/mongodb/q-values.j2.yaml index 95da012f..ad642d12 100644 --- a/lib/scaleway/chart_values/mongodb/q-values.j2.yaml +++ b/lib/scaleway/chart_values/mongodb/q-values.j2.yaml @@ -89,6 +89,7 @@ service: type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} # clusterIP: None port: {{ private_port }} + name: {{ service_name }} ## Specify the nodePort value for the LoadBalancer and NodePort service types. ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport diff --git a/lib/scaleway/chart_values/mysql/q-values.j2.yaml b/lib/scaleway/chart_values/mysql/q-values.j2.yaml index c4bf58c0..e5d05db4 100644 --- a/lib/scaleway/chart_values/mysql/q-values.j2.yaml +++ b/lib/scaleway/chart_values/mysql/q-values.j2.yaml @@ -480,6 +480,7 @@ service: ## type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} + name: {{ service_name }} ## MySQL Service port ## port: 3306 diff --git a/lib/scaleway/chart_values/postgresql/q-values.j2.yaml b/lib/scaleway/chart_values/postgresql/q-values.j2.yaml index 96b5dafe..81ed0bb3 100644 --- a/lib/scaleway/chart_values/postgresql/q-values.j2.yaml +++ b/lib/scaleway/chart_values/postgresql/q-values.j2.yaml @@ -123,6 +123,7 @@ service: type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} # clusterIP: None port: 5432 + name: {{ service_name }} ## Provide any additional annotations which may be required. Evaluated as a template. ## diff --git a/lib/scaleway/chart_values/redis/q-values.j2.yaml b/lib/scaleway/chart_values/redis/q-values.j2.yaml index 92c30306..5c85e762 100644 --- a/lib/scaleway/chart_values/redis/q-values.j2.yaml +++ b/lib/scaleway/chart_values/redis/q-values.j2.yaml @@ -327,6 +327,7 @@ master: ## Redis Master Service type type: {% if publicly_accessible -%} LoadBalancer {% else -%} ClusterIP {% endif %} port: 6379 + name: {{ service_name }} ## Specify the nodePort value for the LoadBalancer and NodePort service types. ## ref: https://kubernetes.io/docs/concepts/services-networking/service/#type-nodeport diff --git a/src/cloud_provider/aws/databases/mongodb.rs b/src/cloud_provider/aws/databases/mongodb.rs index ad2d5d16..4a8fe8ad 100644 --- a/src/cloud_provider/aws/databases/mongodb.rs +++ b/src/cloud_provider/aws/databases/mongodb.rs @@ -191,6 +191,7 @@ impl Service for MongoDB { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_db_name", self.name.as_str()); context.insert("database_login", self.options.login.as_str()); context.insert("database_password", self.options.password.as_str()); diff --git a/src/cloud_provider/aws/databases/mysql.rs b/src/cloud_provider/aws/databases/mysql.rs index e5c451f2..50efe1ca 100644 --- a/src/cloud_provider/aws/databases/mysql.rs +++ b/src/cloud_provider/aws/databases/mysql.rs @@ -212,6 +212,7 @@ impl Service for MySQL { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_login", self.options.login.as_str()); context.insert("database_password", self.options.password.as_str()); context.insert("database_port", &self.private_port()); diff --git a/src/cloud_provider/aws/databases/postgresql.rs b/src/cloud_provider/aws/databases/postgresql.rs index ee66bcb2..a2700399 100644 --- a/src/cloud_provider/aws/databases/postgresql.rs +++ b/src/cloud_provider/aws/databases/postgresql.rs @@ -197,6 +197,7 @@ impl Service for PostgreSQL { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_name", self.sanitized_name().as_str()); context.insert("database_db_name", self.name()); context.insert("database_login", self.options.login.as_str()); diff --git a/src/cloud_provider/aws/databases/redis.rs b/src/cloud_provider/aws/databases/redis.rs index b45d45c9..3f485356 100644 --- a/src/cloud_provider/aws/databases/redis.rs +++ b/src/cloud_provider/aws/databases/redis.rs @@ -213,6 +213,7 @@ impl Service for Redis { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_login", self.options.login.as_str()); context.insert("database_password", self.options.password.as_str()); context.insert("database_port", &self.private_port()); diff --git a/src/cloud_provider/digitalocean/databases/mongodb.rs b/src/cloud_provider/digitalocean/databases/mongodb.rs index 84357d13..019c7cbe 100644 --- a/src/cloud_provider/digitalocean/databases/mongodb.rs +++ b/src/cloud_provider/digitalocean/databases/mongodb.rs @@ -188,6 +188,7 @@ impl Service for MongoDB { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_db_name", self.name.as_str()); context.insert("database_login", self.options.login.as_str()); context.insert("database_password", self.options.password.as_str()); diff --git a/src/cloud_provider/digitalocean/databases/mysql.rs b/src/cloud_provider/digitalocean/databases/mysql.rs index 00bba0f2..b6ccb010 100644 --- a/src/cloud_provider/digitalocean/databases/mysql.rs +++ b/src/cloud_provider/digitalocean/databases/mysql.rs @@ -188,6 +188,7 @@ impl Service for MySQL { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_login", self.options.login.as_str()); context.insert("database_password", self.options.password.as_str()); context.insert("database_port", &self.private_port()); diff --git a/src/cloud_provider/digitalocean/databases/postgresql.rs b/src/cloud_provider/digitalocean/databases/postgresql.rs index b7efc14a..f489bdf4 100644 --- a/src/cloud_provider/digitalocean/databases/postgresql.rs +++ b/src/cloud_provider/digitalocean/databases/postgresql.rs @@ -188,6 +188,7 @@ impl Service for PostgreSQL { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_db_name", self.name()); context.insert("database_login", self.options.login.as_str()); context.insert("database_password", self.options.password.as_str()); diff --git a/src/cloud_provider/digitalocean/databases/redis.rs b/src/cloud_provider/digitalocean/databases/redis.rs index 527cc38e..02f04f75 100644 --- a/src/cloud_provider/digitalocean/databases/redis.rs +++ b/src/cloud_provider/digitalocean/databases/redis.rs @@ -188,6 +188,7 @@ impl Service for Redis { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_login", self.options.login.as_str()); context.insert("database_password", self.options.password.as_str()); context.insert("database_port", &self.private_port()); diff --git a/src/cloud_provider/scaleway/databases/mongodb.rs b/src/cloud_provider/scaleway/databases/mongodb.rs index d3303924..74f5f131 100644 --- a/src/cloud_provider/scaleway/databases/mongodb.rs +++ b/src/cloud_provider/scaleway/databases/mongodb.rs @@ -189,6 +189,7 @@ impl Service for MongoDB { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_db_name", self.name.as_str()); context.insert("database_login", self.options.login.as_str()); context.insert("database_password", self.options.password.as_str()); diff --git a/src/cloud_provider/scaleway/databases/mysql.rs b/src/cloud_provider/scaleway/databases/mysql.rs index c7bec2c8..d59e6dcb 100644 --- a/src/cloud_provider/scaleway/databases/mysql.rs +++ b/src/cloud_provider/scaleway/databases/mysql.rs @@ -221,6 +221,7 @@ impl Service for MySQL { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_login", self.options.login.as_str()); context.insert("database_password", self.options.password.as_str()); context.insert("database_port", &self.private_port()); diff --git a/src/cloud_provider/scaleway/databases/postgresql.rs b/src/cloud_provider/scaleway/databases/postgresql.rs index f39f1610..2197730c 100644 --- a/src/cloud_provider/scaleway/databases/postgresql.rs +++ b/src/cloud_provider/scaleway/databases/postgresql.rs @@ -230,6 +230,7 @@ impl Service for PostgreSQL { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_name", self.sanitized_name().as_str()); context.insert("database_db_name", self.name()); context.insert("database_login", self.options.login.as_str()); diff --git a/src/cloud_provider/scaleway/databases/redis.rs b/src/cloud_provider/scaleway/databases/redis.rs index 4ca2f11a..9c39a2b3 100644 --- a/src/cloud_provider/scaleway/databases/redis.rs +++ b/src/cloud_provider/scaleway/databases/redis.rs @@ -189,6 +189,7 @@ impl Service for Redis { "fqdn", self.fqdn(target, &self.fqdn, self.is_managed_service()).as_str(), ); + context.insert("service_name", self.fqdn_id.as_str()); context.insert("database_login", self.options.login.as_str()); context.insert("database_password", self.options.password.as_str()); context.insert("database_port", &self.private_port()); diff --git a/test_utilities/src/common.rs b/test_utilities/src/common.rs index 2ace4cc2..fe8dfe0b 100644 --- a/test_utilities/src/common.rs +++ b/test_utilities/src/common.rs @@ -215,7 +215,6 @@ pub fn environment_3_apps_3_routers_3_databases( let version_mongo = "4.4"; // pSQL 1 management part - let fqdn_id = "my-postgresql-".to_string() + generate_id().as_str(); let fqdn = get_svc_name(DatabaseKind::Postgresql, provider_kind.clone()).to_string(); let database_port = 5432; let database_username = "superuser".to_string(); @@ -223,7 +222,6 @@ pub fn environment_3_apps_3_routers_3_databases( let database_name = "postgres".to_string(); // pSQL 2 management part - let fqdn_id_2 = "my-postgresql-2".to_string() + generate_id().as_str(); let fqdn_2 = format!("{}2", get_svc_name(DatabaseKind::Postgresql, provider_kind.clone())); let database_username_2 = "superuser2".to_string(); let database_name_2 = "postgres2".to_string(); @@ -425,7 +423,7 @@ pub fn environment_3_apps_3_routers_3_databases( id: generate_id(), name: database_name.clone(), version: "11.8.0".to_string(), - fqdn_id: fqdn_id.clone(), + fqdn_id: fqdn.clone(), fqdn: fqdn.clone(), port: database_port.clone(), username: database_username.clone(), @@ -447,7 +445,7 @@ pub fn environment_3_apps_3_routers_3_databases( id: generate_id(), name: database_name_2.clone(), version: "11.8.0".to_string(), - fqdn_id: fqdn_id_2.clone(), + fqdn_id: fqdn_2.clone(), fqdn: fqdn_2.clone(), port: database_port.clone(), username: database_username_2.clone(), @@ -469,7 +467,7 @@ pub fn environment_3_apps_3_routers_3_databases( id: generate_id(), name: database_db_name_mongo.clone(), version: version_mongo.to_string(), - fqdn_id: "mongodb-".to_string() + generate_id().as_str(), + fqdn_id: database_host_mongo.clone(), fqdn: database_host_mongo.clone(), port: database_port_mongo.clone(), username: database_username_mongo.clone(), @@ -572,13 +570,11 @@ pub fn environment_only_http_server_router_with_sticky_session(context: &Context pub fn environnement_2_app_2_routers_1_psql( context: &Context, - test_domain: &str, database_instance_type: &str, database_disk_type: &str, provider_kind: Kind, ) -> Environment { - let fqdn_id = "my-postgresql-".to_string() + generate_id().as_str(); let fqdn = get_svc_name(DatabaseKind::Postgresql, provider_kind.clone()).to_string(); let database_port = 5432; @@ -603,7 +599,7 @@ pub fn environnement_2_app_2_routers_1_psql( id: generate_id(), name: database_name.clone(), version: "11.8.0".to_string(), - fqdn_id: fqdn_id.clone(), + fqdn_id: fqdn.clone(), fqdn: fqdn.clone(), port: database_port.clone(), username: database_username.clone(), @@ -992,44 +988,42 @@ pub fn test_db( let database_username = "superuser".to_string(); let database_password = generate_id(); let db_kind_str = db_kind.name().to_string(); - let database_host = format!( - "{}-{}.{}.{}", - db_kind_str.clone(), - generate_id(), + let db_id = generate_id(); + let database_host = format!("{}-{}", db_id, db_kind_str.clone()); + let database_fqdn = format!( + "{}.{}.{}", + database_host, context.cluster_id(), secrets .clone() .DEFAULT_TEST_DOMAIN .expect("DEFAULT_TEST_DOMAIN is not set in secrets") ); - let dyn_db_fqdn = match is_public.clone() { - true => database_host.clone(), - false => match database_mode.clone() { - DatabaseMode::MANAGED => format!("{}-dns", app_id.clone()), - DatabaseMode::CONTAINER => get_svc_name(db_kind.clone(), provider_kind.clone()).to_string(), - }, - }; let db_infos = db_infos( db_kind.clone(), + db_id.clone(), database_mode.clone(), database_username.clone(), database_password.clone(), - dyn_db_fqdn.clone(), + if is_public { + database_fqdn.clone() + } else { + database_host.clone() + }, ); let database_port = db_infos.db_port.clone(); - let database_db_name = db_infos.db_name.clone(); let storage_size = 10; let db_disk_type = db_disk_type(provider_kind.clone(), database_mode.clone()); let db_instance_type = db_instance_type(provider_kind.clone(), db_kind.clone(), database_mode.clone()); let db = Database { kind: db_kind.clone(), action: Action::Create, - id: app_id.clone(), - name: database_db_name.clone(), + id: db_id.clone(), + name: db_id.clone(), version: version.to_string(), - fqdn_id: format!("{}-{}", db_kind_str.clone(), generate_id()), - fqdn: database_host.clone(), + fqdn_id: database_host.clone(), + fqdn: database_fqdn.clone(), port: database_port.clone(), username: database_username.clone(), password: database_password.clone(), @@ -1052,6 +1046,8 @@ pub fn test_db( .applications .into_iter() .map(|mut app| { + app.id = app_id.clone(); + app.name = app_id.clone(); app.branch = app_name.clone(); app.commit_id = db_infos.app_commit.clone(); app.ports = vec![Port { @@ -1068,7 +1064,7 @@ pub fn test_db( app }) .collect::>(); - environment.routers[0].routes[0].application_name = app_name.clone(); + environment.routers[0].routes[0].application_name = app_id.clone(); let mut environment_delete = environment.clone(); environment_delete.action = Action::Delete; @@ -1106,11 +1102,7 @@ pub fn test_db( svc.items .expect("No items in svc") .into_iter() - .filter(|svc| svc - .metadata - .name - .contains(get_svc_name(db_kind.clone(), provider_kind.clone())) - && &svc.spec.svc_type == "LoadBalancer") + .filter(|svc| svc.metadata.name == database_host && &svc.spec.svc_type == "LoadBalancer") .collect::>() .len(), match is_public { @@ -1128,17 +1120,14 @@ pub fn test_db( .items .expect("No items in svc") .into_iter() - .filter(|svc| { - svc.metadata.name.contains(format!("{}-dns", app_id.clone()).as_str()) - && svc.spec.svc_type == "ExternalName" - }) + .filter(|svc| svc.metadata.name == database_host && svc.spec.svc_type == "ExternalName") .collect::>(); let annotations = &service[0].metadata.annotations; assert_eq!(service.len(), 1); match is_public { true => { assert!(annotations.contains_key("external-dns.alpha.kubernetes.io/hostname")); - assert_eq!(annotations["external-dns.alpha.kubernetes.io/hostname"], database_host); + assert_eq!(annotations["external-dns.alpha.kubernetes.io/hostname"], database_fqdn); } false => assert!(!annotations.contains_key("external-dns.alpha.kubernetes.io/hostname")), } diff --git a/test_utilities/src/utilities.rs b/test_utilities/src/utilities.rs index e967e8e7..91d11138 100644 --- a/test_utilities/src/utilities.rs +++ b/test_utilities/src/utilities.rs @@ -979,6 +979,7 @@ pub struct DBInfos { pub fn db_infos( db_kind: DatabaseKind, + db_id: String, database_mode: DatabaseMode, database_username: String, database_password: String, @@ -987,7 +988,7 @@ pub fn db_infos( match db_kind { DatabaseKind::Mongodb => { let database_port = 27017; - let database_db_name = "my-mongodb".to_string(); + let database_db_name = db_id; let database_uri = format!( "mongodb://{}:{}@{}:{}/{}", database_username, @@ -1013,7 +1014,7 @@ pub fn db_infos( } DatabaseKind::Mysql => { let database_port = 3306; - let database_db_name = "mysqldatabase".to_string(); + let database_db_name = db_id; DBInfos { db_port: database_port.clone(), db_name: database_db_name.to_string(), @@ -1029,7 +1030,11 @@ pub fn db_infos( } DatabaseKind::Postgresql => { let database_port = 5432; - let database_db_name = "postgres".to_string(); + let database_db_name = if database_mode == MANAGED { + "postgres".to_string() + } else { + db_id + }; DBInfos { db_port: database_port.clone(), db_name: database_db_name.to_string(), @@ -1045,7 +1050,7 @@ pub fn db_infos( } DatabaseKind::Redis => { let database_port = 6379; - let database_db_name = "my-redis".to_string(); + let database_db_name = db_id; DBInfos { db_port: database_port.clone(), db_name: database_db_name.to_string(), diff --git a/tests/aws/aws_databases.rs b/tests/aws/aws_databases.rs index a20438c7..2ddf45c3 100644 --- a/tests/aws/aws_databases.rs +++ b/tests/aws/aws_databases.rs @@ -157,122 +157,6 @@ fn deploy_an_environment_with_db_and_pause_it() { }) } -// this test ensure containers databases are never restarted, even in failover environment case -#[cfg(feature = "test-aws-self-hosted")] -#[named] -#[test] -fn postgresql_failover_dev_environment_with_all_options() { - let test_name = function_name!(); - engine_run_test(|| { - init(); - - let span = span!(Level::INFO, "test", name = test_name); - let _enter = span.enter(); - - let secrets = FuncTestsSecrets::new(); - let logger = logger(); - let context = context( - secrets - .AWS_TEST_ORGANIZATION_ID - .as_ref() - .expect("AWS_TEST_ORGANIZATION_ID is not set") - .as_str(), - secrets - .AWS_TEST_CLUSTER_ID - .as_ref() - .expect("AWS_TEST_CLUSTER_ID is not set") - .as_str(), - ); - let context_for_deletion = context.clone_not_same_execution_id(); - let test_domain = secrets - .clone() - .DEFAULT_TEST_DOMAIN - .expect("DEFAULT_TEST_DOMAIN is not set in secrets"); - - let environment = test_utilities::common::environnement_2_app_2_routers_1_psql( - &context, - test_domain.as_str(), - AWS_DATABASE_INSTANCE_TYPE, - AWS_DATABASE_DISK_TYPE, - Kind::Aws, - ); - let environment_check = environment.clone(); - let mut environment_never_up = environment.clone(); - // error in ports, these applications will never be up !! - environment_never_up.applications = environment_never_up - .applications - .into_iter() - .map(|mut app| { - app.ports = vec![Port { - id: "zdf7d6aad".to_string(), - long_id: Default::default(), - port: 4789, - public_port: Some(443), - name: None, - publicly_accessible: true, - protocol: Protocol::HTTP, - }]; - app - }) - .collect::>(); - let mut environment_delete = test_utilities::common::environnement_2_app_2_routers_1_psql( - &context_for_deletion, - test_domain.as_str(), - AWS_DATABASE_INSTANCE_TYPE, - AWS_DATABASE_DISK_TYPE, - Kind::Aws, - ); - - environment_delete.action = Action::Delete; - - let ea = EnvironmentAction::Environment(environment.clone()); - let ea_fail_ok = EnvironmentAction::EnvironmentWithFailover(environment_never_up.clone(), environment.clone()); - let ea_for_deletion = EnvironmentAction::Environment(environment_delete.clone()); - - match environment.deploy_environment(Kind::Aws, &context, &ea, logger.clone()) { - TransactionResult::Ok => assert!(true), - TransactionResult::Rollback(_) => assert!(false), - TransactionResult::UnrecoverableError(_, _) => assert!(false), - }; - // TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY - let database_name = format!("postgresql{}-0", &environment_check.databases[0].name); - match is_pod_restarted_env( - context.clone(), - Kind::Aws, - environment_check.clone(), - database_name.as_str(), - secrets.clone(), - ) { - (true, _) => assert!(true), - (false, _) => assert!(false), - } - match environment_never_up.deploy_environment(Kind::Aws, &context, &ea_fail_ok, logger.clone()) { - TransactionResult::Ok => assert!(false), - TransactionResult::Rollback(_) => assert!(true), - TransactionResult::UnrecoverableError(_, _) => assert!(false), - }; - // TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY EVEN IF FAIL - match is_pod_restarted_env( - context.clone(), - Kind::Aws, - environment_check.clone(), - database_name.as_str(), - secrets.clone(), - ) { - (true, _) => assert!(true), - (false, _) => assert!(false), - } - - match environment_delete.delete_environment(Kind::Aws, &context_for_deletion, &ea_for_deletion, logger) { - TransactionResult::Ok => assert!(true), - TransactionResult::Rollback(_) => assert!(false), - TransactionResult::UnrecoverableError(_, _) => assert!(false), - }; - - return test_name.to_string(); - }) -} - // Ensure a full environment can run correctly #[cfg(feature = "test-aws-self-hosted")] #[named] @@ -398,7 +282,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() { id: generate_id(), name: database_db_name.clone(), version: "11.8.0".to_string(), - fqdn_id: "postgresql-".to_string() + generate_id().as_str(), + fqdn_id: database_host.clone(), fqdn: database_host.clone(), port: database_port, username: database_username.clone(), diff --git a/tests/digitalocean/do_databases.rs b/tests/digitalocean/do_databases.rs index 3c96542b..7ce4492a 100644 --- a/tests/digitalocean/do_databases.rs +++ b/tests/digitalocean/do_databases.rs @@ -166,126 +166,6 @@ fn deploy_an_environment_with_db_and_pause_it() { }) } -// this test ensure containers databases are never restarted, even in failover environment case -#[cfg(feature = "test-do-self-hosted")] -#[named] -#[test] -fn postgresql_failover_dev_environment_with_all_options() { - let test_name = function_name!(); - engine_run_test(|| { - init(); - - let span = span!(Level::INFO, "test", name = test_name); - let _enter = span.enter(); - - let secrets = FuncTestsSecrets::new(); - let logger = logger(); - let context = context( - secrets - .DIGITAL_OCEAN_TEST_ORGANIZATION_ID - .as_ref() - .expect("DIGITAL_OCEAN_TEST_ORGANIZATION_ID is not set"), - secrets - .DIGITAL_OCEAN_TEST_CLUSTER_ID - .as_ref() - .expect("DIGITAL_OCEAN_TEST_CLUSTER_ID is not set"), - ); - let context_for_deletion = context.clone_not_same_execution_id(); - let test_domain = secrets - .clone() - .DEFAULT_TEST_DOMAIN - .expect("DEFAULT_TEST_DOMAIN is not set in secrets"); - - let environment = test_utilities::common::environnement_2_app_2_routers_1_psql( - &context, - test_domain.as_str(), - DO_SELF_HOSTED_DATABASE_INSTANCE_TYPE, - DO_SELF_HOSTED_DATABASE_DISK_TYPE, - Kind::Do, - ); - let environment_check = environment.clone(); - let mut environment_never_up = environment.clone(); - // error in ports, these applications will never be up !! - environment_never_up.applications = environment_never_up - .applications - .into_iter() - .map(|mut app| { - app.ports = vec![Port { - id: "zdf7d6aad".to_string(), - long_id: Default::default(), - port: 4789, - public_port: Some(443), - name: None, - publicly_accessible: true, - protocol: Protocol::HTTP, - }]; - app - }) - .collect::>(); - let mut environment_delete = test_utilities::common::environnement_2_app_2_routers_1_psql( - &context_for_deletion, - test_domain.as_str(), - DO_SELF_HOSTED_DATABASE_INSTANCE_TYPE, - DO_SELF_HOSTED_DATABASE_DISK_TYPE, - Kind::Do, - ); - - environment_delete.action = Action::Delete; - - let env_action = EnvironmentAction::Environment(environment.clone()); - let env_action_fail_ok = - EnvironmentAction::EnvironmentWithFailover(environment_never_up.clone(), environment.clone()); - let env_action_for_deletion = EnvironmentAction::Environment(environment_delete.clone()); - - match environment.deploy_environment(Kind::Do, &context, &env_action, logger.clone()) { - TransactionResult::Ok => assert!(true), - TransactionResult::Rollback(_) => assert!(false), - TransactionResult::UnrecoverableError(_, _) => assert!(false), - }; - // TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY - let database_name = format!("postgresql-{}-0", &environment_check.databases[0].name); - match is_pod_restarted_env( - context.clone(), - ProviderKind::Do, - environment_check.clone(), - database_name.as_str(), - secrets.clone(), - ) { - (true, _) => assert!(true), - (false, _) => assert!(false), - } - match environment_never_up.deploy_environment(Kind::Do, &context, &env_action_fail_ok, logger.clone()) { - TransactionResult::Ok => assert!(false), - TransactionResult::Rollback(_) => assert!(true), - TransactionResult::UnrecoverableError(_, _) => assert!(false), - }; - // TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY EVEN IF FAIL - match is_pod_restarted_env( - context.clone(), - ProviderKind::Do, - environment_check.clone(), - database_name.as_str(), - secrets.clone(), - ) { - (true, _) => assert!(true), - (false, _) => assert!(false), - } - - match environment_delete.delete_environment(Kind::Do, &context_for_deletion, &env_action_for_deletion, logger) { - TransactionResult::Ok => assert!(true), - TransactionResult::Rollback(_) => assert!(false), - TransactionResult::UnrecoverableError(_, _) => assert!(false), - }; - - // delete images created during test from registries - if let Err(e) = clean_environments(&context, vec![environment, environment_delete], secrets, DO_TEST_REGION) { - warn!("cannot clean environments, error: {:?}", e); - } - - return test_name.to_string(); - }) -} - // Ensure a full environment can run correctly #[cfg(feature = "test-do-self-hosted")] #[named] @@ -418,7 +298,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() { id: generate_id(), name: database_db_name.clone(), version: "11.8.0".to_string(), - fqdn_id: "postgresql-".to_string() + generate_id().as_str(), + fqdn_id: database_host.clone(), fqdn: database_host.clone(), port: database_port, username: database_username.clone(), diff --git a/tests/scaleway/scw_databases.rs b/tests/scaleway/scw_databases.rs index 6caed734..baa46b4d 100644 --- a/tests/scaleway/scw_databases.rs +++ b/tests/scaleway/scw_databases.rs @@ -177,128 +177,6 @@ fn deploy_an_environment_with_db_and_pause_it() { }) } -// this test ensure containers databases are never restarted, even in failover environment case -#[cfg(feature = "test-scw-self-hosted")] -#[named] -#[test] -fn postgresql_failover_dev_environment_with_all_options() { - let test_name = function_name!(); - engine_run_test(|| { - init(); - - let span = span!(Level::INFO, "test", name = test_name); - let _enter = span.enter(); - - let logger = logger(); - let secrets = FuncTestsSecrets::new(); - let context = context( - secrets - .SCALEWAY_TEST_ORGANIZATION_ID - .as_ref() - .expect("SCALEWAY_TEST_ORGANIZATION_ID") - .as_str(), - secrets - .SCALEWAY_TEST_CLUSTER_ID - .as_ref() - .expect("SCALEWAY_TEST_CLUSTER_ID") - .as_str(), - ); - let context_for_deletion = context.clone_not_same_execution_id(); - let test_domain = secrets - .clone() - .DEFAULT_TEST_DOMAIN - .expect("DEFAULT_TEST_DOMAIN is not set in secrets"); - - let environment = test_utilities::common::environnement_2_app_2_routers_1_psql( - &context, - test_domain.as_str(), - SCW_SELF_HOSTED_DATABASE_INSTANCE_TYPE, - SCW_SELF_HOSTED_DATABASE_DISK_TYPE, - Kind::Scw, - ); - let environment_check = environment.clone(); - let mut environment_never_up = environment.clone(); - // error in ports, these applications will never be up !! - environment_never_up.applications = environment_never_up - .applications - .into_iter() - .map(|mut app| { - app.ports = vec![Port { - id: "zdf7d6aad".to_string(), - long_id: Default::default(), - port: 4789, - public_port: Some(443), - name: None, - publicly_accessible: true, - protocol: Protocol::HTTP, - }]; - app - }) - .collect::>(); - let mut environment_delete = test_utilities::common::environnement_2_app_2_routers_1_psql( - &context_for_deletion, - test_domain.as_str(), - SCW_SELF_HOSTED_DATABASE_INSTANCE_TYPE, - SCW_SELF_HOSTED_DATABASE_DISK_TYPE, - Kind::Scw, - ); - - environment_delete.action = Action::Delete; - - let env_action = EnvironmentAction::Environment(environment.clone()); - let env_action_fail_ok = EnvironmentAction::EnvironmentWithFailover(environment_never_up, environment.clone()); - let env_action_for_deletion = EnvironmentAction::Environment(environment_delete.clone()); - - match environment.deploy_environment(Kind::Scw, &context, &env_action, logger.clone()) { - TransactionResult::Ok => assert!(true), - TransactionResult::Rollback(_) => assert!(false), - TransactionResult::UnrecoverableError(_, _) => assert!(false), - }; - // TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY - let database_name = format!("postgresql-{}-0", &environment_check.databases[0].name); - match is_pod_restarted_env( - context.clone(), - ProviderKind::Scw, - environment_check.clone(), - database_name.as_str(), - secrets.clone(), - ) { - (true, _) => assert!(true), - (false, _) => assert!(false), - } - match environment_check.deploy_environment(Kind::Scw, &context, &env_action_fail_ok, logger.clone()) { - TransactionResult::Ok => assert!(false), - TransactionResult::Rollback(_) => assert!(true), - TransactionResult::UnrecoverableError(_, _) => assert!(false), - }; - // TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY EVEN IF FAIL - match is_pod_restarted_env( - context.clone(), - ProviderKind::Scw, - environment_check.clone(), - database_name.as_str(), - secrets.clone(), - ) { - (true, _) => assert!(true), - (false, _) => assert!(false), - } - - match environment_delete.delete_environment(Kind::Scw, &context_for_deletion, &env_action_for_deletion, logger) - { - TransactionResult::Ok => assert!(true), - TransactionResult::Rollback(_) => assert!(false), - TransactionResult::UnrecoverableError(_, _) => assert!(false), - }; - - // delete images created during test from registries - if let Err(e) = clean_environments(&context, vec![environment, environment_delete], secrets, SCW_TEST_ZONE) { - warn!("cannot clean environments, error: {:?}", e); - } - - return test_name.to_string(); - }) -} - // Ensure a full environment can run correctly #[cfg(feature = "test-scw-self-hosted")] #[named] @@ -431,7 +309,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() { id: generate_id(), name: database_db_name.clone(), version: "11.8.0".to_string(), - fqdn_id: "postgresql-".to_string() + generate_id().as_str(), + fqdn_id: database_host.clone(), fqdn: database_host.clone(), port: database_port, username: database_username.clone(),