From 4f2685e8415f3d7cdbd5c0f134ccecb4c9bba95c Mon Sep 17 00:00:00 2001 From: BenjaminCh Date: Thu, 28 Apr 2022 11:23:23 +0200 Subject: [PATCH 01/10] fix: prevent error message leak (#700) --- src/cloud_provider/aws/kubernetes/mod.rs | 36 +++++------ .../digitalocean/kubernetes/mod.rs | 59 ++++++++----------- src/cloud_provider/scaleway/kubernetes/mod.rs | 19 +++--- 3 files changed, 52 insertions(+), 62 deletions(-) diff --git a/src/cloud_provider/aws/kubernetes/mod.rs b/src/cloud_provider/aws/kubernetes/mod.rs index 89816f5b..79faf7f3 100644 --- a/src/cloud_provider/aws/kubernetes/mod.rs +++ b/src/cloud_provider/aws/kubernetes/mod.rs @@ -1159,13 +1159,10 @@ impl EKS { event_details.clone(), EventMessage::new_from_safe(format!("Chart `{}` deleted", chart.name)), )), - Err(e) => { - let message_safe = format!("Can't delete chart `{}`: {}", &chart.name, e); - self.logger().log(EngineEvent::Warning( - event_details.clone(), - EventMessage::new(message_safe, Some(e.to_string())), - )) - } + Err(e) => self.logger().log(EngineEvent::Warning( + event_details.clone(), + EventMessage::new(format!("Can't delete chart `{}`", &chart.name), Some(e.to_string())), + )), } } } @@ -1211,23 +1208,20 @@ impl EKS { event_details.clone(), EventMessage::new_from_safe(format!("Chart `{}` deleted", chart.name)), )), - Err(e) => { - let message_safe = format!("Error deleting chart `{}`: {}", chart.name, e); - self.logger().log(EngineEvent::Warning( - event_details.clone(), - EventMessage::new(message_safe, Some(e.to_string())), - )) - } + Err(e) => self.logger().log(EngineEvent::Warning( + event_details.clone(), + EventMessage::new( + format!("Error deleting chart `{}`", chart.name), + Some(e.to_string()), + ), + )), } } } - Err(e) => { - let message_safe = "Unable to get helm list"; - self.logger().log(EngineEvent::Warning( - event_details.clone(), - EventMessage::new(message_safe.to_string(), Some(e.to_string())), - )) - } + Err(e) => self.logger().log(EngineEvent::Warning( + event_details.clone(), + EventMessage::new("Unable to get helm list".to_string(), Some(e.to_string())), + )), } }; diff --git a/src/cloud_provider/digitalocean/kubernetes/mod.rs b/src/cloud_provider/digitalocean/kubernetes/mod.rs index 4afe105d..d9795030 100644 --- a/src/cloud_provider/digitalocean/kubernetes/mod.rs +++ b/src/cloud_provider/digitalocean/kubernetes/mod.rs @@ -463,7 +463,7 @@ impl DOKS { )); self.logger().log(EngineEvent::Info( event_details.clone(), - EventMessage::new_from_safe("Preparing DOKS cluster deployment.".to_string()), + EventMessage::new_from_safe("Preparing cluster deployment.".to_string()), )); // upgrade cluster instead if required @@ -533,7 +533,7 @@ impl DOKS { self.logger().log(EngineEvent::Info( event_details.clone(), - EventMessage::new_from_safe("Deploying DOKS cluster.".to_string()), + EventMessage::new_from_safe("Deploying cluster.".to_string()), )); self.send_to_customer( format!("Deploying DOKS {} cluster deployment with id {}", self.name(), self.id()).as_str(), @@ -550,7 +550,7 @@ impl DOKS { match terraform_exec(temp_dir.as_str(), vec!["state", "rm", &entry]) { Ok(_) => self.logger().log(EngineEvent::Info( event_details.clone(), - EventMessage::new_from_safe(format!("successfully removed {}", &entry)), + EventMessage::new_from_safe(format!("Successfully removed {}", &entry)), )), Err(e) => { return Err(EngineError::new_terraform_cannot_remove_entry_out( @@ -802,7 +802,7 @@ impl DOKS { ); self.logger().log(EngineEvent::Info( event_details.clone(), - EventMessage::new_from_safe("Preparing to delete DOKS cluster.".to_string()), + EventMessage::new_from_safe("Preparing to delete cluster.".to_string()), )); let temp_dir = match self.get_temp_dir(event_details.clone()) { @@ -923,13 +923,12 @@ impl DOKS { } } Err(e) => { - let message_safe = format!( - "Error while getting all namespaces for Kubernetes cluster {}", - self.name_with_id(), - ); self.logger().log(EngineEvent::Warning( event_details.clone(), - EventMessage::new(message_safe, Some(e.message(ErrorMessageVerbosity::FullDetails))), + EventMessage::new( + "Error while getting all namespaces for Kubernetes cluster".to_string(), + Some(e.message(ErrorMessageVerbosity::FullDetailsWithoutEnvVars)), + ), )); } } @@ -976,13 +975,10 @@ impl DOKS { event_details.clone(), EventMessage::new_from_safe(format!("Chart `{}` deleted", chart.name)), )), - Err(e) => { - let message_safe = format!("Can't delete chart `{}`", chart.name); - self.logger().log(EngineEvent::Warning( - event_details.clone(), - EventMessage::new(message_safe, Some(e.to_string())), - )) - } + Err(e) => self.logger().log(EngineEvent::Warning( + event_details.clone(), + EventMessage::new(format!("Can't delete chart `{}`", chart.name), Some(e.to_string())), + )), } } } @@ -1028,23 +1024,20 @@ impl DOKS { event_details.clone(), EventMessage::new_from_safe(format!("Chart `{}` deleted", chart.name)), )), - Err(e) => { - let message_safe = format!("Error deleting chart `{}`", chart.name); - self.logger().log(EngineEvent::Warning( - event_details.clone(), - EventMessage::new(message_safe, Some(e.to_string())), - )) - } + Err(e) => self.logger().log(EngineEvent::Warning( + event_details.clone(), + EventMessage::new( + format!("Error deleting chart `{}`", chart.name), + Some(e.to_string()), + ), + )), } } } - Err(e) => { - let message_safe = "Unable to get helm list"; - self.logger().log(EngineEvent::Warning( - event_details.clone(), - EventMessage::new(message_safe.to_string(), Some(e.to_string())), - )) - } + Err(e) => self.logger().log(EngineEvent::Warning( + event_details.clone(), + EventMessage::new("Unable to get helm list".to_string(), Some(e.to_string())), + )), } }; @@ -1175,8 +1168,8 @@ impl Kubernetes for DOKS { self.logger().log(EngineEvent::Debug( self.get_event_details(stage), EventMessage::new( - err.to_string(), - Some(format!("Error, couldn't open {} file", &local_kubeconfig_generated,)), + format!("Error, couldn't open {} file", &local_kubeconfig_generated), + Some(err.to_string()), ), )); None @@ -1330,7 +1323,7 @@ impl Kubernetes for DOKS { ); self.logger().log(EngineEvent::Info( event_details.clone(), - EventMessage::new_from_safe("Start preparing DOKS cluster upgrade process".to_string()), + EventMessage::new_from_safe("Start preparing cluster upgrade process".to_string()), )); let temp_dir = self.get_temp_dir(event_details.clone())?; diff --git a/src/cloud_provider/scaleway/kubernetes/mod.rs b/src/cloud_provider/scaleway/kubernetes/mod.rs index b8d9e693..0fec4092 100644 --- a/src/cloud_provider/scaleway/kubernetes/mod.rs +++ b/src/cloud_provider/scaleway/kubernetes/mod.rs @@ -674,7 +674,7 @@ impl Kapsule { match terraform_exec(temp_dir.as_str(), vec!["state", "rm", &entry]) { Ok(_) => self.logger().log(EngineEvent::Info( event_details.clone(), - EventMessage::new_from_safe(format!("successfully removed {}", &entry)), + EventMessage::new_from_safe(format!("Successfully removed {}", &entry)), )), Err(e) => { return Err(EngineError::new_terraform_cannot_remove_entry_out( @@ -909,7 +909,7 @@ impl Kapsule { self.logger.log(EngineEvent::Info( event_details.clone(), EventMessage::new_from_safe( - "all node groups for this cluster are ready from cloud provider API".to_string(), + "All node groups for this cluster are ready from cloud provider API".to_string(), ), )); @@ -1005,7 +1005,7 @@ impl Kapsule { event_details, EventMessage::new( "Error trying to get kubernetes events".to_string(), - Some(err.message(ErrorMessageVerbosity::FullDetails)), + Some(err.message(ErrorMessageVerbosity::FullDetailsWithoutEnvVars)), ), )), }; @@ -1046,7 +1046,7 @@ impl Kapsule { self.logger().log(EngineEvent::Info( self.get_event_details(Stage::Infrastructure(InfrastructureStep::Pause)), - EventMessage::new_from_safe("Preparing SCW cluster pause.".to_string()), + EventMessage::new_from_safe("Preparing cluster pause.".to_string()), )); let temp_dir = self.get_temp_dir(event_details.clone())?; @@ -1177,7 +1177,7 @@ impl Kapsule { ); self.logger().log(EngineEvent::Info( event_details.clone(), - EventMessage::new_from_safe("Pausing SCW cluster deployment.".to_string()), + EventMessage::new_from_safe("Pausing cluster deployment.".to_string()), )); match terraform_exec(temp_dir.as_str(), terraform_args) { @@ -1212,7 +1212,7 @@ impl Kapsule { ); self.logger().log(EngineEvent::Info( event_details.clone(), - EventMessage::new_from_safe("Preparing to delete SCW cluster.".to_string()), + EventMessage::new_from_safe("Preparing to delete cluster.".to_string()), )); let temp_dir = self.get_temp_dir(event_details.clone())?; @@ -1335,7 +1335,10 @@ impl Kapsule { ); self.logger().log(EngineEvent::Warning( event_details.clone(), - EventMessage::new(message_safe, Some(e.message(ErrorMessageVerbosity::FullDetails))), + EventMessage::new( + message_safe, + Some(e.message(ErrorMessageVerbosity::FullDetailsWithoutEnvVars)), + ), )); } } @@ -1605,7 +1608,7 @@ impl Kubernetes for Kapsule { ); self.logger().log(EngineEvent::Info( event_details.clone(), - EventMessage::new_from_safe("Start preparing SCW cluster upgrade process".to_string()), + EventMessage::new_from_safe("Start preparing cluster upgrade process".to_string()), )); let temp_dir = self.get_temp_dir(event_details.clone())?; From 6cffa9fc9a0c42aa332cc042cabb4825cf4e670b Mon Sep 17 00:00:00 2001 From: MacLikorne Date: Thu, 28 Apr 2022 16:37:40 +0200 Subject: [PATCH 02/10] fix: images for dbs tests (#701) --- test_utilities/src/utilities.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/test_utilities/src/utilities.rs b/test_utilities/src/utilities.rs index 93963e8f..9ec311e6 100644 --- a/test_utilities/src/utilities.rs +++ b/test_utilities/src/utilities.rs @@ -939,7 +939,7 @@ pub fn db_infos( DBInfos { db_port: database_port.clone(), db_name: database_db_name.to_string(), - app_commit: "3fdc7e784c1d98b80446be7ff25e35370306d9a8".to_string(), + app_commit: "da5dd2b58b78576921373fcb4d4bddc796a804a8".to_string(), app_env_vars: btreemap! { "IS_DOCUMENTDB".to_string() => base64::encode((database_mode == MANAGED).to_string()), "QOVERY_DATABASE_TESTING_DATABASE_FQDN".to_string() => base64::encode(db_fqdn.clone()), @@ -957,7 +957,7 @@ pub fn db_infos( DBInfos { db_port: database_port.clone(), db_name: database_db_name.to_string(), - app_commit: "fc8a87b39cdee84bb789893fb823e3e62a1999c0".to_string(), + app_commit: "42f6553b6be617f954f903e01236e225bbb9f468".to_string(), app_env_vars: btreemap! { "MYSQL_HOST".to_string() => base64::encode(db_fqdn.clone()), "MYSQL_PORT".to_string() => base64::encode(database_port.to_string()), @@ -977,7 +977,7 @@ pub fn db_infos( DBInfos { db_port: database_port.clone(), db_name: database_db_name.to_string(), - app_commit: "c3eda167df49fa9757f281d6f3655ba46287c61d".to_string(), + app_commit: "61c7a9b55a085229583b6a394dd168a4159dfd09".to_string(), app_env_vars: btreemap! { "PG_DBNAME".to_string() => base64::encode(database_db_name.clone()), "PG_HOST".to_string() => base64::encode(db_fqdn.clone()), @@ -993,7 +993,7 @@ pub fn db_infos( DBInfos { db_port: database_port.clone(), db_name: database_db_name.to_string(), - app_commit: "80ad41fbe9549f8de8dbe2ca4dd5d23e8ffc92de".to_string(), + app_commit: "e4b1162741ce162b834b68498e43bf60f0f58cbe".to_string(), app_env_vars: btreemap! { "IS_ELASTICCACHE".to_string() => base64::encode((database_mode == MANAGED).to_string()), "REDIS_HOST".to_string() => base64::encode(db_fqdn.clone()), From f276b1c4e76cf088b000c304dd74b6df079ba8cd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Er=C3=A8be=20-=20Romain=20Gerard?= Date: Fri, 29 Apr 2022 13:50:53 +0200 Subject: [PATCH 03/10] Add long_id for applications (#702) --- .../templates/deployment.j2.yaml | 2 ++ .../templates/horizontal_autoscaler.j2.yaml | 1 + .../templates/networkpolicies.j2.yaml | 3 ++ .../q-application/templates/pdb.j2.yaml | 1 + .../q-application/templates/secret.j2.yaml | 1 + .../q-application/templates/service.j2.yaml | 1 + .../templates/statefulset.j2.yaml | 24 ++----------- .../templates/deployment.j2.yaml | 2 ++ .../templates/horizontal_autoscaler.j2.yaml | 1 + .../q-application/templates/pdb.j2.yaml | 1 + .../q-application/templates/secret.j2.yaml | 1 + .../q-application/templates/service.j2.yaml | 1 + .../templates/statefulset.j2.yaml | 24 ++----------- .../templates/deployment.j2.yaml | 2 ++ .../templates/horizontal_autoscaler.j2.yaml | 1 + .../templates/networkpolicies.j2.yaml | 2 ++ .../q-application/templates/pdb.j2.yaml | 1 + .../q-application/templates/secret.j2.yaml | 2 ++ .../q-application/templates/service.j2.yaml | 1 + .../templates/statefulset.j2.yaml | 24 ++----------- src/io_models.rs | 13 ++++--- src/models/application.rs | 12 ++++--- src/utilities.rs | 5 +++ test_utilities/src/common.rs | 35 +++++++++++-------- tests/aws/aws_environment.rs | 19 ++++++++-- tests/digitalocean/do_environment.rs | 6 +++- tests/scaleway/scw_environment.rs | 8 +++-- 27 files changed, 98 insertions(+), 96 deletions(-) diff --git a/lib/aws/charts/q-application/templates/deployment.j2.yaml b/lib/aws/charts/q-application/templates/deployment.j2.yaml index b942e99f..a292b299 100644 --- a/lib/aws/charts/q-application/templates/deployment.j2.yaml +++ b/lib/aws/charts/q-application/templates/deployment.j2.yaml @@ -6,6 +6,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} @@ -29,6 +30,7 @@ spec: template: metadata: labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} diff --git a/lib/aws/charts/q-application/templates/horizontal_autoscaler.j2.yaml b/lib/aws/charts/q-application/templates/horizontal_autoscaler.j2.yaml index d14331e7..e3424d15 100644 --- a/lib/aws/charts/q-application/templates/horizontal_autoscaler.j2.yaml +++ b/lib/aws/charts/q-application/templates/horizontal_autoscaler.j2.yaml @@ -7,6 +7,7 @@ metadata: labels: envId: {{ environment_id }} appId: {{ id }} + appLongId: {{ long_id }} spec: scaleTargetRef: apiVersion: apps/v1 diff --git a/lib/aws/charts/q-application/templates/networkpolicies.j2.yaml b/lib/aws/charts/q-application/templates/networkpolicies.j2.yaml index 14ab70f4..09c4abeb 100644 --- a/lib/aws/charts/q-application/templates/networkpolicies.j2.yaml +++ b/lib/aws/charts/q-application/templates/networkpolicies.j2.yaml @@ -5,6 +5,7 @@ metadata: name: {{ sanitized_name }}-default namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} appId: {{ id }} app: {{ sanitized_name }} @@ -26,6 +27,7 @@ metadata: name: {{ sanitized_name }}-app-access namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} appId: {{ id }} app: {{ sanitized_name }} @@ -76,6 +78,7 @@ metadata: name: {{ sanitized_name }}-deny-aws-metadata-server namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} appId: {{ id }} app: {{ sanitized_name }} diff --git a/lib/aws/charts/q-application/templates/pdb.j2.yaml b/lib/aws/charts/q-application/templates/pdb.j2.yaml index 4e8b8015..22be8da3 100644 --- a/lib/aws/charts/q-application/templates/pdb.j2.yaml +++ b/lib/aws/charts/q-application/templates/pdb.j2.yaml @@ -6,6 +6,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} diff --git a/lib/aws/charts/q-application/templates/secret.j2.yaml b/lib/aws/charts/q-application/templates/secret.j2.yaml index 86625f6e..df3accd0 100644 --- a/lib/aws/charts/q-application/templates/secret.j2.yaml +++ b/lib/aws/charts/q-application/templates/secret.j2.yaml @@ -5,6 +5,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} diff --git a/lib/aws/charts/q-application/templates/service.j2.yaml b/lib/aws/charts/q-application/templates/service.j2.yaml index bb258f90..588b0a97 100644 --- a/lib/aws/charts/q-application/templates/service.j2.yaml +++ b/lib/aws/charts/q-application/templates/service.j2.yaml @@ -9,6 +9,7 @@ metadata: appId: {{ id }} app: {{ sanitized_name }} envId: {{ environment_id }} + appLongId: {{ long_id }} spec: type: ClusterIP ports: diff --git a/lib/aws/charts/q-application/templates/statefulset.j2.yaml b/lib/aws/charts/q-application/templates/statefulset.j2.yaml index fb7cf72b..867a9f92 100644 --- a/lib/aws/charts/q-application/templates/statefulset.j2.yaml +++ b/lib/aws/charts/q-application/templates/statefulset.j2.yaml @@ -9,6 +9,7 @@ metadata: ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} + appLongId: {{ long_id }} app: {{ sanitized_name }} annotations: releaseTime: {% raw %}{{ dateInZone "2006-01-02 15:04:05Z" (now) "UTC"| quote }}{% endraw %} @@ -27,6 +28,7 @@ spec: ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} + appLongId: {{ long_id }} app: {{ sanitized_name }} annotations: checksum/config: {% raw %}{{ include (print $.Template.BasePath "/secret.yaml") . | sha256sum }}{% endraw %} @@ -91,27 +93,6 @@ spec: {%- endfor %} volumeClaimTemplates: {%- for s in storage %} -{% if clone %} - - metadata: - name: {{ s.id }} - labels: - ownerId: {{ owner_id }} - envId: {{ environment_id }} - appId: {{ id }} - app: {{ sanitized_name }} - diskId: {{ s.id }} - diskType: {{ s.storage_type }} - spec: - accessModes: - - ReadWriteOnce - storageClassName: aws-ebs-{{ s.storage_type }}-0 - dataSource: - name: {{ s.id }} - kind: PersistentVolumeClaim - resources: - requests: - storage: {{ disk.size_in_gib }}Gi -{% else %} - metadata: name: {{ s.id }} labels: @@ -127,6 +108,5 @@ spec: resources: requests: storage: {{ s.size_in_gib }}Gi -{%- endif %} {%- endfor %} {%- endif %} diff --git a/lib/digitalocean/charts/q-application/templates/deployment.j2.yaml b/lib/digitalocean/charts/q-application/templates/deployment.j2.yaml index b942e99f..a292b299 100644 --- a/lib/digitalocean/charts/q-application/templates/deployment.j2.yaml +++ b/lib/digitalocean/charts/q-application/templates/deployment.j2.yaml @@ -6,6 +6,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} @@ -29,6 +30,7 @@ spec: template: metadata: labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} diff --git a/lib/digitalocean/charts/q-application/templates/horizontal_autoscaler.j2.yaml b/lib/digitalocean/charts/q-application/templates/horizontal_autoscaler.j2.yaml index d14331e7..04f72ef6 100644 --- a/lib/digitalocean/charts/q-application/templates/horizontal_autoscaler.j2.yaml +++ b/lib/digitalocean/charts/q-application/templates/horizontal_autoscaler.j2.yaml @@ -5,6 +5,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} envId: {{ environment_id }} appId: {{ id }} spec: diff --git a/lib/digitalocean/charts/q-application/templates/pdb.j2.yaml b/lib/digitalocean/charts/q-application/templates/pdb.j2.yaml index 4e8b8015..22be8da3 100644 --- a/lib/digitalocean/charts/q-application/templates/pdb.j2.yaml +++ b/lib/digitalocean/charts/q-application/templates/pdb.j2.yaml @@ -6,6 +6,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} diff --git a/lib/digitalocean/charts/q-application/templates/secret.j2.yaml b/lib/digitalocean/charts/q-application/templates/secret.j2.yaml index 86625f6e..df3accd0 100644 --- a/lib/digitalocean/charts/q-application/templates/secret.j2.yaml +++ b/lib/digitalocean/charts/q-application/templates/secret.j2.yaml @@ -5,6 +5,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} diff --git a/lib/digitalocean/charts/q-application/templates/service.j2.yaml b/lib/digitalocean/charts/q-application/templates/service.j2.yaml index bb258f90..6f4bc396 100644 --- a/lib/digitalocean/charts/q-application/templates/service.j2.yaml +++ b/lib/digitalocean/charts/q-application/templates/service.j2.yaml @@ -5,6 +5,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} appId: {{ id }} app: {{ sanitized_name }} diff --git a/lib/digitalocean/charts/q-application/templates/statefulset.j2.yaml b/lib/digitalocean/charts/q-application/templates/statefulset.j2.yaml index 63dae842..66e34216 100644 --- a/lib/digitalocean/charts/q-application/templates/statefulset.j2.yaml +++ b/lib/digitalocean/charts/q-application/templates/statefulset.j2.yaml @@ -6,6 +6,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} @@ -24,6 +25,7 @@ spec: template: metadata: labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} @@ -91,27 +93,6 @@ spec: {%- endfor %} volumeClaimTemplates: {%- for s in storage %} -{% if clone %} - - metadata: - name: {{ s.id }} - labels: - ownerId: {{ owner_id }} - envId: {{ environment_id }} - appId: {{ id }} - app: {{ sanitized_name }} - diskId: {{ s.id }} - diskType: {{ s.storage_type }} - spec: - accessModes: - - ReadWriteOnce - storageClassName: {{ s.storage_type }} - dataSource: - name: {{ s.id }} - kind: PersistentVolumeClaim - resources: - requests: - storage: {{ disk.size_in_gib }}Gi -{% else %} - metadata: name: {{ s.id }} labels: @@ -127,6 +108,5 @@ spec: resources: requests: storage: {{ s.size_in_gib }}Gi -{%- endif %} {%- endfor %} {%- endif %} diff --git a/lib/scaleway/charts/q-application/templates/deployment.j2.yaml b/lib/scaleway/charts/q-application/templates/deployment.j2.yaml index 9d407b87..7c5d7531 100644 --- a/lib/scaleway/charts/q-application/templates/deployment.j2.yaml +++ b/lib/scaleway/charts/q-application/templates/deployment.j2.yaml @@ -6,6 +6,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} @@ -28,6 +29,7 @@ spec: template: metadata: labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} diff --git a/lib/scaleway/charts/q-application/templates/horizontal_autoscaler.j2.yaml b/lib/scaleway/charts/q-application/templates/horizontal_autoscaler.j2.yaml index d14331e7..04f72ef6 100644 --- a/lib/scaleway/charts/q-application/templates/horizontal_autoscaler.j2.yaml +++ b/lib/scaleway/charts/q-application/templates/horizontal_autoscaler.j2.yaml @@ -5,6 +5,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} envId: {{ environment_id }} appId: {{ id }} spec: diff --git a/lib/scaleway/charts/q-application/templates/networkpolicies.j2.yaml b/lib/scaleway/charts/q-application/templates/networkpolicies.j2.yaml index 01e5a43f..4949144d 100644 --- a/lib/scaleway/charts/q-application/templates/networkpolicies.j2.yaml +++ b/lib/scaleway/charts/q-application/templates/networkpolicies.j2.yaml @@ -5,6 +5,7 @@ metadata: name: {{ sanitized_name }}-default namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} appId: {{ id }} app: {{ sanitized_name }} @@ -26,6 +27,7 @@ metadata: name: {{ sanitized_name }}-app-access namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} appId: {{ id }} app: {{ sanitized_name }} diff --git a/lib/scaleway/charts/q-application/templates/pdb.j2.yaml b/lib/scaleway/charts/q-application/templates/pdb.j2.yaml index 4e8b8015..22be8da3 100644 --- a/lib/scaleway/charts/q-application/templates/pdb.j2.yaml +++ b/lib/scaleway/charts/q-application/templates/pdb.j2.yaml @@ -6,6 +6,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} diff --git a/lib/scaleway/charts/q-application/templates/secret.j2.yaml b/lib/scaleway/charts/q-application/templates/secret.j2.yaml index 1e78760f..d41566d0 100644 --- a/lib/scaleway/charts/q-application/templates/secret.j2.yaml +++ b/lib/scaleway/charts/q-application/templates/secret.j2.yaml @@ -5,6 +5,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} @@ -23,6 +24,7 @@ metadata: name: {{ registry_secret_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} envId: {{ environment_id }} appId: {{ id }} app: {{ sanitized_name }} diff --git a/lib/scaleway/charts/q-application/templates/service.j2.yaml b/lib/scaleway/charts/q-application/templates/service.j2.yaml index 22ffc5ba..2bd35e24 100644 --- a/lib/scaleway/charts/q-application/templates/service.j2.yaml +++ b/lib/scaleway/charts/q-application/templates/service.j2.yaml @@ -5,6 +5,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} appId: {{ id }} app: {{ sanitized_name }} diff --git a/lib/scaleway/charts/q-application/templates/statefulset.j2.yaml b/lib/scaleway/charts/q-application/templates/statefulset.j2.yaml index 0af89e5c..1e7160d8 100644 --- a/lib/scaleway/charts/q-application/templates/statefulset.j2.yaml +++ b/lib/scaleway/charts/q-application/templates/statefulset.j2.yaml @@ -6,6 +6,7 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} @@ -24,6 +25,7 @@ spec: template: metadata: labels: + appLongId: {{ long_id }} ownerId: {{ owner_id }} envId: {{ environment_id }} appId: {{ id }} @@ -91,27 +93,6 @@ spec: {%- endfor %} volumeClaimTemplates: {%- for s in storage %} -{% if clone %} - - metadata: - name: {{ s.id }} - labels: - ownerId: {{ owner_id }} - envId: {{ environment_id }} - appId: {{ id }} - app: {{ sanitized_name }} - diskId: {{ s.id }} - diskType: {{ s.storage_type }} - spec: - accessModes: - - ReadWriteOnce - storageClassName: {{ s.storage_type }} - dataSource: - name: {{ s.id }} - kind: PersistentVolumeClaim - resources: - requests: - storage: {{ disk.size_in_gib }}Gi -{% else %} - metadata: name: {{ s.id }} labels: @@ -127,6 +108,5 @@ spec: resources: requests: storage: {{ s.size_in_gib }}Gi -{%- endif %} {%- endfor %} {%- endif %} diff --git a/src/io_models.rs b/src/io_models.rs index 5c57e8cd..8985fe90 100644 --- a/src/io_models.rs +++ b/src/io_models.rs @@ -12,6 +12,7 @@ use rand::distributions::Alphanumeric; use rand::Rng; use serde::{Deserialize, Serialize}; use url::Url; +use uuid::Uuid; use crate::build_platform::{Build, Credentials, GitRepository, Image, SshKey}; use crate::cloud_provider::environment::Environment; @@ -29,6 +30,7 @@ use crate::models::digital_ocean::{DoAppExtraSettings, DoRouterExtraSettings, Do use crate::models::router::RouterError; use crate::models::scaleway::{ScwAppExtraSettings, ScwRouterExtraSettings, ScwStorageType}; use crate::models::types::{CloudProvider as CP, VersionsNumber, AWS, DO, SCW}; +use crate::utilities::to_short_id; #[derive(Clone, Debug, PartialEq)] pub struct QoveryIdentifier { @@ -201,7 +203,7 @@ impl Default for ApplicationAdvanceSettings { #[derive(Serialize, Deserialize, Clone, Eq, PartialEq, Hash)] pub struct Application { - pub id: String, + pub long_id: Uuid, pub name: String, pub action: Action, pub git_url: String, @@ -240,7 +242,7 @@ impl Application { match cloud_provider.kind() { CPKind::Aws => Ok(Box::new(models::application::Application::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), self.ports.clone(), @@ -259,7 +261,7 @@ impl Application { )?)), CPKind::Do => Ok(Box::new(models::application::Application::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), self.ports.clone(), @@ -278,7 +280,7 @@ impl Application { )?)), CPKind::Scw => Ok(Box::new(models::application::Application::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), self.ports.clone(), @@ -300,7 +302,7 @@ impl Application { fn to_image(&self, cr_info: &ContainerRegistryInfo) -> Image { Image { - application_id: self.id.clone(), + application_id: to_short_id(&self.long_id), name: (cr_info.get_image_name)(&self.name), tag: "".to_string(), // It needs to be compute after creation commit_id: self.commit_id.clone(), @@ -439,6 +441,7 @@ pub struct GitCredentials { #[derive(Serialize, Deserialize, Clone, Eq, PartialEq, Hash)] pub struct Storage { pub id: String, + pub long_id: Uuid, pub name: String, pub storage_type: StorageType, pub size_in_gib: u16, diff --git a/src/models/application.rs b/src/models/application.rs index 71fd38e2..4fe82864 100644 --- a/src/models/application.rs +++ b/src/models/application.rs @@ -15,9 +15,11 @@ use crate::events::{EnvironmentStep, EventDetails, Stage, ToTransmitter, Transmi use crate::io_models::{ApplicationAdvanceSettings, Context, Listen, Listener, Listeners, Port, QoveryIdentifier}; use crate::logger::Logger; use crate::models::types::{CloudProvider, ToTeraContext}; +use crate::utilities::to_short_id; use function_name::named; use std::marker::PhantomData; use tera::Context as TeraContext; +use uuid::Uuid; #[derive(thiserror::Error, Debug)] pub enum ApplicationError { @@ -29,6 +31,7 @@ pub struct Application { _marker: PhantomData, pub(super) context: Context, pub(super) id: String, + pub(super) long_id: Uuid, pub(super) action: Action, pub(super) name: String, pub(super) ports: Vec, @@ -50,7 +53,7 @@ pub struct Application { impl Application { pub fn new( context: Context, - id: &str, + long_id: Uuid, action: Action, name: &str, ports: Vec, @@ -72,7 +75,8 @@ impl Application { Ok(Self { _marker: PhantomData, context, - id: id.to_string(), + id: to_short_id(&long_id), + long_id, action, name: name.to_string(), ports, @@ -94,6 +98,7 @@ impl Application { pub(super) fn default_tera_context(&self, kubernetes: &dyn Kubernetes, environment: &Environment) -> TeraContext { let mut context = TeraContext::new(); context.insert("id", self.id()); + context.insert("long_id", &self.long_id); context.insert("owner_id", environment.owner_id.as_str()); context.insert("project_id", environment.project_id.as_str()); context.insert("organization_id", environment.organization_id.as_str()); @@ -140,9 +145,6 @@ impl Application { context.insert("is_registry_secret", &true); context.insert("registry_secret", self.build().image.registry_host()); - // TODO: Remove this - context.insert("clone", &false); - if self.context.resource_expiration_in_seconds().is_some() { context.insert("resource_expiration_in_seconds", &self.context.resource_expiration_in_seconds()) } diff --git a/src/utilities.rs b/src/utilities.rs index d846d63c..f373edd6 100644 --- a/src/utilities.rs +++ b/src/utilities.rs @@ -5,6 +5,7 @@ use std::path::Path; use reqwest::header; use reqwest::header::{HeaderMap, HeaderValue}; +use uuid::Uuid; // generate the right header for digital ocean with token pub fn get_header_with_bearer(token: &str) -> HeaderMap { @@ -48,6 +49,10 @@ pub fn compute_image_tag + Hash, T: AsRef + Hash>( tag } +pub fn to_short_id(id: &Uuid) -> String { + format!("z{}", id.to_string().split_at(8).0) +} + #[cfg(test)] mod tests_utilities { use crate::utilities::compute_image_tag; diff --git a/test_utilities/src/common.rs b/test_utilities/src/common.rs index c000f998..fa05703b 100644 --- a/test_utilities/src/common.rs +++ b/test_utilities/src/common.rs @@ -39,12 +39,14 @@ use qovery_engine::logger::Logger; use qovery_engine::models::digital_ocean::DoRegion; use qovery_engine::models::scaleway::ScwZone; use qovery_engine::transaction::{DeploymentOption, Transaction, TransactionResult}; +use qovery_engine::utilities::to_short_id; use std::collections::BTreeMap; use std::path::Path; use std::rc::Rc; use std::str::FromStr; use std::sync::Arc; use tracing::{span, Level}; +use uuid::Uuid; pub enum RegionActivationStatus { Deactivated, @@ -255,7 +257,7 @@ pub fn environment_3_apps_3_routers_3_databases( action: Action::Create, applications: vec![ Application { - id: generate_id(), + long_id: Uuid::new_v4(), name: app_name_1.clone(), git_url: "https://github.com/Qovery/engine-testing.git".to_string(), commit_id: "5990752647af11ef21c3d46a51abbde3da1ab351".to_string(), @@ -270,6 +272,7 @@ pub fn environment_3_apps_3_routers_3_databases( }), storage: vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: 10, @@ -301,7 +304,7 @@ pub fn environment_3_apps_3_routers_3_databases( advance_settings: Default::default(), }, Application { - id: generate_id(), + long_id: Uuid::new_v4(), name: app_name_2.clone(), git_url: "https://github.com/Qovery/engine-testing.git".to_string(), commit_id: "5990752647af11ef21c3d46a51abbde3da1ab351".to_string(), @@ -316,6 +319,7 @@ pub fn environment_3_apps_3_routers_3_databases( }), storage: vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: 10, @@ -347,7 +351,7 @@ pub fn environment_3_apps_3_routers_3_databases( advance_settings: Default::default(), }, Application { - id: generate_id(), + long_id: Uuid::new_v4(), name: app_name_3.clone(), git_url: "https://github.com/Qovery/engine-testing.git".to_string(), commit_id: "158ea8ebc9897c50a7c56b910db33ce837ac1e61".to_string(), @@ -362,6 +366,7 @@ pub fn environment_3_apps_3_routers_3_databases( }), storage: vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: 10, @@ -523,7 +528,7 @@ pub fn working_minimal_environment(context: &Context, test_domain: &str) -> Envi organization_id: context.organization_id().to_string(), action: Action::Create, applications: vec![Application { - id: application_id, + long_id: Uuid::new_v4(), name: application_name, git_url: "https://github.com/Qovery/engine-testing.git".to_string(), commit_id: "fc575a2f3be0b9100492c8a463bf18134a8698a5".to_string(), @@ -575,7 +580,6 @@ pub fn working_minimal_environment(context: &Context, test_domain: &str) -> Envi pub fn database_test_environment(context: &Context) -> EnvironmentRequest { let suffix = generate_id(); - let application_id = generate_id(); let application_name = format!("{}-{}", "simple-app".to_string(), &suffix); EnvironmentRequest { @@ -586,7 +590,7 @@ pub fn database_test_environment(context: &Context) -> EnvironmentRequest { organization_id: context.organization_id().to_string(), action: Action::Create, applications: vec![Application { - id: application_id, + long_id: Uuid::new_v4(), name: application_name, git_url: "https://github.com/Qovery/engine-testing.git".to_string(), commit_id: "fc575a2f3be0b9100492c8a463bf18134a8698a5".to_string(), @@ -678,7 +682,7 @@ pub fn environnement_2_app_2_routers_1_psql( }], applications: vec![ Application { - id: generate_id(), + long_id: Uuid::new_v4(), name: application_name1.to_string(), git_url: "https://github.com/Qovery/engine-testing.git".to_string(), commit_id: "680550d1937b3f90551849c0da8f77c39916913b".to_string(), @@ -693,6 +697,7 @@ pub fn environnement_2_app_2_routers_1_psql( }), storage: vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: 10, @@ -724,7 +729,7 @@ pub fn environnement_2_app_2_routers_1_psql( advance_settings: Default::default(), }, Application { - id: generate_id(), + long_id: Uuid::new_v4(), name: application_name2.to_string(), git_url: "https://github.com/Qovery/engine-testing.git".to_string(), commit_id: "680550d1937b3f90551849c0da8f77c39916913b".to_string(), @@ -739,6 +744,7 @@ pub fn environnement_2_app_2_routers_1_psql( }), storage: vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: 10, @@ -831,7 +837,7 @@ pub fn echo_app_environment(context: &Context, test_domain: &str) -> Environment organization_id: context.organization_id().to_string(), action: Action::Create, applications: vec![Application { - id: generate_id(), + long_id: Uuid::new_v4(), name: format!("{}-{}", "echo-app".to_string(), &suffix), /*name: "simple-app".to_string(),*/ git_url: "https://github.com/Qovery/engine-testing.git".to_string(), @@ -894,7 +900,7 @@ pub fn environment_only_http_server(context: &Context) -> EnvironmentRequest { organization_id: context.organization_id().to_string(), action: Action::Create, applications: vec![Application { - id: generate_id(), + long_id: Uuid::new_v4(), name: format!("{}-{}", "mini-http".to_string(), &suffix), /*name: "simple-app".to_string(),*/ git_url: "https://github.com/Qovery/engine-testing.git".to_string(), @@ -935,6 +941,7 @@ pub fn environment_only_http_server(context: &Context) -> EnvironmentRequest { pub fn environment_only_http_server_router(context: &Context, test_domain: &str) -> EnvironmentRequest { let suffix = generate_id(); + let id = Uuid::new_v4(); EnvironmentRequest { execution_id: context.execution_id().to_string(), id: generate_id(), @@ -943,7 +950,7 @@ pub fn environment_only_http_server_router(context: &Context, test_domain: &str) organization_id: context.organization_id().to_string(), action: Action::Create, applications: vec![Application { - id: generate_id(), + long_id: id, name: format!("{}-{}", "mini-http".to_string(), &suffix), /*name: "simple-app".to_string(),*/ git_url: "https://github.com/Qovery/engine-testing.git".to_string(), @@ -1045,7 +1052,7 @@ pub fn test_db( let _enter = span.enter(); let context_for_delete = context.clone_not_same_execution_id(); - let app_id = generate_id(); + let app_id = Uuid::new_v4(); let database_username = "superuser".to_string(); let database_password = generate_password(provider_kind.clone(), database_mode.clone()); let db_kind_str = db_kind.name().to_string(); @@ -1107,8 +1114,8 @@ pub fn test_db( .applications .into_iter() .map(|mut app| { - app.id = app_id.clone(); - app.name = app_id.clone(); + app.long_id = app_id.clone(); + app.name = to_short_id(&app_id); app.branch = app_name.clone(); app.commit_id = db_infos.app_commit.clone(); app.ports = vec![Port { diff --git a/tests/aws/aws_environment.rs b/tests/aws/aws_environment.rs index ac3b3dc0..07426987 100644 --- a/tests/aws/aws_environment.rs +++ b/tests/aws/aws_environment.rs @@ -9,12 +9,14 @@ use qovery_engine::cloud_provider::Kind; use qovery_engine::cmd::kubectl::kubernetes_get_all_pdbs; use qovery_engine::io_models::{Action, CloneForTest, Port, Protocol, Storage, StorageType}; use qovery_engine::transaction::TransactionResult; +use qovery_engine::utilities::to_short_id; use std::collections::BTreeMap; use std::thread; use std::time::Duration; use test_utilities::aws::aws_default_engine_config; use test_utilities::utilities::{context, init, kubernetes_config_path}; use tracing::{span, Level}; +use uuid::Uuid; #[cfg(feature = "test-aws-minimal")] #[named] @@ -159,7 +161,7 @@ fn deploy_a_working_environment_and_pause_it_eks() { ); let ea = environment.clone(); - let selector = format!("appId={}", environment.applications[0].id); + let selector = format!("appId={}", to_short_id(&environment.applications[0].long_id)); let ret = environment.deploy_environment(&ea, logger.clone(), &engine_config); assert!(matches!(ret, TransactionResult::Ok)); @@ -220,7 +222,12 @@ fn deploy_a_working_environment_and_pause_it_eks() { None, ); for pdb in pdbs.expect("Unable to get pdbs").items.expect("Unable to get pdbs") { - assert_eq!(pdb.metadata.name.contains(&environment.applications[0].id), false) + assert_eq!( + pdb.metadata + .name + .contains(&to_short_id(&environment.applications[0].long_id)), + false + ) } // Check we can resume the env @@ -265,7 +272,11 @@ fn deploy_a_working_environment_and_pause_it_eks() { ); let mut filtered_pdb = false; for pdb in pdbs.expect("Unable to get pdbs").items.expect("Unable to get pdbs") { - if pdb.metadata.name.contains(&environment.applications[0].id) { + if pdb + .metadata + .name + .contains(&to_short_id(&environment.applications[0].long_id)) + { filtered_pdb = true; break; } @@ -575,6 +586,7 @@ fn deploy_a_working_environment_with_storage_on_aws_eks() { .map(|mut app| { app.storage = vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: storage_size, @@ -657,6 +669,7 @@ fn redeploy_same_app_with_ebs() { .map(|mut app| { app.storage = vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: storage_size, diff --git a/tests/digitalocean/do_environment.rs b/tests/digitalocean/do_environment.rs index 756422a6..a8a3cfc3 100644 --- a/tests/digitalocean/do_environment.rs +++ b/tests/digitalocean/do_environment.rs @@ -9,6 +9,7 @@ use ::function_name::named; use qovery_engine::cloud_provider::Kind; use qovery_engine::io_models::{Action, CloneForTest, Port, Protocol, Storage, StorageType}; use qovery_engine::transaction::TransactionResult; +use qovery_engine::utilities::to_short_id; use std::collections::BTreeMap; use std::thread; use std::time::Duration; @@ -16,6 +17,7 @@ use test_utilities::common::Infrastructure; use test_utilities::digitalocean::do_default_engine_config; use test_utilities::utilities::context; use tracing::{span, warn, Level}; +use uuid::Uuid; // Note: All those tests relies on a test cluster running on DigitalOcean infrastructure. // This cluster should be live in order to have those tests passing properly. @@ -222,7 +224,7 @@ fn digitalocean_doks_deploy_a_working_environment_and_pause() { ); let env_action = environment.clone(); - let selector = format!("appId={}", environment.applications[0].id); + let selector = format!("appId={}", to_short_id(&environment.applications[0].long_id)); let ret = environment.deploy_environment(&env_action, logger.clone(), &engine_config); assert!(matches!(ret, TransactionResult::Ok)); @@ -451,6 +453,7 @@ fn digitalocean_doks_deploy_a_working_environment_with_storage() { .map(|mut app| { app.storage = vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: storage_size, @@ -534,6 +537,7 @@ fn digitalocean_doks_redeploy_same_app() { .map(|mut app| { app.storage = vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: storage_size, diff --git a/tests/scaleway/scw_environment.rs b/tests/scaleway/scw_environment.rs index 2fb6cdf1..4bfdc8fb 100644 --- a/tests/scaleway/scw_environment.rs +++ b/tests/scaleway/scw_environment.rs @@ -9,12 +9,14 @@ use ::function_name::named; use qovery_engine::cloud_provider::Kind; use qovery_engine::io_models::{Action, CloneForTest, Port, Protocol, Storage, StorageType}; use qovery_engine::transaction::TransactionResult; +use qovery_engine::utilities::to_short_id; use std::collections::BTreeMap; use std::thread; use std::time::Duration; use test_utilities::common::Infrastructure; use test_utilities::scaleway::scw_default_engine_config; use tracing::{span, warn, Level}; +use uuid::Uuid; // Note: All those tests relies on a test cluster running on Scaleway infrastructure. // This cluster should be live in order to have those tests passing properly. @@ -230,7 +232,7 @@ fn scaleway_kapsule_deploy_a_working_environment_and_pause() { ); let env_action = environment.clone(); - let selector = format!("appId={}", environment.applications[0].id); + let selector = format!("appId={}", to_short_id(&environment.applications[0].long_id)); let result = environment.deploy_environment(&env_action, logger.clone(), &engine_config); assert!(matches!(result, TransactionResult::Ok)); @@ -466,6 +468,7 @@ fn scaleway_kapsule_deploy_a_working_environment_with_storage() { .map(|mut app| { app.storage = vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: storage_size, @@ -541,7 +544,7 @@ fn deploy_a_working_environment_and_pause_it() { ); let ea = environment.clone(); - let selector = format!("appId={}", environment.applications[0].id); + let selector = format!("appId={}", to_short_id(&environment.applications[0].long_id)); let result = environment.deploy_environment(&ea, logger.clone(), &engine_config); assert!(matches!(result, TransactionResult::Ok)); @@ -634,6 +637,7 @@ fn scaleway_kapsule_redeploy_same_app() { .map(|mut app| { app.storage = vec![Storage { id: generate_id(), + long_id: Uuid::new_v4(), name: "photos".to_string(), storage_type: StorageType::Ssd, size_in_gib: storage_size, From 3444f325663f3efaa6f7a218e64f929abd285057 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Er=C3=A8be=20-=20Romain=20Gerard?= Date: Fri, 29 Apr 2022 15:37:40 +0200 Subject: [PATCH 04/10] Add long_id for databases (#703) * Add long_id for databases * Add long_id for router * Fix linter --- lib/aws/chart_values/mongodb/q-values.j2.yaml | 8 ++-- lib/aws/chart_values/mysql/q-values.j2.yaml | 6 +-- .../chart_values/postgresql/q-values.j2.yaml | 7 ++- lib/aws/chart_values/redis/q-values.j2.yaml | 9 ++-- .../templates/cert-issuer.j2.yaml | 2 +- .../templates/ingress-qovery.j2.yaml | 3 +- .../chart_values/mongodb/q-values.j2.yaml | 8 ++-- .../chart_values/mysql/q-values.j2.yaml | 6 +-- .../chart_values/postgresql/q-values.j2.yaml | 7 ++- .../chart_values/redis/q-values.j2.yaml | 9 ++-- .../templates/cert-issuer.j2.yaml | 2 +- .../templates/ingress-qovery.j2.yaml | 3 +- .../chart_values/mongodb/q-values.j2.yaml | 8 ++-- .../chart_values/mysql/q-values.j2.yaml | 6 +-- .../chart_values/postgresql/q-values.j2.yaml | 7 ++- .../chart_values/redis/q-values.j2.yaml | 9 ++-- .../templates/cert-issuer.j2.yaml | 2 +- .../templates/ingress-qovery.j2.yaml | 3 +- src/cloud_provider/service.rs | 3 ++ src/io_models.rs | 46 +++++++++---------- src/models/application.rs | 4 ++ src/models/aws/database.rs | 1 + src/models/database.rs | 13 +++++- src/models/router.rs | 12 ++++- src/models/scaleway/database.rs | 1 + test_utilities/src/common.rs | 27 ++++++----- test_utilities/src/utilities.rs | 3 +- tests/aws/aws_databases.rs | 6 ++- tests/digitalocean/do_databases.rs | 6 ++- tests/scaleway/scw_databases.rs | 6 ++- 30 files changed, 122 insertions(+), 111 deletions(-) diff --git a/lib/aws/chart_values/mongodb/q-values.j2.yaml b/lib/aws/chart_values/mongodb/q-values.j2.yaml index 64a34332..461ed841 100644 --- a/lib/aws/chart_values/mongodb/q-values.j2.yaml +++ b/lib/aws/chart_values/mongodb/q-values.j2.yaml @@ -207,19 +207,18 @@ annotations: {} # Additional abels to apply to the deployment or statefulsets labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: {{ sanitized_name }} + databaseLongId: {{ long_id }} # Annotations to be added to MongoDB pods podAnnotations: {} # Additional pod labels to apply podLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} ## Use an alternate scheduler, e.g. "stork". ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ @@ -345,10 +344,9 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: {{ sanitized_name }} + databaseLongId: {{ long_id }} ## Configure the ingress resource that allows you to access the ## MongoDB installation. Set up the URL diff --git a/lib/aws/chart_values/mysql/q-values.j2.yaml b/lib/aws/chart_values/mysql/q-values.j2.yaml index 51cb92c3..15e57bad 100644 --- a/lib/aws/chart_values/mysql/q-values.j2.yaml +++ b/lib/aws/chart_values/mysql/q-values.j2.yaml @@ -44,10 +44,9 @@ fullnameOverride: {{ sanitized_name }} clusterDomain: cluster.local commonLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: {{ sanitized_name }} + databaseLongId: {{ long_id }} ## Init containers parameters: ## volumePermissions: Change the owner and group of the persistent volume mountpoint to runAsUser:fsGroup values from the securityContext section. @@ -315,10 +314,9 @@ master: ## PVC annotations ## annotations: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: {{ sanitized_name }} + databaseLongId: {{ long_id }} ## Persistent Volume Access Mode ## diff --git a/lib/aws/chart_values/postgresql/q-values.j2.yaml b/lib/aws/chart_values/postgresql/q-values.j2.yaml index 348a611c..be1475e2 100644 --- a/lib/aws/chart_values/postgresql/q-values.j2.yaml +++ b/lib/aws/chart_values/postgresql/q-values.j2.yaml @@ -326,10 +326,9 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: {{ sanitized_name }} + databaseLongId: {{ long_id }} ## updateStrategy for PostgreSQL StatefulSet and its slaves StatefulSets ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies @@ -349,14 +348,14 @@ master: affinity: {} tolerations: [] labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} annotations: {} podLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} podAnnotations: {} priorityClassName: "" ## Extra init containers diff --git a/lib/aws/chart_values/redis/q-values.j2.yaml b/lib/aws/chart_values/redis/q-values.j2.yaml index 69d7d354..4de95952 100644 --- a/lib/aws/chart_values/redis/q-values.j2.yaml +++ b/lib/aws/chart_values/redis/q-values.j2.yaml @@ -132,9 +132,9 @@ sentinel: ## annotations: {} labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} loadBalancerIP: ## Specifies the Kubernetes Cluster's Domain Name. @@ -291,10 +291,9 @@ master: ## Redis Master additional pod labels and annotations ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ podLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: {{ sanitized_name }} + databaseLongId: {{ long_id }} podAnnotations: {} ## Redis Master resource requests and limits @@ -388,9 +387,9 @@ master: external-dns.alpha.kubernetes.io/ttl: "300" {% endif %} labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} loadBalancerIP: # loadBalancerSourceRanges: ["10.0.0.0/8"] @@ -425,9 +424,9 @@ master: ## https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets statefulset: labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} updateStrategy: RollingUpdate ## Partition update strategy ## https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#partitions diff --git a/lib/aws/charts/q-ingress-tls/templates/cert-issuer.j2.yaml b/lib/aws/charts/q-ingress-tls/templates/cert-issuer.j2.yaml index cfb54db6..5a4d0ae4 100644 --- a/lib/aws/charts/q-ingress-tls/templates/cert-issuer.j2.yaml +++ b/lib/aws/charts/q-ingress-tls/templates/cert-issuer.j2.yaml @@ -6,7 +6,7 @@ metadata: name: {{ id }} namespace: {{ namespace }} labels: - ownerId: {{ owner_id }} + routerLongId: {{ long_id }} spec: acme: server: {{ spec_acme_server }} diff --git a/lib/aws/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml b/lib/aws/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml index 5cf11a24..8e4c688e 100644 --- a/lib/aws/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml +++ b/lib/aws/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml @@ -6,9 +6,8 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: - ownerId: {{ owner_id }} - routerName: {{ sanitized_name }} routerId: {{ id }} + routerLongId: {{ long_id }} envId: {{ environment_id }} fqdn: "{{ router_default_domain }}" annotations: diff --git a/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml b/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml index 46506ac1..273f0404 100644 --- a/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml @@ -210,19 +210,18 @@ annotations: {} # Additional abels to apply to the deployment or statefulsets labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} # Annotations to be added to MongoDB pods podAnnotations: {} # Additional pod labels to apply podLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} ## Use an alternate scheduler, e.g. "stork". ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/ @@ -348,10 +347,9 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} ## Configure the ingress resource that allows you to access the ## MongoDB installation. Set up the URL diff --git a/lib/digitalocean/chart_values/mysql/q-values.j2.yaml b/lib/digitalocean/chart_values/mysql/q-values.j2.yaml index 5e288642..4a68de80 100644 --- a/lib/digitalocean/chart_values/mysql/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/mysql/q-values.j2.yaml @@ -44,10 +44,9 @@ fullnameOverride: '{{ sanitized_name }}' clusterDomain: cluster.local commonLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} ## Init containers parameters: ## volumePermissions: Change the owner and group of the persistent volume mountpoint to runAsUser:fsGroup values from the securityContext section. @@ -315,10 +314,9 @@ master: ## PVC annotations ## annotations: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} ## Persistent Volume Access Mode ## diff --git a/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml b/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml index a3757916..ad87ddcc 100644 --- a/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml @@ -328,10 +328,9 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} ## updateStrategy for PostgreSQL StatefulSet and its slaves StatefulSets ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies @@ -351,14 +350,14 @@ master: affinity: {} tolerations: [] labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} annotations: {} podLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} podAnnotations: {} priorityClassName: "" ## Extra init containers diff --git a/lib/digitalocean/chart_values/redis/q-values.j2.yaml b/lib/digitalocean/chart_values/redis/q-values.j2.yaml index e1db86e7..2f44304e 100644 --- a/lib/digitalocean/chart_values/redis/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/redis/q-values.j2.yaml @@ -132,9 +132,9 @@ sentinel: ## annotations: {} labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} loadBalancerIP: ## Specifies the Kubernetes Cluster's Domain Name. @@ -291,10 +291,9 @@ master: ## Redis Master additional pod labels and annotations ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ podLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} podAnnotations: {} ## Redis Master resource requests and limits @@ -391,9 +390,9 @@ master: external-dns.alpha.kubernetes.io/ttl: "300" {% endif %} labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} loadBalancerIP: # loadBalancerSourceRanges: ["10.0.0.0/8"] @@ -428,9 +427,9 @@ master: ## https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets statefulset: labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} updateStrategy: RollingUpdate ## Partition update strategy ## https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#partitions diff --git a/lib/digitalocean/charts/q-ingress-tls/templates/cert-issuer.j2.yaml b/lib/digitalocean/charts/q-ingress-tls/templates/cert-issuer.j2.yaml index 96623d12..23b35f81 100644 --- a/lib/digitalocean/charts/q-ingress-tls/templates/cert-issuer.j2.yaml +++ b/lib/digitalocean/charts/q-ingress-tls/templates/cert-issuer.j2.yaml @@ -6,7 +6,7 @@ metadata: name: {{ id }} namespace: {{ namespace }} labels: - ownerId: {{ owner_id }} + routerLongId: {{ long_id }} spec: acme: server: {{ spec_acme_server }} diff --git a/lib/digitalocean/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml b/lib/digitalocean/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml index 5cf11a24..8e4c688e 100644 --- a/lib/digitalocean/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml +++ b/lib/digitalocean/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml @@ -6,9 +6,8 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: - ownerId: {{ owner_id }} - routerName: {{ sanitized_name }} routerId: {{ id }} + routerLongId: {{ long_id }} envId: {{ environment_id }} fqdn: "{{ router_default_domain }}" annotations: diff --git a/lib/scaleway/chart_values/mongodb/q-values.j2.yaml b/lib/scaleway/chart_values/mongodb/q-values.j2.yaml index 12baf9b3..e1a609f6 100644 --- a/lib/scaleway/chart_values/mongodb/q-values.j2.yaml +++ b/lib/scaleway/chart_values/mongodb/q-values.j2.yaml @@ -145,17 +145,16 @@ replicaSet: # Additional abels to apply to the deployment or statefulsets labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} # Additional pod labels to apply podLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} ## updateStrategy for MongoDB Primary, Secondary and Arbitrer statefulsets ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies @@ -197,10 +196,9 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} # volume.beta.kubernetes.io/storage-class=scw-sbv-ssd-0: ## Prometheus Exporter / Metrics diff --git a/lib/scaleway/chart_values/mysql/q-values.j2.yaml b/lib/scaleway/chart_values/mysql/q-values.j2.yaml index 614cb3d2..7d66a8f4 100644 --- a/lib/scaleway/chart_values/mysql/q-values.j2.yaml +++ b/lib/scaleway/chart_values/mysql/q-values.j2.yaml @@ -44,10 +44,9 @@ fullnameOverride: '{{ sanitized_name }}' clusterDomain: cluster.local commonLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} ## Init containers parameters: ## volumePermissions: Change the owner and group of the persistent volume mountpoint to runAsUser:fsGroup values from the securityContext section. @@ -293,10 +292,9 @@ master: ## PVC annotations ## annotations: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} ## Persistent Volume Access Mode ## diff --git a/lib/scaleway/chart_values/postgresql/q-values.j2.yaml b/lib/scaleway/chart_values/postgresql/q-values.j2.yaml index 81a64782..b1a83685 100644 --- a/lib/scaleway/chart_values/postgresql/q-values.j2.yaml +++ b/lib/scaleway/chart_values/postgresql/q-values.j2.yaml @@ -169,10 +169,9 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} ## ## PostgreSQL Master parameters @@ -187,14 +186,14 @@ master: affinity: {} tolerations: [] labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} annotations: {} podLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} podAnnotations: {} priorityClassName: "" ## Extra init containers diff --git a/lib/scaleway/chart_values/redis/q-values.j2.yaml b/lib/scaleway/chart_values/redis/q-values.j2.yaml index 80619204..f1b92cb8 100644 --- a/lib/scaleway/chart_values/redis/q-values.j2.yaml +++ b/lib/scaleway/chart_values/redis/q-values.j2.yaml @@ -121,9 +121,9 @@ sentinel: ## annotations: {} labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} loadBalancerIP: networkPolicy: @@ -248,10 +248,9 @@ master: ## Redis Master additional pod labels and annotations ## ref: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/ podLabels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseName: '{{ sanitized_name }}' + databaseLongId: {{ long_id }} podAnnotations: {} ## Redis Master resource requests and limits @@ -350,9 +349,9 @@ master: external-dns.alpha.kubernetes.io/ttl: "300" {% endif %} labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} loadBalancerIP: # loadBalancerSourceRanges: ["10.0.0.0/8"] @@ -387,9 +386,9 @@ master: ## https://kubernetes.io/docs/tutorials/stateful-application/basic-stateful-set/#updating-statefulsets statefulset: labels: - ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} + databaseLongId: {{ long_id }} updateStrategy: RollingUpdate ## Partition update strategy ## https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#partitions diff --git a/lib/scaleway/charts/q-ingress-tls/templates/cert-issuer.j2.yaml b/lib/scaleway/charts/q-ingress-tls/templates/cert-issuer.j2.yaml index cfb54db6..5a4d0ae4 100644 --- a/lib/scaleway/charts/q-ingress-tls/templates/cert-issuer.j2.yaml +++ b/lib/scaleway/charts/q-ingress-tls/templates/cert-issuer.j2.yaml @@ -6,7 +6,7 @@ metadata: name: {{ id }} namespace: {{ namespace }} labels: - ownerId: {{ owner_id }} + routerLongId: {{ long_id }} spec: acme: server: {{ spec_acme_server }} diff --git a/lib/scaleway/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml b/lib/scaleway/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml index 5cf11a24..8e4c688e 100644 --- a/lib/scaleway/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml +++ b/lib/scaleway/charts/q-ingress-tls/templates/ingress-qovery.j2.yaml @@ -6,9 +6,8 @@ metadata: name: {{ sanitized_name }} namespace: {{ namespace }} labels: - ownerId: {{ owner_id }} - routerName: {{ sanitized_name }} routerId: {{ id }} + routerLongId: {{ long_id }} envId: {{ environment_id }} fqdn: "{{ router_default_domain }}" annotations: diff --git a/src/cloud_provider/service.rs b/src/cloud_provider/service.rs index 05ac86df..defbddf2 100644 --- a/src/cloud_provider/service.rs +++ b/src/cloud_provider/service.rs @@ -6,6 +6,7 @@ use std::thread; use std::time::Duration; use tera::Context as TeraContext; +use uuid::Uuid; use crate::cloud_provider::environment::Environment; use crate::cloud_provider::helm::ChartInfo; @@ -31,6 +32,7 @@ pub trait Service: ToTransmitter { fn context(&self) -> &Context; fn service_type(&self) -> ServiceType; fn id(&self) -> &str; + fn long_id(&self) -> &Uuid; fn name(&self) -> &str; fn sanitized_name(&self) -> String; fn name_with_id(&self) -> String { @@ -328,6 +330,7 @@ pub fn default_tera_context( ) -> TeraContext { let mut context = TeraContext::new(); context.insert("id", service.id()); + context.insert("long_id", service.id()); context.insert("owner_id", environment.owner_id.as_str()); context.insert("project_id", environment.project_id.as_str()); context.insert("organization_id", environment.organization_id.as_str()); diff --git a/src/io_models.rs b/src/io_models.rs index 8985fe90..06f6bb4a 100644 --- a/src/io_models.rs +++ b/src/io_models.rs @@ -500,7 +500,7 @@ impl Storage { #[derive(Serialize, Deserialize, Clone, Eq, PartialEq, Hash)] pub struct Router { - pub id: String, + pub long_id: Uuid, pub name: String, pub action: Action, pub default_domain: String, @@ -544,7 +544,7 @@ impl Router { CPKind::Aws => { let router = Box::new(models::router::Router::::new( context.clone(), - self.id.as_str(), + self.long_id, self.name.as_str(), self.action.to_service_action(), self.default_domain.as_str(), @@ -560,7 +560,7 @@ impl Router { CPKind::Do => { let router = Box::new(models::router::Router::::new( context.clone(), - self.id.as_str(), + self.long_id, self.name.as_str(), self.action.to_service_action(), self.default_domain.as_str(), @@ -576,7 +576,7 @@ impl Router { CPKind::Scw => { let router = Box::new(models::router::Router::::new( context.clone(), - self.id.as_str(), + self.long_id, self.name.as_str(), self.action.to_service_action(), self.default_domain.as_str(), @@ -615,7 +615,7 @@ pub enum DatabaseMode { pub struct Database { pub kind: DatabaseKind, pub action: Action, - pub id: String, + pub long_id: Uuid, pub name: String, pub version: String, pub fqdn_id: String, @@ -666,7 +666,7 @@ impl Database { (CPKind::Aws, DatabaseKind::Postgresql, DatabaseMode::MANAGED) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -687,7 +687,7 @@ impl Database { (CPKind::Aws, DatabaseKind::Postgresql, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -709,7 +709,7 @@ impl Database { (CPKind::Aws, DatabaseKind::Mysql, DatabaseMode::MANAGED) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -730,7 +730,7 @@ impl Database { (CPKind::Aws, DatabaseKind::Mysql, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -751,7 +751,7 @@ impl Database { (CPKind::Aws, DatabaseKind::Redis, DatabaseMode::MANAGED) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -772,7 +772,7 @@ impl Database { (CPKind::Aws, DatabaseKind::Redis, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -793,7 +793,7 @@ impl Database { (CPKind::Aws, DatabaseKind::Mongodb, DatabaseMode::MANAGED) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -814,7 +814,7 @@ impl Database { (CPKind::Aws, DatabaseKind::Mongodb, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -836,7 +836,7 @@ impl Database { (CPKind::Do, DatabaseKind::Postgresql, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -857,7 +857,7 @@ impl Database { (CPKind::Do, DatabaseKind::Mysql, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -878,7 +878,7 @@ impl Database { (CPKind::Do, DatabaseKind::Redis, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -899,7 +899,7 @@ impl Database { (CPKind::Do, DatabaseKind::Mongodb, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -936,7 +936,7 @@ impl Database { (CPKind::Scw, DatabaseKind::Postgresql, DatabaseMode::MANAGED) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -957,7 +957,7 @@ impl Database { (CPKind::Scw, DatabaseKind::Postgresql, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -978,7 +978,7 @@ impl Database { (CPKind::Scw, DatabaseKind::Mysql, DatabaseMode::MANAGED) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -999,7 +999,7 @@ impl Database { (CPKind::Scw, DatabaseKind::Mysql, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -1020,7 +1020,7 @@ impl Database { (CPKind::Scw, DatabaseKind::Redis, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, @@ -1041,7 +1041,7 @@ impl Database { (CPKind::Scw, DatabaseKind::Mongodb, DatabaseMode::CONTAINER) => { let db = models::database::Database::::new( context.clone(), - self.id.as_str(), + self.long_id, self.action.to_service_action(), self.name.as_str(), version, diff --git a/src/models/application.rs b/src/models/application.rs index 4fe82864..3a3c5218 100644 --- a/src/models/application.rs +++ b/src/models/application.rs @@ -337,6 +337,10 @@ where fn selector(&self) -> Option { self.selector() } + + fn long_id(&self) -> &Uuid { + &self.long_id + } } impl Helm for Application { diff --git a/src/models/aws/database.rs b/src/models/aws/database.rs index a5237851..71c90b11 100644 --- a/src/models/aws/database.rs +++ b/src/models/aws/database.rs @@ -176,6 +176,7 @@ where ); context.insert("namespace", environment.namespace()); + context.insert("long_id", &self.long_id); let version = self .get_version_aws_managed(event_details)? diff --git a/src/models/database.rs b/src/models/database.rs index 4555e335..8d937bbd 100644 --- a/src/models/database.rs +++ b/src/models/database.rs @@ -15,10 +15,12 @@ use crate::models::database_utils::{ get_self_hosted_redis_version, }; use crate::models::types::{CloudProvider, ToTeraContext, VersionsNumber}; +use crate::utilities::to_short_id; use function_name::named; use std::borrow::Borrow; use std::marker::PhantomData; use tera::Context as TeraContext; +use uuid::Uuid; ///////////////////////////////////////////////////////////////// // Database mode @@ -71,6 +73,7 @@ pub struct Database> { _marker: PhantomData<(C, M, T)>, pub(super) context: Context, pub(super) id: String, + pub(super) long_id: Uuid, pub(super) action: Action, pub(super) name: String, pub(super) version: VersionsNumber, @@ -89,7 +92,7 @@ pub struct Database> { impl> Database { pub fn new( context: Context, - id: &str, + long_id: Uuid, action: Action, name: &str, version: VersionsNumber, @@ -110,7 +113,8 @@ impl> Database _marker: PhantomData, context, action, - id: id.to_string(), + id: to_short_id(&long_id), + long_id, name: name.to_string(), version, fqdn: fqdn.to_string(), @@ -178,6 +182,10 @@ where &self.id } + fn long_id(&self) -> &Uuid { + &self.long_id + } + fn name(&self) -> &str { &self.name } @@ -479,6 +487,7 @@ where context.insert("kubernetes_cluster_id", kubernetes.id()); context.insert("kubernetes_cluster_name", kubernetes.name()); + context.insert("long_id", &self.long_id); context.insert("fqdn_id", self.fqdn_id.as_str()); context.insert("fqdn", self.fqdn(target, &self.fqdn, M::is_managed()).as_str()); context.insert("service_name", self.fqdn_id.as_str()); diff --git a/src/models/router.rs b/src/models/router.rs index 73a9a44d..2ed5bf31 100644 --- a/src/models/router.rs +++ b/src/models/router.rs @@ -14,10 +14,12 @@ use crate::io_models::{Context, Listen, Listener, Listeners}; use crate::logger::Logger; use crate::models::types::CloudProvider; use crate::models::types::ToTeraContext; +use crate::utilities::to_short_id; use function_name::named; use std::borrow::Borrow; use std::marker::PhantomData; use tera::Context as TeraContext; +use uuid::Uuid; #[derive(thiserror::Error, Debug)] pub enum RouterError { @@ -29,6 +31,7 @@ pub struct Router { _marker: PhantomData, pub(crate) context: Context, pub(crate) id: String, + pub(crate) long_id: Uuid, pub(crate) action: Action, pub(crate) name: String, pub(crate) default_domain: String, @@ -43,7 +46,7 @@ pub struct Router { impl Router { pub fn new( context: Context, - id: &str, + long_id: Uuid, name: &str, action: Action, default_domain: &str, @@ -57,7 +60,8 @@ impl Router { Ok(Self { _marker: PhantomData, context, - id: id.to_string(), + id: to_short_id(&long_id), + long_id, name: name.to_string(), action, default_domain: default_domain.to_string(), @@ -243,6 +247,10 @@ where &self.id } + fn long_id(&self) -> &Uuid { + &self.long_id + } + fn name(&self) -> &str { &self.name } diff --git a/src/models/scaleway/database.rs b/src/models/scaleway/database.rs index 2649942a..30efe5a5 100644 --- a/src/models/scaleway/database.rs +++ b/src/models/scaleway/database.rs @@ -139,6 +139,7 @@ impl> Database { ); context.insert("namespace", environment.namespace()); + context.insert("long_id", &self.long_id); let version = get_version(event_details)?.matched_version(); context.insert("version_major", &version.to_major_version_string()); diff --git a/test_utilities/src/common.rs b/test_utilities/src/common.rs index fa05703b..a4c2275f 100644 --- a/test_utilities/src/common.rs +++ b/test_utilities/src/common.rs @@ -402,7 +402,7 @@ pub fn environment_3_apps_3_routers_3_databases( ], routers: vec![ Router { - id: generate_id(), + long_id: Uuid::new_v4(), name: "main".to_string(), action: Action::Create, default_domain: format!("{}.{}.{}", generate_id(), context.cluster_id().to_string(), test_domain), @@ -415,7 +415,7 @@ pub fn environment_3_apps_3_routers_3_databases( sticky_sessions_enabled: false, }, Router { - id: generate_id(), + long_id: Uuid::new_v4(), name: "second-router".to_string(), action: Action::Create, default_domain: format!("{}.{}.{}", generate_id(), context.cluster_id().to_string(), test_domain), @@ -428,7 +428,7 @@ pub fn environment_3_apps_3_routers_3_databases( sticky_sessions_enabled: false, }, Router { - id: generate_id(), + long_id: Uuid::new_v4(), name: "third-router".to_string(), action: Action::Create, default_domain: format!("{}.{}.{}", generate_id(), context.cluster_id().to_string(), test_domain), @@ -445,7 +445,7 @@ pub fn environment_3_apps_3_routers_3_databases( Database { kind: DatabaseKind::Postgresql, action: Action::Create, - id: generate_id(), + long_id: Uuid::new_v4(), name: database_name.clone(), version: "11.8.0".to_string(), fqdn_id: fqdn.clone(), @@ -467,7 +467,7 @@ pub fn environment_3_apps_3_routers_3_databases( Database { kind: DatabaseKind::Postgresql, action: Action::Create, - id: generate_id(), + long_id: Uuid::new_v4(), name: database_name_2.clone(), version: "11.8.0".to_string(), fqdn_id: fqdn_2.clone(), @@ -489,7 +489,7 @@ pub fn environment_3_apps_3_routers_3_databases( Database { kind: DatabaseKind::Mongodb, action: Action::Create, - id: generate_id(), + long_id: Uuid::new_v4(), name: database_db_name_mongo.clone(), version: version_mongo.to_string(), fqdn_id: database_host_mongo.clone(), @@ -517,7 +517,6 @@ pub fn working_minimal_environment(context: &Context, test_domain: &str) -> Envi let suffix = generate_id(); let application_id = generate_id(); let application_name = format!("{}-{}", "simple-app".to_string(), &suffix); - let router_id = generate_id(); let router_name = "main".to_string(); let application_domain = format!("{}.{}.{}", application_id, context.cluster_id().to_string(), test_domain); EnvironmentRequest { @@ -561,7 +560,7 @@ pub fn working_minimal_environment(context: &Context, test_domain: &str) -> Envi advance_settings: Default::default(), }], routers: vec![Router { - id: router_id, + long_id: Uuid::new_v4(), name: router_name, action: Action::Create, default_domain: application_domain, @@ -661,7 +660,7 @@ pub fn environnement_2_app_2_routers_1_psql( databases: vec![Database { kind: DatabaseKind::Postgresql, action: Action::Create, - id: generate_id(), + long_id: Uuid::new_v4(), name: database_name.clone(), version: "11.8.0".to_string(), fqdn_id: fqdn.clone(), @@ -778,7 +777,7 @@ pub fn environnement_2_app_2_routers_1_psql( ], routers: vec![ Router { - id: generate_id(), + long_id: Uuid::new_v4(), name: "main".to_string(), action: Action::Create, default_domain: format!("{}.{}.{}", generate_id(), context.cluster_id().to_string(), test_domain), @@ -791,7 +790,7 @@ pub fn environnement_2_app_2_routers_1_psql( sticky_sessions_enabled: false, }, Router { - id: generate_id(), + long_id: Uuid::new_v4(), name: "second-router".to_string(), action: Action::Create, default_domain: format!("{}.{}.{}", generate_id(), context.cluster_id().to_string(), test_domain), @@ -873,7 +872,7 @@ pub fn echo_app_environment(context: &Context, test_domain: &str) -> Environment advance_settings: Default::default(), }], routers: vec![Router { - id: generate_id(), + long_id: Uuid::new_v4(), name: "main".to_string(), action: Action::Create, default_domain: format!("{}.{}.{}", generate_id(), context.cluster_id().to_string(), test_domain), @@ -984,7 +983,7 @@ pub fn environment_only_http_server_router(context: &Context, test_domain: &str) advance_settings: Default::default(), }], routers: vec![Router { - id: generate_id(), + long_id: Uuid::new_v4(), name: "main".to_string(), action: Action::Create, default_domain: format!("{}.{}.{}", generate_id(), context.cluster_id(), test_domain), @@ -1087,7 +1086,7 @@ pub fn test_db( let db = Database { kind: db_kind.clone(), action: Action::Create, - id: db_id.clone(), + long_id: Uuid::new_v4(), name: db_id.clone(), version: version.to_string(), fqdn_id: database_host.clone(), diff --git a/test_utilities/src/utilities.rs b/test_utilities/src/utilities.rs index 9ec311e6..1d16b621 100644 --- a/test_utilities/src/utilities.rs +++ b/test_utilities/src/utilities.rs @@ -53,6 +53,7 @@ use qovery_engine::io_models::DatabaseMode::MANAGED; use qovery_engine::logger::{Logger, StdIoLogger}; use qovery_engine::models::scaleway::ScwZone; use qovery_engine::runtime::block_on; +use qovery_engine::utilities::to_short_id; use time::Instant; use url::Url; @@ -897,7 +898,7 @@ pub fn db_fqnd(db: Database) -> String { match db.publicly_accessible { true => db.fqdn, false => match db.mode == MANAGED { - true => format!("{}-dns", db.id), + true => format!("{}-dns", to_short_id(&db.long_id)), false => match db.kind { DatabaseKind::Postgresql => "postgresqlpostgres", DatabaseKind::Mysql => "mysqlmysqldatabase", diff --git a/tests/aws/aws_databases.rs b/tests/aws/aws_databases.rs index 72c3450a..30346270 100644 --- a/tests/aws/aws_databases.rs +++ b/tests/aws/aws_databases.rs @@ -5,6 +5,7 @@ use qovery_engine::cloud_provider::Kind; use qovery_engine::io_models::{Action, CloneForTest, Database, DatabaseKind, DatabaseMode, Port, Protocol}; use test_utilities::aws::aws_default_engine_config; use tracing::{span, Level}; +use uuid::Uuid; use self::test_utilities::aws::{AWS_DATABASE_DISK_TYPE, AWS_DATABASE_INSTANCE_TYPE}; use self::test_utilities::utilities::{ @@ -12,6 +13,7 @@ use self::test_utilities::utilities::{ }; use qovery_engine::io_models::DatabaseMode::{CONTAINER, MANAGED}; use qovery_engine::transaction::TransactionResult; +use qovery_engine::utilities::to_short_id; use test_utilities::common::{test_db, Infrastructure}; /** @@ -261,7 +263,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() { environment.databases = vec![Database { kind: DatabaseKind::Postgresql, action: Action::Create, - id: generate_id(), + long_id: Uuid::new_v4(), name: database_db_name.clone(), version: "11.8.0".to_string(), fqdn_id: database_host.clone(), @@ -323,7 +325,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() { assert!(matches!(ret, TransactionResult::Ok)); // TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY - let database_name = format!("postgresql{}-0", &environment_check.databases[0].id); + let database_name = format!("postgresql{}-0", to_short_id(&environment_check.databases[0].long_id)); match is_pod_restarted_env(context, Kind::Aws, environment_check, database_name.as_str(), secrets) { (true, _) => assert!(true), (false, _) => assert!(false), diff --git a/tests/digitalocean/do_databases.rs b/tests/digitalocean/do_databases.rs index e806c2c2..6feefd0a 100644 --- a/tests/digitalocean/do_databases.rs +++ b/tests/digitalocean/do_databases.rs @@ -1,5 +1,6 @@ use ::function_name::named; use tracing::{span, warn, Level}; +use uuid::Uuid; use qovery_engine::cloud_provider::{Kind as ProviderKind, Kind}; use qovery_engine::io_models::{Action, CloneForTest, Database, DatabaseKind, DatabaseMode, Port, Protocol}; @@ -9,6 +10,7 @@ use test_utilities::utilities::{ }; use qovery_engine::io_models::DatabaseMode::{CONTAINER, MANAGED}; +use qovery_engine::utilities::to_short_id; use test_utilities::common::{database_test_environment, test_db, Infrastructure}; use test_utilities::digitalocean::{ clean_environments, do_default_engine_config, DO_MANAGED_DATABASE_DISK_TYPE, DO_MANAGED_DATABASE_INSTANCE_TYPE, @@ -279,7 +281,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() { environment.databases = vec![Database { kind: DatabaseKind::Postgresql, action: Action::Create, - id: generate_id(), + long_id: Uuid::new_v4(), name: database_db_name.clone(), version: "11.8.0".to_string(), fqdn_id: database_host.clone(), @@ -355,7 +357,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() { assert!(matches!(ret, TransactionResult::Ok)); // TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY - let database_name = format!("postgresql-{}-0", &environment_check.databases[0].id); + let database_name = format!("postgresql-{}-0", to_short_id(&environment_check.databases[0].long_id)); match is_pod_restarted_env( context.clone(), ProviderKind::Do, diff --git a/tests/scaleway/scw_databases.rs b/tests/scaleway/scw_databases.rs index 8de7ff7e..c56ab6bf 100644 --- a/tests/scaleway/scw_databases.rs +++ b/tests/scaleway/scw_databases.rs @@ -1,5 +1,6 @@ use ::function_name::named; use tracing::{span, warn, Level}; +use uuid::Uuid; use qovery_engine::cloud_provider::{Kind as ProviderKind, Kind}; use qovery_engine::io_models::{Action, CloneForTest, Database, DatabaseKind, DatabaseMode, Port, Protocol}; @@ -10,6 +11,7 @@ use test_utilities::utilities::{ }; use qovery_engine::io_models::DatabaseMode::{CONTAINER, MANAGED}; +use qovery_engine::utilities::to_short_id; use test_utilities::common::test_db; use test_utilities::common::{database_test_environment, Infrastructure}; use test_utilities::scaleway::{ @@ -284,7 +286,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() { environment.databases = vec![Database { kind: DatabaseKind::Postgresql, action: Action::Create, - id: generate_id(), + long_id: Uuid::new_v4(), name: database_db_name.clone(), version: "11.8.0".to_string(), fqdn_id: database_host.clone(), @@ -360,7 +362,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() { assert!(matches!(result, TransactionResult::Ok)); // TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY - let database_name = format!("postgresql-{}-0", &environment_check.databases[0].id); + let database_name = format!("postgresql-{}-0", to_short_id(&environment_check.databases[0].long_id)); match is_pod_restarted_env( context.clone(), ProviderKind::Scw, From 80fd9fc0702f6a204530f5bf4381c0585545d8f5 Mon Sep 17 00:00:00 2001 From: Romain GERARD Date: Fri, 29 Apr 2022 16:01:35 +0200 Subject: [PATCH 05/10] Fix long_id for router --- src/cloud_provider/service.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/cloud_provider/service.rs b/src/cloud_provider/service.rs index defbddf2..46b7844e 100644 --- a/src/cloud_provider/service.rs +++ b/src/cloud_provider/service.rs @@ -330,7 +330,7 @@ pub fn default_tera_context( ) -> TeraContext { let mut context = TeraContext::new(); context.insert("id", service.id()); - context.insert("long_id", service.id()); + context.insert("long_id", service.long_id()); context.insert("owner_id", environment.owner_id.as_str()); context.insert("project_id", environment.project_id.as_str()); context.insert("organization_id", environment.organization_id.as_str()); From e3439eff8efbe97dc67d247484f6294aecdeab96 Mon Sep 17 00:00:00 2001 From: Romain GERARD Date: Fri, 29 Apr 2022 16:12:20 +0200 Subject: [PATCH 06/10] Remove duplicate long_id --- src/models/aws/database.rs | 1 - src/models/database.rs | 1 - src/models/scaleway/database.rs | 1 - 3 files changed, 3 deletions(-) diff --git a/src/models/aws/database.rs b/src/models/aws/database.rs index 71c90b11..a5237851 100644 --- a/src/models/aws/database.rs +++ b/src/models/aws/database.rs @@ -176,7 +176,6 @@ where ); context.insert("namespace", environment.namespace()); - context.insert("long_id", &self.long_id); let version = self .get_version_aws_managed(event_details)? diff --git a/src/models/database.rs b/src/models/database.rs index 8d937bbd..589d87f5 100644 --- a/src/models/database.rs +++ b/src/models/database.rs @@ -487,7 +487,6 @@ where context.insert("kubernetes_cluster_id", kubernetes.id()); context.insert("kubernetes_cluster_name", kubernetes.name()); - context.insert("long_id", &self.long_id); context.insert("fqdn_id", self.fqdn_id.as_str()); context.insert("fqdn", self.fqdn(target, &self.fqdn, M::is_managed()).as_str()); context.insert("service_name", self.fqdn_id.as_str()); diff --git a/src/models/scaleway/database.rs b/src/models/scaleway/database.rs index 30efe5a5..2649942a 100644 --- a/src/models/scaleway/database.rs +++ b/src/models/scaleway/database.rs @@ -139,7 +139,6 @@ impl> Database { ); context.insert("namespace", environment.namespace()); - context.insert("long_id", &self.long_id); let version = get_version(event_details)?.matched_version(); context.insert("version_major", &version.to_major_version_string()); From ea6d0ecb44d1af9d1706a4d3085c713274458ef8 Mon Sep 17 00:00:00 2001 From: Romain GERARD Date: Fri, 29 Apr 2022 16:35:11 +0200 Subject: [PATCH 07/10] Revert database pvc annotation changes --- lib/aws/chart_values/mongodb/q-values.j2.yaml | 3 ++- lib/aws/chart_values/mysql/q-values.j2.yaml | 3 ++- lib/aws/chart_values/postgresql/q-values.j2.yaml | 1 + lib/digitalocean/chart_values/mongodb/q-values.j2.yaml | 3 ++- lib/digitalocean/chart_values/mysql/q-values.j2.yaml | 3 ++- lib/digitalocean/chart_values/postgresql/q-values.j2.yaml | 3 ++- lib/scaleway/chart_values/mongodb/q-values.j2.yaml | 3 ++- lib/scaleway/chart_values/mysql/q-values.j2.yaml | 3 ++- lib/scaleway/chart_values/postgresql/q-values.j2.yaml | 3 ++- 9 files changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/aws/chart_values/mongodb/q-values.j2.yaml b/lib/aws/chart_values/mongodb/q-values.j2.yaml index 461ed841..3e513b15 100644 --- a/lib/aws/chart_values/mongodb/q-values.j2.yaml +++ b/lib/aws/chart_values/mongodb/q-values.j2.yaml @@ -344,9 +344,10 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: + ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseLongId: {{ long_id }} + databaseName: {{ sanitized_name }} ## Configure the ingress resource that allows you to access the ## MongoDB installation. Set up the URL diff --git a/lib/aws/chart_values/mysql/q-values.j2.yaml b/lib/aws/chart_values/mysql/q-values.j2.yaml index 15e57bad..218cf192 100644 --- a/lib/aws/chart_values/mysql/q-values.j2.yaml +++ b/lib/aws/chart_values/mysql/q-values.j2.yaml @@ -314,9 +314,10 @@ master: ## PVC annotations ## annotations: + ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseLongId: {{ long_id }} + databaseName: {{ sanitized_name }} ## Persistent Volume Access Mode ## diff --git a/lib/aws/chart_values/postgresql/q-values.j2.yaml b/lib/aws/chart_values/postgresql/q-values.j2.yaml index be1475e2..886a36b8 100644 --- a/lib/aws/chart_values/postgresql/q-values.j2.yaml +++ b/lib/aws/chart_values/postgresql/q-values.j2.yaml @@ -326,6 +326,7 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: + ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} databaseLongId: {{ long_id }} diff --git a/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml b/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml index 273f0404..409ff2ec 100644 --- a/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/mongodb/q-values.j2.yaml @@ -347,9 +347,10 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: + ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseLongId: {{ long_id }} + databaseName: '{{ sanitized_name }}' ## Configure the ingress resource that allows you to access the ## MongoDB installation. Set up the URL diff --git a/lib/digitalocean/chart_values/mysql/q-values.j2.yaml b/lib/digitalocean/chart_values/mysql/q-values.j2.yaml index 4a68de80..3c8ec5db 100644 --- a/lib/digitalocean/chart_values/mysql/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/mysql/q-values.j2.yaml @@ -314,9 +314,10 @@ master: ## PVC annotations ## annotations: + ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseLongId: {{ long_id }} + databaseName: '{{ sanitized_name }}' ## Persistent Volume Access Mode ## diff --git a/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml b/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml index ad87ddcc..22c1974e 100644 --- a/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml +++ b/lib/digitalocean/chart_values/postgresql/q-values.j2.yaml @@ -328,9 +328,10 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: + ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseLongId: {{ long_id }} + databaseName: '{{ sanitized_name }}' ## updateStrategy for PostgreSQL StatefulSet and its slaves StatefulSets ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies diff --git a/lib/scaleway/chart_values/mongodb/q-values.j2.yaml b/lib/scaleway/chart_values/mongodb/q-values.j2.yaml index e1a609f6..e5a0d7d9 100644 --- a/lib/scaleway/chart_values/mongodb/q-values.j2.yaml +++ b/lib/scaleway/chart_values/mongodb/q-values.j2.yaml @@ -196,9 +196,10 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: + ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseLongId: {{ long_id }} + databaseName: '{{ sanitized_name }}' # volume.beta.kubernetes.io/storage-class=scw-sbv-ssd-0: ## Prometheus Exporter / Metrics diff --git a/lib/scaleway/chart_values/mysql/q-values.j2.yaml b/lib/scaleway/chart_values/mysql/q-values.j2.yaml index 7d66a8f4..612b39cd 100644 --- a/lib/scaleway/chart_values/mysql/q-values.j2.yaml +++ b/lib/scaleway/chart_values/mysql/q-values.j2.yaml @@ -292,9 +292,10 @@ master: ## PVC annotations ## annotations: + ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseLongId: {{ long_id }} + databaseName: '{{ sanitized_name }}' ## Persistent Volume Access Mode ## diff --git a/lib/scaleway/chart_values/postgresql/q-values.j2.yaml b/lib/scaleway/chart_values/postgresql/q-values.j2.yaml index b1a83685..9ca8052f 100644 --- a/lib/scaleway/chart_values/postgresql/q-values.j2.yaml +++ b/lib/scaleway/chart_values/postgresql/q-values.j2.yaml @@ -169,9 +169,10 @@ persistence: - ReadWriteOnce size: {{ database_disk_size_in_gib }}Gi annotations: + ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseLongId: {{ long_id }} + databaseName: '{{ sanitized_name }}' ## ## PostgreSQL Master parameters From c9616927341bf4b8ac8b36d2e1edc3c6894414db Mon Sep 17 00:00:00 2001 From: Romain GERARD Date: Fri, 29 Apr 2022 17:03:38 +0200 Subject: [PATCH 08/10] Revert database pvc annotation changes --- lib/aws/chart_values/postgresql/q-values.j2.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/aws/chart_values/postgresql/q-values.j2.yaml b/lib/aws/chart_values/postgresql/q-values.j2.yaml index 886a36b8..1c11b3c8 100644 --- a/lib/aws/chart_values/postgresql/q-values.j2.yaml +++ b/lib/aws/chart_values/postgresql/q-values.j2.yaml @@ -329,7 +329,7 @@ persistence: ownerId: {{ owner_id }} envId: {{ environment_id }} databaseId: {{ id }} - databaseLongId: {{ long_id }} + databaseName: {{ sanitized_name }} ## updateStrategy for PostgreSQL StatefulSet and its slaves StatefulSets ## ref: https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/#update-strategies From d5d44fa17c748fae2afa37d4daf597a98cdd18ba Mon Sep 17 00:00:00 2001 From: BenjaminCh Date: Tue, 3 May 2022 15:01:54 +0200 Subject: [PATCH 09/10] tests: fix sccache release retrieval (#705) --- .github/workflows/tests.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 7eb52ed9..ba465df9 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -21,20 +21,23 @@ jobs: - uses: hashicorp/setup-terraform@v1 with: terraform_version: 0.14.10 + - uses: sergeysova/jq-action@v2 + id: sccache_release + with: + cmd: 'curl --silent "https://api.github.com/repos/Qovery/sccache-bin/releases/latest" | jq .tag_name' + multiline: false - name: build-linter-utests run: | echo "########## LINTER ##########" cargo fmt --all -- --check --color=always || (echo "Use cargo fmt to format your code"; exit 1) rustup component add clippy cargo clippy --locked --all --all-features --lib -- -D warnings || (echo "Solve your clippy warnings to continue"; exit 1) - export PATH=$GITHUB_WORKSPACE/bin:$PATH export RUSTC_WRAPPER=$GITHUB_WORKSPACE/bin/sccache export SCCACHE_REDIS=${{ secrets.SCCACHE_REDIS }} export TF_PLUGIN_CACHE_DIR=$HOME/.terraform.d/plugin-cache mkdir -p $GITHUB_WORKSPACE/bin $HOME/.terraform.d/plugin-cache - sccache_release=$(curl --silent "https://github.com/Qovery/sccache-bin/releases/latest" | sed -r 's/^.+tag\/(.+)">.+/\1/') - curl -sLo $GITHUB_WORKSPACE/bin/sccache https://github.com/Qovery/sccache-bin/releases/download/${sccache_release}/sccache + curl -sLo $GITHUB_WORKSPACE/bin/sccache https://github.com/Qovery/sccache-bin/releases/download/${{ steps.sccache_release.outputs.value }}/sccache chmod 755 $GITHUB_WORKSPACE/bin/sccache echo "########## SHARED CACHE STATUS ##########" sccache --version From b96d800ad599cedc9312cda982949cf2b55d596e Mon Sep 17 00:00:00 2001 From: BenjaminCh Date: Tue, 3 May 2022 17:46:41 +0200 Subject: [PATCH 10/10] fix: add wildcarded cluster domain to dns provider (#698) Ticket: ENG-1152 --- ...inx-ingress.yaml => nginx-ingress.j2.yaml} | 4 +++ .../chart_values/nginx-ingress.j2.yaml | 1 + ...inx-ingress.yaml => nginx-ingress.j2.yaml} | 1 + src/cloud_provider/aws/kubernetes/mod.rs | 1 + .../digitalocean/kubernetes/mod.rs | 1 + src/cloud_provider/scaleway/kubernetes/mod.rs | 1 + test_utilities/src/aws.rs | 4 ++- test_utilities/src/cloudflare.rs | 6 +++- test_utilities/src/common.rs | 30 ++++++++++++++----- test_utilities/src/digitalocean.rs | 4 ++- test_utilities/src/scaleway.rs | 4 ++- tests/aws/aws_kubernetes.rs | 8 ++--- tests/scaleway/scw_kubernetes.rs | 5 ++-- 13 files changed, 51 insertions(+), 19 deletions(-) rename lib/aws/bootstrap/chart_values/{nginx-ingress.yaml => nginx-ingress.j2.yaml} (84%) rename lib/scaleway/bootstrap/chart_values/{nginx-ingress.yaml => nginx-ingress.j2.yaml} (92%) diff --git a/lib/aws/bootstrap/chart_values/nginx-ingress.yaml b/lib/aws/bootstrap/chart_values/nginx-ingress.j2.yaml similarity index 84% rename from lib/aws/bootstrap/chart_values/nginx-ingress.yaml rename to lib/aws/bootstrap/chart_values/nginx-ingress.j2.yaml index 3482a49e..370f4ac8 100644 --- a/lib/aws/bootstrap/chart_values/nginx-ingress.yaml +++ b/lib/aws/bootstrap/chart_values/nginx-ingress.j2.yaml @@ -17,10 +17,14 @@ controller: targetCPUUtilizationPercentage: 50 targetMemoryUtilizationPercentage: 50 + publishService: + enabled: true + service: enabled: true annotations: service.beta.kubernetes.io/aws-load-balancer-type: nlb + external-dns.alpha.kubernetes.io/hostname: "{{ wildcard_managed_dns }}" externalTrafficPolicy: "Local" sessionAffinity: "" healthCheckNodePort: 0 \ No newline at end of file diff --git a/lib/digitalocean/bootstrap/chart_values/nginx-ingress.j2.yaml b/lib/digitalocean/bootstrap/chart_values/nginx-ingress.j2.yaml index eea65639..9ea3d1f1 100644 --- a/lib/digitalocean/bootstrap/chart_values/nginx-ingress.j2.yaml +++ b/lib/digitalocean/bootstrap/chart_values/nginx-ingress.j2.yaml @@ -23,4 +23,5 @@ controller: service.beta.kubernetes.io/do-loadbalancer-size-slug: "lb-small" service.beta.kubernetes.io/do-loadbalancer-enable-proxy-protocol: "true" service.beta.kubernetes.io/do-loadbalancer-hostname: {{ do_loadbalancer_hostname }} + external-dns.alpha.kubernetes.io/hostname: "{{ wildcard_managed_dns }}" externalTrafficPolicy: "Local" diff --git a/lib/scaleway/bootstrap/chart_values/nginx-ingress.yaml b/lib/scaleway/bootstrap/chart_values/nginx-ingress.j2.yaml similarity index 92% rename from lib/scaleway/bootstrap/chart_values/nginx-ingress.yaml rename to lib/scaleway/bootstrap/chart_values/nginx-ingress.j2.yaml index 8f964673..46c14265 100644 --- a/lib/scaleway/bootstrap/chart_values/nginx-ingress.yaml +++ b/lib/scaleway/bootstrap/chart_values/nginx-ingress.j2.yaml @@ -22,4 +22,5 @@ controller: service.beta.kubernetes.io/scw-loadbalancer-proxy-protocol-v2: "false" service.beta.kubernetes.io/scw-loadbalancer-health-check-type: tcp service.beta.kubernetes.io/scw-loadbalancer-use-hostname: "false" + external-dns.alpha.kubernetes.io/hostname: "{{ wildcard_managed_dns }}" externalTrafficPolicy: "Local" \ No newline at end of file diff --git a/src/cloud_provider/aws/kubernetes/mod.rs b/src/cloud_provider/aws/kubernetes/mod.rs index 79faf7f3..6039df06 100644 --- a/src/cloud_provider/aws/kubernetes/mod.rs +++ b/src/cloud_provider/aws/kubernetes/mod.rs @@ -414,6 +414,7 @@ impl EKS { "managed_dns_resolvers_terraform_format", &managed_dns_resolvers_terraform_format, ); + context.insert("wildcard_managed_dns", &self.dns_provider().domain().wildcarded().to_string()); match self.dns_provider.kind() { dns_provider::Kind::Cloudflare => { diff --git a/src/cloud_provider/digitalocean/kubernetes/mod.rs b/src/cloud_provider/digitalocean/kubernetes/mod.rs index d9795030..2f15f74c 100644 --- a/src/cloud_provider/digitalocean/kubernetes/mod.rs +++ b/src/cloud_provider/digitalocean/kubernetes/mod.rs @@ -257,6 +257,7 @@ impl DOKS { "managed_dns_resolvers_terraform_format", &managed_dns_resolvers_terraform_format, ); + context.insert("wildcard_managed_dns", &self.dns_provider().domain().wildcarded().to_string()); match self.dns_provider.kind() { dns_provider::Kind::Cloudflare => { context.insert("external_dns_provider", self.dns_provider.provider_name()); diff --git a/src/cloud_provider/scaleway/kubernetes/mod.rs b/src/cloud_provider/scaleway/kubernetes/mod.rs index 0fec4092..78fd8bde 100644 --- a/src/cloud_provider/scaleway/kubernetes/mod.rs +++ b/src/cloud_provider/scaleway/kubernetes/mod.rs @@ -456,6 +456,7 @@ impl Kapsule { "managed_dns_resolvers_terraform_format", &managed_dns_resolvers_terraform_format, ); + context.insert("wildcard_managed_dns", &self.dns_provider().domain().wildcarded().to_string()); match self.dns_provider.kind() { dns_provider::Kind::Cloudflare => { context.insert("external_dns_provider", self.dns_provider.provider_name()); diff --git a/test_utilities/src/aws.rs b/test_utilities/src/aws.rs index 36fb944c..c65eab5d 100644 --- a/test_utilities/src/aws.rs +++ b/test_utilities/src/aws.rs @@ -61,7 +61,9 @@ pub fn aws_default_engine_config(context: &Context, logger: Box) -> logger, AWS_TEST_REGION.to_string().as_str(), AWS_KUBERNETES_VERSION.to_string(), - &ClusterDomain::Default, + &ClusterDomain::Default { + cluster_id: context.cluster_id().to_string(), + }, None, ) } diff --git a/test_utilities/src/cloudflare.rs b/test_utilities/src/cloudflare.rs index 6cee1e77..d00e9de2 100644 --- a/test_utilities/src/cloudflare.rs +++ b/test_utilities/src/cloudflare.rs @@ -8,7 +8,11 @@ pub fn dns_provider_cloudflare(context: &Context, domain: &ClusterDomain) -> Box let secrets = FuncTestsSecrets::new(); let domain = Domain::new(match domain { ClusterDomain::Custom(domain) => domain.to_string(), - ClusterDomain::Default => secrets.CLOUDFLARE_DOMAIN.expect("CLOUDFLARE_DOMAIN is not set"), + ClusterDomain::Default { cluster_id } => format!( + "{}.{}", + cluster_id, + secrets.CLOUDFLARE_DOMAIN.expect("CLOUDFLARE_DOMAIN is not set") + ), }); Box::new(Cloudflare::new( context.clone(), diff --git a/test_utilities/src/common.rs b/test_utilities/src/common.rs index a4c2275f..f0de9792 100644 --- a/test_utilities/src/common.rs +++ b/test_utilities/src/common.rs @@ -54,7 +54,7 @@ pub enum RegionActivationStatus { } pub enum ClusterDomain { - Default, + Default { cluster_id: String }, Custom(String), } @@ -1149,7 +1149,9 @@ pub fn test_db( logger.clone(), localisation.as_str(), kubernetes_version.clone(), - &ClusterDomain::Default, + &ClusterDomain::Default { + cluster_id: context.cluster_id().to_string(), + }, None, ), Kind::Do => DO::docker_cr_engine( @@ -1157,7 +1159,9 @@ pub fn test_db( logger.clone(), localisation.as_str(), kubernetes_version.clone(), - &ClusterDomain::Default, + &ClusterDomain::Default { + cluster_id: context.cluster_id().to_string(), + }, None, ), Kind::Scw => Scaleway::docker_cr_engine( @@ -1165,7 +1169,9 @@ pub fn test_db( logger.clone(), localisation.as_str(), kubernetes_version.clone(), - &ClusterDomain::Default, + &ClusterDomain::Default { + cluster_id: context.cluster_id().to_string(), + }, None, ), }; @@ -1200,7 +1206,7 @@ pub fn test_db( }; } DatabaseMode::MANAGED => { - match get_svc(context, provider_kind.clone(), environment.clone(), secrets.clone()) { + match get_svc(context.clone(), provider_kind.clone(), environment.clone(), secrets.clone()) { Ok(svc) => { let service = svc .items @@ -1223,13 +1229,17 @@ pub fn test_db( } } + let cluster_id = context.cluster_id().to_string(); + let engine_config_for_delete = match provider_kind { Kind::Aws => AWS::docker_cr_engine( &context_for_delete, logger.clone(), localisation.as_str(), kubernetes_version, - &ClusterDomain::Default, + &ClusterDomain::Default { + cluster_id: cluster_id.to_string(), + }, None, ), Kind::Do => DO::docker_cr_engine( @@ -1237,7 +1247,9 @@ pub fn test_db( logger.clone(), localisation.as_str(), kubernetes_version, - &ClusterDomain::Default, + &ClusterDomain::Default { + cluster_id: cluster_id.to_string(), + }, None, ), Kind::Scw => Scaleway::docker_cr_engine( @@ -1245,7 +1257,9 @@ pub fn test_db( logger.clone(), localisation.as_str(), kubernetes_version, - &ClusterDomain::Default, + &ClusterDomain::Default { + cluster_id: cluster_id.to_string(), + }, None, ), }; diff --git a/test_utilities/src/digitalocean.rs b/test_utilities/src/digitalocean.rs index 36a5db93..c052a882 100644 --- a/test_utilities/src/digitalocean.rs +++ b/test_utilities/src/digitalocean.rs @@ -49,7 +49,9 @@ pub fn do_default_engine_config(context: &Context, logger: Box) -> E logger, DO_TEST_REGION.to_string().as_str(), DO_KUBERNETES_VERSION.to_string(), - &ClusterDomain::Default, + &ClusterDomain::Default { + cluster_id: context.cluster_id().to_string(), + }, None, ) } diff --git a/test_utilities/src/scaleway.rs b/test_utilities/src/scaleway.rs index d3c570bf..e55e1ca5 100644 --- a/test_utilities/src/scaleway.rs +++ b/test_utilities/src/scaleway.rs @@ -70,7 +70,9 @@ pub fn scw_default_engine_config(context: &Context, logger: Box) -> logger, SCW_TEST_ZONE.to_string().as_str(), SCW_KUBERNETES_VERSION.to_string(), - &ClusterDomain::Default, + &ClusterDomain::Default { + cluster_id: context.cluster_id().to_string(), + }, None, ) } diff --git a/tests/aws/aws_kubernetes.rs b/tests/aws/aws_kubernetes.rs index 53f790b8..47ddb0e0 100644 --- a/tests/aws/aws_kubernetes.rs +++ b/tests/aws/aws_kubernetes.rs @@ -22,20 +22,18 @@ fn create_and_destroy_eks_cluster( engine_run_test(|| { let region = AwsRegion::from_str(region.as_str()).expect("Wasn't able to convert the desired region"); let zones = region.get_zones(); + let cluster_id = generate_cluster_id(region.to_string().as_str()); cluster_test( test_name, Kind::Aws, - context( - generate_id().as_str(), - generate_cluster_id(region.to_string().as_str()).as_str(), - ), + context(generate_id().as_str(), cluster_id.as_str()), logger(), region.to_aws_format().as_str(), Some(zones), test_type, major_boot_version, minor_boot_version, - &ClusterDomain::Default, + &ClusterDomain::Default { cluster_id }, Option::from(vpc_network_mode), None, ) diff --git a/tests/scaleway/scw_kubernetes.rs b/tests/scaleway/scw_kubernetes.rs index 952cc24d..4f6f515b 100644 --- a/tests/scaleway/scw_kubernetes.rs +++ b/tests/scaleway/scw_kubernetes.rs @@ -18,17 +18,18 @@ fn create_and_destroy_kapsule_cluster( vpc_network_mode: Option, ) { engine_run_test(|| { + let cluster_id = generate_cluster_id(zone.as_str()); cluster_test( test_name, Kind::Scw, - context(generate_id().as_str(), generate_cluster_id(zone.as_str()).as_str()), + context(generate_id().as_str(), cluster_id.as_str()), logger(), zone.as_str(), None, test_type, major_boot_version, minor_boot_version, - &ClusterDomain::Default, + &ClusterDomain::Default { cluster_id }, vpc_network_mode, None, )