This commit is contained in:
Erèbe - Romain Gerard
2022-03-25 10:21:34 +01:00
committed by GitHub
parent 804fb1b990
commit 4653964798
72 changed files with 785 additions and 948 deletions

View File

@@ -223,7 +223,7 @@ impl Service for ApplicationAws {
let cpu_limits = match validate_k8s_required_cpu_and_burstable(
&ListenersHelper::new(&self.listeners),
&self.context.execution_id(),
self.context.execution_id(),
&self.id,
self.total_cpus(),
self.cpu_burst(),
@@ -233,7 +233,7 @@ impl Service for ApplicationAws {
Ok(l) => l,
Err(e) => {
return Err(EngineError::new_k8s_validate_required_cpu_and_burstable_error(
event_details.clone(),
event_details,
self.total_cpus(),
self.cpu_burst(),
e,
@@ -297,7 +297,7 @@ impl Create for ApplicationAws {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, crate::cloud_provider::service::Action::Create, || {
@@ -317,7 +317,7 @@ impl Create for ApplicationAws {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);

View File

@@ -123,7 +123,7 @@ impl Service for MongoDbAws {
// https://docs.aws.amazon.com/documentdb/latest/developerguide/limits.html#limits-naming_constraints
let prefix = "mongodb";
let max_size = 60 - prefix.len(); // 63 (max DocumentDB) - 3 (k8s statefulset chars)
let mut new_name = format!("{}{}", prefix, self.name().replace("_", "").replace("-", ""));
let mut new_name = format!("{}{}", prefix, self.name().replace('_', "").replace('-', ""));
if new_name.chars().count() > max_size {
new_name = new_name[..max_size].to_string();
}
@@ -183,7 +183,7 @@ impl Service for MongoDbAws {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -191,7 +191,7 @@ impl Service for MongoDbAws {
context.insert("namespace", environment.namespace());
let version = self
.matching_correct_version(self.is_managed_service(), event_details.clone())?
.matching_correct_version(self.is_managed_service(), event_details)?
.matched_version()
.to_string();
context.insert("version", &version);

View File

@@ -188,7 +188,7 @@ impl Service for MySQLAws {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -204,7 +204,7 @@ impl Service for MySQLAws {
Ok(v) => v,
Err(e) => {
return Err(EngineError::new_terraform_unsupported_context_parameter_value(
event_details.clone(),
event_details,
"MySQL".to_string(),
"parameter_group_family".to_string(),
version.matched_version().to_string(),

View File

@@ -188,7 +188,7 @@ impl Service for PostgreSQLAws {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -196,7 +196,7 @@ impl Service for PostgreSQLAws {
context.insert("namespace", environment.namespace());
let version = self
.matching_correct_version(self.is_managed_service(), event_details.clone())?
.matching_correct_version(self.is_managed_service(), event_details)?
.matched_version()
.to_string();
context.insert("version", &version);

View File

@@ -131,7 +131,7 @@ impl Service for RedisAws {
// https://aws.amazon.com/about-aws/whats-new/2019/08/elasticache_supports_50_chars_cluster_name
let prefix = "redis";
let max_size = 47 - prefix.len(); // 50 (max Elasticache ) - 3 (k8s statefulset chars)
let mut new_name = self.name().replace("_", "").replace("-", "");
let mut new_name = self.name().replace('_', "").replace('-', "");
if new_name.chars().count() > max_size {
new_name = new_name[..max_size].to_string();
@@ -192,7 +192,7 @@ impl Service for RedisAws {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -208,7 +208,7 @@ impl Service for RedisAws {
"default.redis6.x"
} else {
return Err(EngineError::new_terraform_unsupported_context_parameter_value(
event_details.clone(),
event_details,
"Elasicache".to_string(),
"database_elasticache_parameter_group_name".to_string(),
format!("default.redis{}", version),

View File

@@ -68,7 +68,7 @@ pub fn aws_helm_charts(
Err(e) => {
let message_safe = "Can't deploy helm chart as Qovery terraform config file has not been rendered by Terraform. Are you running it in dry run mode?";
return Err(CommandError::new(
format!("{}, error: {:?}", message_safe.to_string(), e),
format!("{}, error: {:?}", message_safe, e),
Some(message_safe.to_string()),
));
}
@@ -84,8 +84,8 @@ pub fn aws_helm_charts(
qovery_terraform_config_file
);
return Err(CommandError::new(
format!("{}, error: {:?}", message_safe.to_string(), e),
Some(message_safe.to_string()),
format!("{}, error: {:?}", message_safe, e),
Some(message_safe),
));
}
};
@@ -153,7 +153,7 @@ pub fn aws_helm_charts(
..Default::default()
},
};
let is_cni_old_installed_version = match aws_vpc_cni_chart.is_cni_old_installed_version(kubernetes_config, &envs) {
let is_cni_old_installed_version = match aws_vpc_cni_chart.is_cni_old_installed_version(kubernetes_config, envs) {
Ok(x) => x,
Err(e) => return Err(e),
};
@@ -663,7 +663,7 @@ datasources:
accessKey: '{}'
secretKey: '{}'
",
prometheus_internal_url.clone(),
prometheus_internal_url,
&loki.chart_info.name,
loki_namespace.to_string(),
&loki.chart_info.name,

View File

@@ -170,9 +170,9 @@ impl EKS {
Ok(x) => aws_zones.push(x),
Err(e) => {
return Err(EngineError::new_unsupported_zone(
event_details.clone(),
event_details,
region.to_string(),
zone.to_string(),
zone,
CommandError::new_from_safe_message(e.to_string()),
))
}
@@ -181,11 +181,8 @@ impl EKS {
for node_group in &nodes_groups {
if let Err(e) = AwsInstancesType::from_str(node_group.instance_type.as_str()) {
let err = EngineError::new_unsupported_instance_type(
event_details.clone(),
node_group.instance_type.as_str(),
e,
);
let err =
EngineError::new_unsupported_instance_type(event_details, node_group.instance_type.as_str(), e);
logger.log(LogLevel::Error, EngineEvent::Error(err.clone(), None));
@@ -198,8 +195,8 @@ impl EKS {
context.clone(),
"s3-temp-id".to_string(),
"default-s3".to_string(),
cloud_provider.access_key_id().clone(),
cloud_provider.secret_access_key().clone(),
cloud_provider.access_key_id(),
cloud_provider.secret_access_key(),
region.clone(),
true,
context.resource_expiration_in_seconds(),
@@ -239,7 +236,7 @@ impl EKS {
.dns_provider
.resolvers()
.iter()
.map(|x| format!("{}", x.clone().to_string()))
.map(|x| format!("{}", x.clone()))
.collect();
terraform_list_format(managed_dns_resolvers)
@@ -458,7 +455,7 @@ impl EKS {
// Vault
context.insert("vault_auth_method", "none");
if let Some(_) = env::var_os("VAULT_ADDR") {
if env::var_os("VAULT_ADDR").is_some() {
// select the correct used method
match env::var_os("VAULT_ROLE_ID") {
Some(role_id) => {
@@ -471,7 +468,7 @@ impl EKS {
LogLevel::Error,
EngineEvent::Error(
EngineError::new_missing_required_env_variable(
event_details.clone(),
event_details,
"VAULT_SECRET_ID".to_string(),
),
None,
@@ -480,7 +477,7 @@ impl EKS {
}
}
None => {
if let Some(_) = env::var_os("VAULT_TOKEN") {
if env::var_os("VAULT_TOKEN").is_some() {
context.insert("vault_auth_method", "token")
}
}
@@ -525,7 +522,7 @@ impl EKS {
// AWS - EKS
context.insert("aws_availability_zones", &aws_zones);
context.insert("eks_cidr_subnet", &eks_cidr_subnet.clone());
context.insert("eks_cidr_subnet", &eks_cidr_subnet);
context.insert("kubernetes_cluster_name", &self.name());
context.insert("kubernetes_cluster_id", self.id());
context.insert("eks_region_cluster_id", region_cluster_id.as_str());
@@ -679,9 +676,9 @@ impl EKS {
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -690,13 +687,12 @@ impl EKS {
// this is due to the required dependencies of lib/aws/bootstrap/*.tf files
let bootstrap_charts_dir = format!("{}/common/bootstrap/charts", self.context.lib_root_dir());
let common_charts_temp_dir = format!("{}/common/charts", temp_dir.as_str());
if let Err(e) =
crate::template::copy_non_template_files(bootstrap_charts_dir.to_string(), common_charts_temp_dir.as_str())
if let Err(e) = crate::template::copy_non_template_files(&bootstrap_charts_dir, common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
bootstrap_charts_dir.to_string(),
common_charts_temp_dir.to_string(),
event_details,
bootstrap_charts_dir,
common_charts_temp_dir,
e,
));
}
@@ -730,7 +726,7 @@ impl EKS {
),
Err(e) => {
return Err(EngineError::new_terraform_cannot_remove_entry_out(
event_details.clone(),
event_details,
entry.to_string(),
e,
))
@@ -752,7 +748,7 @@ impl EKS {
// terraform deployment dedicated to cloud resources
if let Err(e) = terraform_init_validate_plan_apply(temp_dir.as_str(), self.context.is_dry_run_deploy()) {
return Err(EngineError::new_terraform_error_while_executing_pipeline(
event_details.clone(),
event_details,
e,
));
}
@@ -776,11 +772,11 @@ impl EKS {
cluster_id: self.id.clone(),
cluster_long_id: self.long_id,
region: self.region(),
cluster_name: self.cluster_name().to_string(),
cluster_name: self.cluster_name(),
cloud_provider: "aws".to_string(),
test_cluster: self.context.is_test_cluster(),
aws_access_key_id: self.cloud_provider.access_key_id().to_string(),
aws_secret_access_key: self.cloud_provider.secret_access_key().to_string(),
aws_access_key_id: self.cloud_provider.access_key_id(),
aws_secret_access_key: self.cloud_provider.secret_access_key(),
vpc_qovery_network_mode: self.options.vpc_qovery_network_mode.clone(),
qovery_engine_location: self.get_engine_location(),
ff_log_history_enabled: self.context.is_feature_enabled(&Features::LogsHistory),
@@ -807,13 +803,13 @@ impl EKS {
format!("{}/qovery-tf-config.json", &temp_dir).as_str(),
&charts_prerequisites,
Some(&temp_dir),
&kubeconfig_path,
kubeconfig_path,
&credentials_environment_variables,
)
.map_err(|e| EngineError::new_helm_charts_setup_error(event_details.clone(), e))?;
deploy_charts_levels(
&kubeconfig_path,
kubeconfig_path,
&credentials_environment_variables,
helm_charts_to_deploy,
self.context.is_dry_run_deploy(),
@@ -837,12 +833,12 @@ impl EKS {
match kubectl_exec_get_events(kubeconfig_path, None, environment_variables) {
Ok(ok_line) => self.logger().log(
LogLevel::Info,
EngineEvent::Deploying(event_details.clone(), EventMessage::new(ok_line, None)),
EngineEvent::Deploying(event_details, EventMessage::new(ok_line, None)),
),
Err(err) => self.logger().log(
LogLevel::Error,
EngineEvent::Deploying(
event_details.clone(),
event_details,
EventMessage::new("Error trying to get kubernetes events".to_string(), Some(err.message())),
),
),
@@ -911,9 +907,9 @@ impl EKS {
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -922,13 +918,12 @@ impl EKS {
// this is due to the required dependencies of lib/aws/bootstrap/*.tf files
let bootstrap_charts_dir = format!("{}/common/bootstrap/charts", self.context.lib_root_dir());
let common_charts_temp_dir = format!("{}/common/charts", temp_dir.as_str());
if let Err(e) =
crate::template::copy_non_template_files(bootstrap_charts_dir.to_string(), common_charts_temp_dir.as_str())
if let Err(e) = crate::template::copy_non_template_files(&bootstrap_charts_dir, common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
bootstrap_charts_dir.to_string(),
common_charts_temp_dir.to_string(),
event_details,
bootstrap_charts_dir,
common_charts_temp_dir,
e,
));
}
@@ -946,7 +941,7 @@ impl EKS {
tf_workers_resources_name
}
Err(e) => {
let error = EngineError::new_terraform_state_does_not_exist(event_details.clone(), e);
let error = EngineError::new_terraform_state_does_not_exist(event_details, e);
self.logger()
.log(LogLevel::Error, EngineEvent::Error(error.clone(), None));
return Err(error);
@@ -954,10 +949,7 @@ impl EKS {
};
if tf_workers_resources.is_empty() {
return Err(EngineError::new_cluster_has_no_worker_nodes(
event_details.clone(),
None,
));
return Err(EngineError::new_cluster_has_no_worker_nodes(event_details, None));
}
let kubernetes_config_file_path = self.get_kubeconfig_file_path()?;
@@ -983,7 +975,7 @@ impl EKS {
Ok(job_count) if job_count > 0 => current_engine_jobs += 1,
Err(e) => {
let safe_message = "Error while looking at the API metric value";
return OperationResult::Retry(EngineError::new_cannot_get_k8s_api_custom_metrics(event_details.clone(), CommandError::new(format!("{}, error: {}", safe_message, e.to_string()), Some(safe_message.to_string()))));
return OperationResult::Retry(EngineError::new_cannot_get_k8s_api_custom_metrics(event_details.clone(), CommandError::new(format!("{}, error: {}", safe_message, e), Some(safe_message.to_string()))));
}
_ => {}
}
@@ -1010,7 +1002,7 @@ impl EKS {
return Err(error)
}
Err(retry::Error::Internal(msg)) => {
return Err(EngineError::new_cannot_pause_cluster_tasks_are_running(event_details.clone(), Some(CommandError::new_from_safe_message(msg))))
return Err(EngineError::new_cannot_pause_cluster_tasks_are_running(event_details, Some(CommandError::new_from_safe_message(msg))))
}
}
}
@@ -1042,12 +1034,12 @@ impl EKS {
self.send_to_customer(&message, &listeners_helper);
self.logger().log(
LogLevel::Info,
EngineEvent::Pausing(event_details.clone(), EventMessage::new_from_safe(message)),
EngineEvent::Pausing(event_details, EventMessage::new_from_safe(message)),
);
Ok(())
}
Err(e) => Err(EngineError::new_terraform_error_while_executing_pipeline(
event_details.clone(),
event_details,
e,
)),
}
@@ -1093,9 +1085,9 @@ impl EKS {
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -1104,13 +1096,12 @@ impl EKS {
// this is due to the required dependencies of lib/aws/bootstrap/*.tf files
let bootstrap_charts_dir = format!("{}/common/bootstrap/charts", self.context.lib_root_dir());
let common_charts_temp_dir = format!("{}/common/charts", temp_dir.as_str());
if let Err(e) =
crate::template::copy_non_template_files(bootstrap_charts_dir.to_string(), common_charts_temp_dir.as_str())
if let Err(e) = crate::template::copy_non_template_files(&bootstrap_charts_dir, common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
bootstrap_charts_dir.to_string(),
common_charts_temp_dir.to_string(),
event_details,
bootstrap_charts_dir,
common_charts_temp_dir,
e,
));
}
@@ -1260,7 +1251,7 @@ impl EKS {
)
.map_err(|e| to_engine_error(&event_details, e))?;
let chart = ChartInfo::new_from_release_name("metrics-server", "kube-system");
helm.uninstall(&chart, &vec![])
helm.uninstall(&chart, &[])
.map_err(|e| to_engine_error(&event_details, e))?;
// required to avoid namespace stuck on deletion
@@ -1282,12 +1273,12 @@ impl EKS {
let qovery_namespaces = get_qovery_managed_namespaces();
for qovery_namespace in qovery_namespaces.iter() {
let charts_to_delete = helm
.list_release(Some(qovery_namespace), &vec![])
.list_release(Some(qovery_namespace), &[])
.map_err(|e| to_engine_error(&event_details, e))?;
for chart in charts_to_delete {
let chart_info = ChartInfo::new_from_release_name(&chart.name, &chart.namespace);
match helm.uninstall(&chart_info, &vec![]) {
match helm.uninstall(&chart_info, &[]) {
Ok(_) => self.logger().log(
LogLevel::Info,
EngineEvent::Deleting(
@@ -1356,11 +1347,11 @@ impl EKS {
),
);
match helm.list_release(None, &vec![]) {
match helm.list_release(None, &[]) {
Ok(helm_charts) => {
for chart in helm_charts {
let chart_info = ChartInfo::new_from_release_name(&chart.name, &chart.namespace);
match helm.uninstall(&chart_info, &vec![]) {
match helm.uninstall(&chart_info, &[]) {
Ok(_) => self.logger().log(
LogLevel::Info,
EngineEvent::Deleting(
@@ -1423,18 +1414,18 @@ impl EKS {
self.logger().log(
LogLevel::Info,
EngineEvent::Deleting(
event_details.clone(),
event_details,
EventMessage::new_from_safe("Kubernetes cluster successfully deleted".to_string()),
),
);
Ok(())
}
Err(Operation { error, .. }) => Err(EngineError::new_terraform_error_while_executing_destroy_pipeline(
event_details.clone(),
event_details,
error,
)),
Err(retry::Error::Internal(msg)) => Err(EngineError::new_terraform_error_while_executing_destroy_pipeline(
event_details.clone(),
event_details,
CommandError::new(msg, None),
)),
}
@@ -1522,7 +1513,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.create())
@@ -1536,7 +1527,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.create_error())
@@ -1608,9 +1599,9 @@ impl Kubernetes for EKS {
context.clone(),
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -1622,9 +1613,9 @@ impl Kubernetes for EKS {
common_charts_temp_dir.as_str(),
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
common_bootstrap_charts.to_string(),
common_charts_temp_dir.to_string(),
event_details,
common_bootstrap_charts,
common_charts_temp_dir,
e,
));
}
@@ -1663,7 +1654,7 @@ impl Kubernetes for EKS {
}
Err(e) => {
return Err(EngineError::new_terraform_error_while_executing_pipeline(
event_details.clone(),
event_details,
e,
));
}
@@ -1684,7 +1675,7 @@ impl Kubernetes for EKS {
self.logger().log(
LogLevel::Info,
EngineEvent::Deploying(
event_details.clone(),
event_details,
EventMessage::new_from_safe(
"No Kubernetes upgrade required, masters and workers are already up to date.".to_string(),
),
@@ -1737,9 +1728,9 @@ impl Kubernetes for EKS {
context.clone(),
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -1752,9 +1743,9 @@ impl Kubernetes for EKS {
crate::template::copy_non_template_files(common_bootstrap_charts.as_str(), common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
common_bootstrap_charts.to_string(),
common_charts_temp_dir.to_string(),
event_details,
common_bootstrap_charts,
common_charts_temp_dir,
e,
));
}
@@ -1799,14 +1790,14 @@ impl Kubernetes for EKS {
let _ = self.set_cluster_autoscaler_replicas(event_details.clone(), 1)?;
return Err(EngineError::new_terraform_error_while_executing_pipeline(
event_details.clone(),
event_details,
e,
));
}
}
// enable cluster autoscaler deployment
self.set_cluster_autoscaler_replicas(event_details.clone(), 1)
self.set_cluster_autoscaler_replicas(event_details, 1)
}
#[named]
@@ -1817,7 +1808,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.upgrade())
@@ -1831,7 +1822,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.upgrade_error())
@@ -1845,7 +1836,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.downgrade())
@@ -1859,7 +1850,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.downgrade_error())
@@ -1873,7 +1864,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Pause, || self.pause())
@@ -1887,7 +1878,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Pause, || self.pause_error())
@@ -1901,7 +1892,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Delete, || self.delete())
@@ -1915,7 +1906,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Delete, || self.delete_error())
@@ -1971,7 +1962,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
Ok(())
@@ -1999,7 +1990,7 @@ impl Kubernetes for EKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
Ok(())

View File

@@ -72,7 +72,7 @@ impl FromStr for AwsInstancesType {
"t3a.2xlarge" => Ok(AwsInstancesType::T3a2xlarge),
_ => {
let message = format!("`{}` instance type is not supported", s);
return Err(CommandError::new(message.clone(), Some(message)));
Err(CommandError::new(message.clone(), Some(message)))
}
}
}

View File

@@ -115,11 +115,9 @@ impl CloudProvider for AWS {
match s {
Ok(_x) => Ok(()),
Err(_) => {
return Err(EngineError::new_client_invalid_cloud_provider_credentials(
event_details,
));
}
Err(_) => Err(EngineError::new_client_invalid_cloud_provider_credentials(
event_details,
)),
}
}

View File

@@ -173,7 +173,7 @@ impl AwsRegion {
pub fn to_string(&self) -> String {
let enum_name = format!("{}", self);
format!("{}", enum_name)
enum_name
}
pub fn to_aws_format(&self) -> String {
@@ -377,7 +377,7 @@ impl AwsZones {
pub fn from_string(zone: String) -> Result<AwsZones, RegionAndZoneErrors> {
// create tmp region from zone and get zone name (one letter)
let sanitized_zone_name = zone.to_lowercase().replace("-", "").replace("_", "");
let sanitized_zone_name = zone.to_lowercase().replace('-', "").replace('_', "");
let mut sanitized_region = sanitized_zone_name.clone();
sanitized_region.pop();
@@ -392,7 +392,7 @@ impl AwsZones {
// check if the zone is currently supported
for zone in region.get_zones() {
if zone.to_string().replace("-", "") == sanitized_zone_name {
if zone.to_string().replace('-', "") == sanitized_zone_name {
return Ok(zone);
}
}

View File

@@ -154,7 +154,7 @@ impl Service for RouterAws {
let route_data_templates = self
.routes
.iter()
.map(|r| {
.filter_map(|r| {
match applications
.iter()
.find(|app| app.name() == r.application_name.as_str())
@@ -167,8 +167,6 @@ impl Service for RouterAws {
_ => None,
}
})
.filter(|x| x.is_some())
.map(|x| x.unwrap())
.collect::<Vec<_>>();
// autoscaler
@@ -197,7 +195,7 @@ impl Service for RouterAws {
self.logger().log(
LogLevel::Warning,
EngineEvent::Warning(
event_details.clone(),
event_details,
EventMessage::new_from_safe(
"Error while trying to get Load Balancer hostname from Kubernetes cluster".to_string(),
),
@@ -211,7 +209,7 @@ impl Service for RouterAws {
self.logger().log(
LogLevel::Warning,
EngineEvent::Warning(
event_details.clone(),
event_details,
EventMessage::new_from_safe("Can't fetch external ingress hostname.".to_string()),
),
);
@@ -338,9 +336,9 @@ impl Create for RouterAws {
crate::template::generate_and_copy_all_files_into_dir(from_dir.as_str(), workspace_dir.as_str(), context)
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
from_dir.to_string(),
workspace_dir.to_string(),
event_details,
from_dir,
workspace_dir,
e,
));
}
@@ -365,7 +363,7 @@ impl Create for RouterAws {
self.selector(),
);
helm.upgrade(&chart, &vec![])
helm.upgrade(&chart, &[])
.map_err(|e| EngineError::new_helm_error(event_details.clone(), e))
}

View File

@@ -81,7 +81,7 @@ impl ApplicationDo {
}
fn is_stateful(&self) -> bool {
self.storage.len() > 0
!self.storage.is_empty()
}
fn cloud_provider_name(&self) -> &str {
@@ -213,7 +213,7 @@ impl Service for ApplicationDo {
let cpu_limits = match validate_k8s_required_cpu_and_burstable(
&ListenersHelper::new(&self.listeners),
&self.context.execution_id(),
self.context.execution_id(),
&self.id,
self.total_cpus(),
self.cpu_burst(),
@@ -223,7 +223,7 @@ impl Service for ApplicationDo {
Ok(l) => l,
Err(e) => {
return Err(EngineError::new_k8s_validate_required_cpu_and_burstable_error(
event_details.clone(),
event_details,
self.total_cpus(),
self.cpu_burst(),
e,
@@ -265,7 +265,7 @@ impl Service for ApplicationDo {
})
.collect::<Vec<_>>();
let is_storage = storage.len() > 0;
let is_storage = !storage.is_empty();
context.insert("storage", &storage);
context.insert("is_storage", &is_storage);
@@ -300,7 +300,7 @@ impl Create for ApplicationDo {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);

View File

@@ -67,7 +67,7 @@ impl MongoDo {
fn matching_correct_version(&self, event_details: EventDetails) -> Result<ServiceVersionCheckResult, EngineError> {
check_service_version(
get_self_hosted_mongodb_version(self.version().clone()),
get_self_hosted_mongodb_version(self.version()),
self,
event_details,
self.logger(),
@@ -175,7 +175,7 @@ impl Service for MongoDo {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -183,7 +183,7 @@ impl Service for MongoDo {
context.insert("namespace", environment.namespace());
let version = self
.matching_correct_version(event_details.clone())?
.matching_correct_version(event_details)?
.matched_version()
.to_string();
context.insert("version", &version);

View File

@@ -175,7 +175,7 @@ impl Service for MySQLDo {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -183,7 +183,7 @@ impl Service for MySQLDo {
context.insert("namespace", environment.namespace());
let version = &self
.matching_correct_version(event_details.clone())?
.matching_correct_version(event_details)?
.matched_version()
.to_string();
context.insert("version", &version);

View File

@@ -175,7 +175,7 @@ impl Service for PostgresDo {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -183,7 +183,7 @@ impl Service for PostgresDo {
context.insert("namespace", environment.namespace());
let version = self
.matching_correct_version(event_details.clone())?
.matching_correct_version(event_details)?
.matched_version()
.to_string();
context.insert("version", &version);

View File

@@ -181,7 +181,7 @@ impl Service for RedisDo {
);
let version = self
.matching_correct_version(event_details.clone())?
.matching_correct_version(event_details)?
.matched_version()
.to_string();

View File

@@ -42,15 +42,15 @@ pub fn do_get_from_api(token: &str, api_type: DoApiType, url_api: String) -> Res
api_type
);
return Err(CommandError::new(
format!("{}, response: {:?}", message_safe.to_string(), response),
Some(message_safe.to_string()),
format!("{}, response: {:?}", message_safe, response),
Some(message_safe),
));
}
_ => {
let message_safe = format!("Unknown status code received from Digital Ocean Kubernetes API while retrieving {} information.", api_type);
return Err(CommandError::new(
format!("{}, response: {:?}", message_safe.to_string(), response),
Some(message_safe.to_string()),
format!("{}, response: {:?}", message_safe, response),
Some(message_safe),
));
}
}

View File

@@ -17,7 +17,7 @@ pub struct DoVpc {
pub fn get_used_cidr_on_region(token: &str) {
let mut output_from_cli = String::new();
let mut cmd = QoveryCommand::new("doctl", &vec!["vpcs", "list", "--output", "json", "-t", token], &vec![]);
let mut cmd = QoveryCommand::new("doctl", &["vpcs", "list", "--output", "json", "-t", token], &[]);
let _ = cmd.exec_with_output(&mut |r_out| output_from_cli.push_str(&r_out), &mut |r_err| {
error!(
"DOCTL CLI error from cmd inserted, please check vpcs list command{}",
@@ -26,5 +26,5 @@ pub fn get_used_cidr_on_region(token: &str) {
});
let buff = output_from_cli.borrow();
let _array: Vec<DoVpc> = serde_json::from_str(&buff).expect("JSON is not well-formatted");
let _array: Vec<DoVpc> = serde_json::from_str(buff).expect("JSON is not well-formatted");
}

View File

@@ -27,7 +27,7 @@ pub fn get_doks_info_from_name(
Err(e) => {
let safe_message = "Error while trying to deserialize json received from Digital Ocean DOKS API";
return Err(CommandError::new(
format!("{}, error: {}", safe_message.to_string(), e.to_string()),
format!("{}, error: {}", safe_message, e),
Some(safe_message.to_string()),
));
}
@@ -51,7 +51,7 @@ fn get_doks_versions_from_api_output(json_content: &str) -> Result<Vec<Kubernete
Err(e) => {
let safe_message = "Error while trying to deserialize json received from Digital Ocean DOKS API";
return Err(CommandError::new(
format!("{}, error: {}", safe_message.to_string(), e.to_string()),
format!("{}, error: {}", safe_message, e),
Some(safe_message.to_string()),
));
}
@@ -91,7 +91,7 @@ pub fn get_do_kubeconfig_by_cluster_name(token: &str, cluster_name: &str) -> Res
Err(e) => Err(CommandError::new_from_safe_message(e.message())),
};
let clusters_copy = clusters.expect("Unable to list clusters").kubernetes_clusters.clone();
let clusters_copy = clusters.expect("Unable to list clusters").kubernetes_clusters;
let cluster_name = cluster_name.trim().to_lowercase();
match clusters_copy
.into_iter()

View File

@@ -122,7 +122,7 @@ pub fn do_helm_charts(
Err(e) => {
let message_safe = "Can't deploy helm chart as Qovery terraform config file has not been rendered by Terraform. Are you running it in dry run mode?";
return Err(CommandError::new(
format!("{}, error: {:?}", message_safe.to_string(), e),
format!("{}, error: {:?}", message_safe, e),
Some(message_safe.to_string()),
));
}
@@ -138,8 +138,8 @@ pub fn do_helm_charts(
qovery_terraform_config_file
);
return Err(CommandError::new(
format!("{}, error: {:?}", message_safe.to_string(), e),
Some(message_safe.to_string()),
format!("{}, error: {:?}", message_safe, e),
Some(message_safe),
));
}
};
@@ -1012,8 +1012,7 @@ datasources:
)
)
.as_bytes(),
)
.to_string(),
),
},
ChartSetValue {
key: "do_container_registry_secret_identifier".to_string(),

View File

@@ -134,7 +134,7 @@ impl DOKS {
QoveryIdentifier::new_from_long_id(context.execution_id().to_string()),
Some(region.to_string()),
Stage::Infrastructure(InfrastructureStep::LoadConfiguration),
Transmitter::Kubernetes(id.to_string(), name.to_string()),
Transmitter::Kubernetes(id, name),
),
node_group.instance_type.as_str(),
e,
@@ -150,8 +150,8 @@ impl DOKS {
context.clone(),
"spaces-temp-id".to_string(),
"my-spaces-object-storage".to_string(),
cloud_provider.access_key_id().clone(),
cloud_provider.secret_access_key().clone(),
cloud_provider.access_key_id(),
cloud_provider.secret_access_key(),
region,
BucketDeleteStrategy::HardDelete,
);
@@ -217,17 +217,15 @@ impl DOKS {
Ok(vpcs) => match vpcs {
// new vpc: select a random non used subnet
None => {
match get_do_random_available_subnet_from_api(&self.cloud_provider.token(), self.region) {
match get_do_random_available_subnet_from_api(self.cloud_provider.token(), self.region) {
Ok(x) => x,
Err(e) => {
return Err(EngineError::new_cannot_get_any_available_vpc(event_details.clone(), e))
}
Err(e) => return Err(EngineError::new_cannot_get_any_available_vpc(event_details, e)),
}
}
// existing vpc: assign current subnet in this case
Some(vpc) => vpc.ip_range,
},
Err(e) => return Err(EngineError::new_cannot_get_any_available_vpc(event_details.clone(), e)),
Err(e) => return Err(EngineError::new_cannot_get_any_available_vpc(event_details, e)),
}
}
VpcInitKind::Manual => self.options.vpc_cidr_block.clone(),
@@ -383,7 +381,7 @@ impl DOKS {
LogLevel::Error,
EngineEvent::Error(
EngineError::new_missing_required_env_variable(
event_details.clone(),
event_details,
"VAULT_SECRET_ID".to_string(),
),
None,
@@ -413,7 +411,7 @@ impl DOKS {
match get_do_latest_doks_slug_from_api(self.cloud_provider.token(), self.version()) {
Ok(version) => match version {
None => Err(EngineError::new_unsupported_version_error(
event_details.clone(),
event_details,
self.kind().to_string(),
VersionsNumber::from_str(&self.version)
.expect("cannot parse version")
@@ -422,7 +420,7 @@ impl DOKS {
Some(v) => Ok(v),
},
Err(e) => Err(EngineError::new_cannot_get_supported_versions_error(
event_details.clone(),
event_details,
self.kind().to_string(),
e,
)),
@@ -463,7 +461,7 @@ impl DOKS {
let api_url = format!("{}/clusters", DoApiType::Doks.api_url());
let json_content = do_get_from_api(self.cloud_provider.token(), DoApiType::Doks, api_url)?;
// TODO(benjaminch): `qovery-` to be added into Rust name directly everywhere
match get_doks_info_from_name(json_content.as_str(), format!("qovery-{}", self.id().to_string())) {
match get_doks_info_from_name(json_content.as_str(), format!("qovery-{}", self.id())) {
Ok(cluster_result) => match cluster_result {
None => Err(CommandError::new_from_safe_message(
"Cluster doesn't exist on DO side.".to_string(),
@@ -548,9 +546,9 @@ impl DOKS {
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -559,13 +557,12 @@ impl DOKS {
// this is due to the required dependencies of lib/digitalocean/bootstrap/*.tf files
let bootstrap_charts_dir = format!("{}/common/bootstrap/charts", self.context.lib_root_dir());
let common_charts_temp_dir = format!("{}/common/charts", temp_dir.as_str());
if let Err(e) =
crate::template::copy_non_template_files(bootstrap_charts_dir.to_string(), common_charts_temp_dir.as_str())
if let Err(e) = crate::template::copy_non_template_files(&bootstrap_charts_dir, common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
bootstrap_charts_dir.to_string(),
common_charts_temp_dir.to_string(),
event_details,
bootstrap_charts_dir,
common_charts_temp_dir,
e,
));
}
@@ -604,7 +601,7 @@ impl DOKS {
),
Err(e) => {
return Err(EngineError::new_terraform_cannot_remove_entry_out(
event_details.clone(),
event_details,
entry.to_string(),
e,
))
@@ -625,11 +622,8 @@ impl DOKS {
// Logs bucket
if let Err(e) = self.spaces.create_bucket(self.logs_bucket_name().as_str()) {
let error = EngineError::new_object_storage_cannot_create_bucket_error(
event_details.clone(),
self.logs_bucket_name(),
e,
);
let error =
EngineError::new_object_storage_cannot_create_bucket_error(event_details, self.logs_bucket_name(), e);
self.logger()
.log(LogLevel::Error, EngineEvent::Error(error.clone(), None));
return Err(error);
@@ -638,7 +632,7 @@ impl DOKS {
// terraform deployment dedicated to cloud resources
if let Err(e) = terraform_init_validate_plan_apply(temp_dir.as_str(), self.context.is_dry_run_deploy()) {
return Err(EngineError::new_terraform_error_while_executing_pipeline(
event_details.clone(),
event_details,
e,
));
}
@@ -661,7 +655,7 @@ impl DOKS {
)
}
Err(e) => {
return Err(EngineError::new_k8s_node_not_ready(event_details.clone(), e));
return Err(EngineError::new_k8s_node_not_ready(event_details, e));
}
};
@@ -675,7 +669,7 @@ impl DOKS {
let doks_id = match self.get_doks_info_from_name_api() {
Ok(cluster) => cluster.id,
Err(e) => return Err(EngineError::new_cannot_get_cluster_error(event_details.clone(), e)),
Err(e) => return Err(EngineError::new_cannot_get_cluster_error(event_details, e)),
};
let charts_prerequisites = ChartsConfigPrerequisites {
@@ -685,13 +679,13 @@ impl DOKS {
cluster_id: self.id.clone(),
cluster_long_id: self.long_id,
do_cluster_id: doks_id,
region: self.region().to_string(),
cluster_name: self.cluster_name().to_string(),
region: self.region(),
cluster_name: self.cluster_name(),
cloud_provider: "digitalocean".to_string(),
test_cluster: self.context.is_test_cluster(),
do_token: self.cloud_provider.token().to_string(),
do_space_access_id: self.cloud_provider.access_key_id().to_string(),
do_space_secret_key: self.cloud_provider.secret_access_key().to_string(),
do_space_access_id: self.cloud_provider.access_key_id(),
do_space_secret_key: self.cloud_provider.secret_access_key(),
do_space_bucket_kubeconfig: self.kubeconfig_bucket_name(),
do_space_kubeconfig_filename: self.kubeconfig_file_name(),
qovery_engine_location: self.options.qovery_engine_location.clone(),
@@ -725,7 +719,7 @@ impl DOKS {
.map_err(|e| EngineError::new_helm_charts_setup_error(event_details.clone(), e))?;
deploy_charts_levels(
&kubeconfig_path,
kubeconfig_path,
&credentials_environment_variables,
helm_charts_to_deploy,
self.context.is_dry_run_deploy(),
@@ -760,7 +754,7 @@ impl DOKS {
return Err(EngineError::new_k8s_loadbalancer_configuration_issue(
event_details.clone(),
CommandError::new(
format!("{}, error: {}.", safe_message.to_string(), e.message(),),
format!("{}, error: {}.", safe_message, e.message(),),
Some(safe_message.to_string()),
),
));
@@ -796,8 +790,8 @@ impl DOKS {
.map_err(|e| EngineError::new_helm_error(event_details.clone(), e))?;
// This will ony print the diff on stdout
let _ = helm.upgrade_diff(&load_balancer_dns_hostname, &vec![]);
helm.upgrade(&load_balancer_dns_hostname, &vec![])
let _ = helm.upgrade_diff(&load_balancer_dns_hostname, &[]);
helm.upgrade(&load_balancer_dns_hostname, &[])
.map_err(|e| EngineError::new_helm_error(event_details.clone(), e))
}
@@ -817,12 +811,12 @@ impl DOKS {
match kubectl_exec_get_events(kubeconfig_path, None, environment_variables) {
Ok(ok_line) => self.logger().log(
LogLevel::Info,
EngineEvent::Deploying(event_details.clone(), EventMessage::new(ok_line, None)),
EngineEvent::Deploying(event_details, EventMessage::new(ok_line, None)),
),
Err(err) => self.logger().log(
LogLevel::Error,
EngineEvent::Deploying(
event_details.clone(),
event_details,
EventMessage::new("Error trying to get kubernetes events".to_string(), Some(err.message())),
),
),
@@ -905,9 +899,9 @@ impl DOKS {
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -917,13 +911,12 @@ impl DOKS {
let bootstrap_charts_dir = format!("{}/common/bootstrap/charts", self.context.lib_root_dir());
let common_charts_temp_dir = format!("{}/common/charts", temp_dir.as_str());
if let Err(e) =
crate::template::copy_non_template_files(bootstrap_charts_dir.to_string(), common_charts_temp_dir.as_str())
if let Err(e) = crate::template::copy_non_template_files(&bootstrap_charts_dir, common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
bootstrap_charts_dir.to_string(),
common_charts_temp_dir.to_string(),
event_details,
bootstrap_charts_dir,
common_charts_temp_dir,
e,
));
}
@@ -1059,7 +1052,7 @@ impl DOKS {
)
.map_err(|e| to_engine_error(&event_details, e))?;
let chart = ChartInfo::new_from_release_name("metrics-server", "kube-system");
helm.uninstall(&chart, &vec![])
helm.uninstall(&chart, &[])
.map_err(|e| to_engine_error(&event_details, e))?;
// required to avoid namespace stuck on deletion
@@ -1081,12 +1074,12 @@ impl DOKS {
let qovery_namespaces = get_qovery_managed_namespaces();
for qovery_namespace in qovery_namespaces.iter() {
let charts_to_delete = helm
.list_release(Some(qovery_namespace), &vec![])
.list_release(Some(qovery_namespace), &[])
.map_err(|e| to_engine_error(&event_details, e))?;
for chart in charts_to_delete {
let chart_info = ChartInfo::new_from_release_name(&chart.name, &chart.namespace);
match helm.uninstall(&chart_info, &vec![]) {
match helm.uninstall(&chart_info, &[]) {
Ok(_) => self.logger().log(
LogLevel::Info,
EngineEvent::Deleting(
@@ -1155,11 +1148,11 @@ impl DOKS {
),
);
match helm.list_release(None, &vec![]) {
match helm.list_release(None, &[]) {
Ok(helm_charts) => {
for chart in helm_charts {
let chart_info = ChartInfo::new_from_release_name(&chart.name, &chart.namespace);
match helm.uninstall(&chart_info, &vec![]) {
match helm.uninstall(&chart_info, &[]) {
Ok(_) => self.logger().log(
LogLevel::Info,
EngineEvent::Deleting(
@@ -1222,18 +1215,18 @@ impl DOKS {
self.logger().log(
LogLevel::Info,
EngineEvent::Deleting(
event_details.clone(),
event_details,
EventMessage::new_from_safe("Kubernetes cluster successfully deleted".to_string()),
),
);
Ok(())
}
Err(Operation { error, .. }) => Err(EngineError::new_terraform_error_while_executing_destroy_pipeline(
event_details.clone(),
event_details,
error,
)),
Err(retry::Error::Internal(msg)) => Err(EngineError::new_terraform_error_while_executing_destroy_pipeline(
event_details.clone(),
event_details,
CommandError::new(msg, None),
)),
}
@@ -1321,7 +1314,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.create())
@@ -1335,7 +1328,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.create_error())
@@ -1400,7 +1393,7 @@ impl Kubernetes for DOKS {
Ok(version) => match version {
None => {
return Err(EngineError::new_unsupported_version_error(
event_details.clone(),
event_details,
self.kind().to_string(),
VersionsNumber::from_str(&self.version)
.expect("cannot parse version")
@@ -1411,14 +1404,14 @@ impl Kubernetes for DOKS {
},
Err(e) => {
return Err(EngineError::new_cannot_get_supported_versions_error(
event_details.clone(),
event_details,
self.kind().to_string(),
e,
))
}
};
context.insert("doks_version", format!("{}", &upgrade_doks_version).as_str());
context.insert("doks_version", (&upgrade_doks_version).to_string().as_str());
if let Err(e) = crate::template::generate_and_copy_all_files_into_dir(
self.template_directory.as_str(),
@@ -1426,22 +1419,21 @@ impl Kubernetes for DOKS {
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
let bootstrap_charts_dir = format!("{}/common/bootstrap/charts", self.context.lib_root_dir());
let common_charts_temp_dir = format!("{}/common/charts", temp_dir.as_str());
if let Err(e) =
crate::template::copy_non_template_files(bootstrap_charts_dir.to_string(), common_charts_temp_dir.as_str())
if let Err(e) = crate::template::copy_non_template_files(&bootstrap_charts_dir, common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
bootstrap_charts_dir.to_string(),
common_charts_temp_dir.to_string(),
event_details,
bootstrap_charts_dir,
common_charts_temp_dir,
e,
));
}
@@ -1468,7 +1460,7 @@ impl Kubernetes for DOKS {
self.logger().log(
LogLevel::Info,
EngineEvent::Deploying(
event_details.clone(),
event_details,
EventMessage::new_from_safe(
"Kubernetes nodes have been successfully upgraded.".to_string(),
),
@@ -1477,7 +1469,7 @@ impl Kubernetes for DOKS {
}
Err(e) => {
return Err(EngineError::new_k8s_node_not_ready_with_requested_version(
event_details.clone(),
event_details,
kubernetes_upgrade_status.requested_version.to_string(),
e,
));
@@ -1485,7 +1477,7 @@ impl Kubernetes for DOKS {
},
Err(e) => {
return Err(EngineError::new_terraform_error_while_executing_pipeline(
event_details.clone(),
event_details,
e,
));
}
@@ -1502,7 +1494,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.upgrade())
@@ -1516,7 +1508,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.upgrade_error())
@@ -1530,7 +1522,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.downgrade())
@@ -1544,7 +1536,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.downgrade_error())
@@ -1558,7 +1550,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Pause, || self.pause())
@@ -1572,7 +1564,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Pause, || self.pause_error())
@@ -1586,7 +1578,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Delete, || self.delete())
@@ -1600,7 +1592,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Delete, || self.delete_error())
@@ -1656,7 +1648,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
Ok(())
@@ -1684,7 +1676,7 @@ impl Kubernetes for DOKS {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
Ok(())
@@ -1713,13 +1705,10 @@ impl Kubernetes for DOKS {
self.logger().log(
LogLevel::Debug,
EngineEvent::Debug(
self.get_event_details(stage.clone()),
self.get_event_details(stage),
EventMessage::new(
err.to_string(),
Some(
format!("Error, couldn't open {} file", &local_kubeconfig_generated,)
.to_string(),
),
Some(format!("Error, couldn't open {} file", &local_kubeconfig_generated,)),
),
),
);
@@ -1750,7 +1739,7 @@ impl Kubernetes for DOKS {
Ok(kubeconfig) => match kubeconfig {
None => {
return Err(EngineError::new_cannot_retrieve_cluster_config_file(
event_details.clone(),
event_details,
CommandError::new_from_safe_message("Kubeconfig is empty".to_string()),
))
}
@@ -1758,7 +1747,7 @@ impl Kubernetes for DOKS {
},
Err(e) => {
return Err(EngineError::new_cannot_retrieve_cluster_config_file(
event_details.clone(),
event_details,
CommandError::new(e.message(), Some(e.message())),
))
}
@@ -1814,7 +1803,7 @@ impl Kubernetes for DOKS {
match result {
Err(e) => Err(EngineError::new_cannot_retrieve_cluster_config_file(
event_details.clone(),
event_details,
CommandError::new(e.message(), Some(e.message())),
)),
Ok((file_path, file)) => Ok((file_path, file)),

View File

@@ -113,7 +113,7 @@ impl FromStr for DoInstancesType {
"s-32vcpu-192gb" => Ok(DoInstancesType::S32vcpu192gb),
_ => {
let message = format!("`{}` instance type is not supported", s);
return Err(CommandError::new(message.clone(), Some(message)));
Err(CommandError::new(message.clone(), Some(message)))
}
}
}

View File

@@ -105,11 +105,9 @@ impl CloudProvider for DO {
let client = DigitalOcean::new(&self.token);
match client {
Ok(_x) => Ok(()),
Err(_) => {
return Err(EngineError::new_client_invalid_cloud_provider_credentials(
event_details,
));
}
Err(_) => Err(EngineError::new_client_invalid_cloud_provider_credentials(
event_details,
)),
}
}

View File

@@ -143,7 +143,7 @@ mod tests_do_api_output {
}
}
"#;
let ip_returned_from_api = get_ip_from_do_load_balancer_api_output(&json_content);
let ip_returned_from_api = get_ip_from_do_load_balancer_api_output(json_content);
assert_eq!(ip_returned_from_api.unwrap().to_string(), "104.131.186.241");
}

View File

@@ -129,7 +129,7 @@ fn do_get_vpcs_from_api_output(json_content: &str) -> Result<Vec<Vpc>, CommandEr
Err(e) => {
let message_safe = "Error while trying to deserialize json received from Digital Ocean VPC API";
Err(CommandError::new(
format!("{}, error: {}", message_safe.to_string(), e),
format!("{}, error: {}", message_safe, e),
Some(message_safe.to_string()),
))
}
@@ -307,7 +307,7 @@ mod tests_do_vpcs {
let json_content = do_get_vpc_json();
let existing_vpcs = do_get_vpcs_from_api_output(&json_content).unwrap();
assert!(get_random_available_subnet(existing_vpcs.clone(), DoRegion::Frankfurt).is_ok());
assert!(get_random_available_subnet(existing_vpcs, DoRegion::Frankfurt).is_ok());
}
#[test]

View File

@@ -162,24 +162,19 @@ impl Service for RouterDo {
let route_data_templates = self
.routes
.iter()
.map(|r| {
.filter_map(|r| {
match applications
.iter()
.find(|app| app.name() == r.application_name.as_str())
{
Some(application) => match application.private_port() {
Some(private_port) => Some(RouteDataTemplate {
path: r.path.clone(),
application_name: application.sanitized_name().to_string(),
application_port: private_port,
}),
_ => None,
},
Some(application) => application.private_port().map(|private_port| RouteDataTemplate {
path: r.path.clone(),
application_name: application.sanitized_name(),
application_port: private_port,
}),
_ => None,
}
})
.filter(|x| x.is_some())
.map(|x| x.unwrap())
.collect::<Vec<_>>();
// autoscaler
@@ -210,7 +205,7 @@ impl Service for RouterDo {
self.logger().log(
LogLevel::Warning,
EngineEvent::Warning(
event_details.clone(),
event_details,
EventMessage::new_from_safe(
"Error while trying to get Load Balancer hostname from Kubernetes cluster".to_string(),
),
@@ -224,7 +219,7 @@ impl Service for RouterDo {
self.logger().log(
LogLevel::Warning,
EngineEvent::Warning(
event_details.clone(),
event_details,
EventMessage::new_from_safe("Can't fetch external ingress hostname.".to_string()),
),
);
@@ -355,9 +350,9 @@ impl Create for RouterDo {
crate::template::generate_and_copy_all_files_into_dir(from_dir.as_str(), workspace_dir.as_str(), context)
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
from_dir.to_string(),
workspace_dir.to_string(),
event_details,
from_dir,
workspace_dir,
e,
));
}
@@ -381,7 +376,7 @@ impl Create for RouterDo {
self.selector(),
);
helm.upgrade(&chart, &vec![])
helm.upgrade(&chart, &[])
.map_err(|e| helm::to_engine_error(&event_details, e))
}

View File

@@ -201,16 +201,16 @@ pub trait HelmChart: Send {
fn run(&self, kubernetes_config: &Path, envs: &[(String, String)]) -> Result<Option<ChartPayload>, CommandError> {
info!("prepare and deploy chart {}", &self.get_chart_info().name);
let payload = self.check_prerequisites()?;
let payload = self.pre_exec(&kubernetes_config, &envs, payload)?;
let payload = match self.exec(&kubernetes_config, &envs, payload.clone()) {
let payload = self.pre_exec(kubernetes_config, envs, payload)?;
let payload = match self.exec(kubernetes_config, envs, payload.clone()) {
Ok(payload) => payload,
Err(e) => {
error!("Error while deploying chart: {}", e.message());
self.on_deploy_failure(&kubernetes_config, &envs, payload)?;
self.on_deploy_failure(kubernetes_config, envs, payload)?;
return Err(e);
}
};
let payload = self.post_exec(&kubernetes_config, &envs, payload)?;
let payload = self.post_exec(kubernetes_config, envs, payload)?;
Ok(payload)
}
@@ -226,18 +226,18 @@ pub trait HelmChart: Send {
match chart_info.action {
HelmAction::Deploy => {
if let Err(e) = helm.uninstall_chart_if_breaking_version(chart_info, &vec![]) {
if let Err(e) = helm.uninstall_chart_if_breaking_version(chart_info, &[]) {
warn!(
"error while trying to destroy chart if breaking change is detected: {:?}",
e.to_string()
);
}
helm.upgrade(&chart_info, &vec![]).map_err(to_command_error)?;
helm.upgrade(chart_info, &[]).map_err(to_command_error)?;
}
HelmAction::Destroy => {
let chart_info = self.get_chart_info();
helm.uninstall(&chart_info, &vec![]).map_err(to_command_error)?;
helm.uninstall(chart_info, &[]).map_err(to_command_error)?;
}
HelmAction::Skip => {}
}
@@ -306,7 +306,7 @@ fn deploy_parallel_charts(
Err(e) => {
let safe_message = "Thread panicked during parallel charts deployments.";
let error = Err(CommandError::new(
format!("{}, error: {:?}", safe_message.to_string(), e),
format!("{}, error: {:?}", safe_message, e),
Some(safe_message.to_string()),
));
errors.push(error);
@@ -338,7 +338,7 @@ pub fn deploy_charts_levels(
let chart_info = chart.get_chart_info();
// don't do diff on destroy or skip
if chart_info.action == HelmAction::Deploy {
let _ = helm.upgrade_diff(chart_info, &vec![]);
let _ = helm.upgrade_diff(chart_info, &[]);
}
}
@@ -347,7 +347,7 @@ pub fn deploy_charts_levels(
continue;
}
if let Err(e) = deploy_parallel_charts(&kubernetes_config, &envs, level) {
if let Err(e) = deploy_parallel_charts(kubernetes_config, envs, level) {
return Err(e);
}
}
@@ -442,7 +442,7 @@ impl HelmChart for CoreDNSConfigChart {
"kube-system",
"annotate",
"--overwrite",
&kind,
kind,
&self.chart_info.name,
format!("meta.helm.sh/release-name={}", self.chart_info.name).as_str(),
],
@@ -456,7 +456,7 @@ impl HelmChart for CoreDNSConfigChart {
"kube-system",
"annotate",
"--overwrite",
&kind,
kind,
&self.chart_info.name,
"meta.helm.sh/release-namespace=kube-system",
],
@@ -470,7 +470,7 @@ impl HelmChart for CoreDNSConfigChart {
"kube-system",
"label",
"--overwrite",
&kind,
kind,
&self.chart_info.name,
"app.kubernetes.io/managed-by=Helm",
],
@@ -490,7 +490,7 @@ impl HelmChart for CoreDNSConfigChart {
fn run(&self, kubernetes_config: &Path, envs: &[(String, String)]) -> Result<Option<ChartPayload>, CommandError> {
info!("prepare and deploy chart {}", &self.get_chart_info().name);
self.check_prerequisites()?;
let payload = match self.pre_exec(&kubernetes_config, &envs, None) {
let payload = match self.pre_exec(kubernetes_config, envs, None) {
Ok(p) => match p {
None => {
return Err(CommandError::new_from_safe_message(
@@ -501,12 +501,12 @@ impl HelmChart for CoreDNSConfigChart {
},
Err(e) => return Err(e),
};
if let Err(e) = self.exec(&kubernetes_config, &envs, None) {
if let Err(e) = self.exec(kubernetes_config, envs, None) {
error!("Error while deploying chart: {:?}", e.message());
self.on_deploy_failure(&kubernetes_config, &envs, None)?;
self.on_deploy_failure(kubernetes_config, envs, None)?;
return Err(e);
};
self.post_exec(&kubernetes_config, &envs, Some(payload))?;
self.post_exec(kubernetes_config, envs, Some(payload))?;
Ok(None)
}
@@ -594,19 +594,19 @@ impl HelmChart for PrometheusOperatorConfigChart {
match chart_info.action {
HelmAction::Deploy => {
if let Err(e) = helm.uninstall_chart_if_breaking_version(chart_info, &vec![]) {
if let Err(e) = helm.uninstall_chart_if_breaking_version(chart_info, &[]) {
warn!(
"error while trying to destroy chart if breaking change is detected: {}",
e.to_string()
);
}
helm.upgrade(&chart_info, &vec![]).map_err(to_command_error)?;
helm.upgrade(chart_info, &[]).map_err(to_command_error)?;
}
HelmAction::Destroy => {
let chart_info = self.get_chart_info();
if helm.check_release_exist(&chart_info, &vec![]).is_ok() {
helm.uninstall(&chart_info, &vec![]).map_err(to_command_error)?;
if helm.check_release_exist(chart_info, &[]).is_ok() {
helm.uninstall(chart_info, &[]).map_err(to_command_error)?;
let prometheus_crds = [
"prometheuses.monitoring.coreos.com",

View File

@@ -72,7 +72,7 @@ pub trait Kubernetes: Listen {
QoveryIdentifier::from(context.organization_id().to_string()),
QoveryIdentifier::from(context.cluster_id().to_string()),
QoveryIdentifier::from(context.execution_id().to_string()),
Some(self.region().to_string()),
Some(self.region()),
stage,
Transmitter::Kubernetes(self.id().to_string(), self.name().to_string()),
)
@@ -103,10 +103,7 @@ pub trait Kubernetes: Listen {
self.get_event_details(stage.clone()),
EventMessage::new(
err.to_string(),
Some(
format!("Error, couldn't open {} file", &local_kubeconfig_generated,)
.to_string(),
),
Some(format!("Error, couldn't open {} file", &local_kubeconfig_generated,)),
),
),
);
@@ -136,7 +133,7 @@ pub trait Kubernetes: Listen {
Ok((path, file)) => (path, file),
Err(err) => {
let error = EngineError::new_cannot_retrieve_cluster_config_file(
self.get_event_details(stage.clone()),
self.get_event_details(stage),
err.into(),
);
self.logger()
@@ -151,10 +148,8 @@ pub trait Kubernetes: Listen {
Ok(metadata) => metadata,
Err(err) => {
let error = EngineError::new_cannot_retrieve_cluster_config_file(
self.get_event_details(stage.clone()),
CommandError::new_from_safe_message(
format!("Error getting file metadata, error: {}", err.to_string(),).to_string(),
),
self.get_event_details(stage),
CommandError::new_from_safe_message(format!("Error getting file metadata, error: {}", err,)),
);
self.logger()
.log(LogLevel::Error, EngineEvent::Error(error.clone(), None));
@@ -166,11 +161,8 @@ pub trait Kubernetes: Listen {
permissions.set_mode(0o400);
if let Err(err) = std::fs::set_permissions(string_path.as_str(), permissions) {
let error = EngineError::new_cannot_retrieve_cluster_config_file(
self.get_event_details(stage.clone()),
CommandError::new_from_safe_message(format!(
"Error setting file permissions, error: {}",
err.to_string(),
)),
self.get_event_details(stage),
CommandError::new_from_safe_message(format!("Error setting file permissions, error: {}", err,)),
);
self.logger()
.log(LogLevel::Error, EngineEvent::Error(error.clone(), None));
@@ -197,9 +189,10 @@ pub trait Kubernetes: Listen {
Err(err) => {
let error = EngineError::new_cannot_get_cluster_nodes(
self.get_event_details(stage),
CommandError::new_from_safe_message(
format!("Error while trying to get cluster nodes, error: {}", err.message()).to_string(),
),
CommandError::new_from_safe_message(format!(
"Error while trying to get cluster nodes, error: {}",
err.message()
)),
);
self.logger()
@@ -251,9 +244,9 @@ pub trait Kubernetes: Listen {
Err(e) => Err(e),
Ok(..) => match is_kubernetes_upgrade_required(
kubeconfig,
&self.version(),
self.version(),
self.cloud_provider().credentials_environment_variables(),
event_details.clone(),
event_details,
self.logger(),
) {
Ok(x) => self.upgrade_with_status(x),
@@ -354,7 +347,7 @@ pub trait Kubernetes: Listen {
envs.clone(),
) {
return Err(EngineError::new_k8s_cannot_delete_pod(
event_details.clone(),
event_details,
pod.metadata.name.to_string(),
e,
));
@@ -362,10 +355,7 @@ pub trait Kubernetes: Listen {
}
}
Err(e) => {
return Err(EngineError::new_k8s_cannot_get_crash_looping_pods(
event_details.clone(),
e,
));
return Err(EngineError::new_k8s_cannot_get_crash_looping_pods(event_details, e));
}
},
};
@@ -770,7 +760,7 @@ pub fn delete_environment(
// do not catch potential error - to confirm
let _ = kubectl::kubectl_exec_delete_namespace(
kubernetes.get_kubeconfig_file_path()?,
&environment.namespace(),
environment.namespace(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -837,7 +827,7 @@ where
Ok(_) => {}
Err(Operation { error, .. }) => {
return Err(EngineError::new_cannot_uninstall_helm_chart(
event_details.clone(),
event_details,
"Cert-Manager".to_string(),
object.to_string(),
error,
@@ -845,7 +835,7 @@ where
}
Err(retry::Error::Internal(msg)) => {
return Err(EngineError::new_cannot_uninstall_helm_chart(
event_details.clone(),
event_details,
"Cert-Manager".to_string(),
object.to_string(),
CommandError::new_from_safe_message(msg),
@@ -870,19 +860,14 @@ where
// check master versions
let v = match kubectl_exec_version(&kubernetes_config, envs.clone()) {
Ok(v) => v,
Err(e) => {
return Err(EngineError::new_cannot_execute_k8s_exec_version(
event_details.clone(),
e,
))
}
Err(e) => return Err(EngineError::new_cannot_execute_k8s_exec_version(event_details, e)),
};
let raw_version = format!("{}.{}", v.server_version.major, v.server_version.minor);
let masters_version = match VersionsNumber::from_str(raw_version.as_str()) {
Ok(vn) => vn,
Err(_) => {
return Err(EngineError::new_cannot_determine_k8s_master_version(
event_details.clone(),
event_details,
raw_version.to_string(),
))
}
@@ -892,7 +877,7 @@ where
let mut workers_version: Vec<VersionsNumber> = vec![];
let nodes = match kubectl_exec_get_node(kubernetes_config, envs) {
Ok(n) => n,
Err(e) => return Err(EngineError::new_cannot_get_cluster_nodes(event_details.clone(), e)),
Err(e) => return Err(EngineError::new_cannot_get_cluster_nodes(event_details, e)),
};
for node in nodes.items {
@@ -901,7 +886,7 @@ where
Ok(vn) => workers_version.push(vn),
Err(_) => {
return Err(EngineError::new_cannot_determine_k8s_kubelet_worker_version(
event_details.clone(),
event_details,
node.status.node_info.kubelet_version.to_string(),
))
}
@@ -912,7 +897,7 @@ where
Ok(vn) => workers_version.push(vn),
Err(_) => {
return Err(EngineError::new_cannot_determine_k8s_kube_proxy_version(
event_details.clone(),
event_details,
node.status.node_info.kube_proxy_version.to_string(),
))
}
@@ -923,7 +908,7 @@ where
requested_version,
masters_version,
workers_version,
event_details.clone(),
event_details,
logger,
)
}
@@ -943,7 +928,7 @@ where
for pdb in pdbs.items.unwrap() {
if pdb.status.current_healthy < pdb.status.desired_healthy {
return Err(EngineError::new_k8s_pod_disruption_budget_invalid_state(
event_details.clone(),
event_details,
pdb.metadata.name,
));
}
@@ -951,12 +936,10 @@ where
Ok(())
}
},
Err(err) => {
return Err(EngineError::new_k8s_cannot_retrieve_pods_disruption_budget(
event_details.clone(),
err,
));
}
Err(err) => Err(EngineError::new_k8s_cannot_retrieve_pods_disruption_budget(
event_details,
err,
)),
}
}
@@ -979,7 +962,7 @@ where
));
}
}
return OperationResult::Ok(());
OperationResult::Ok(())
}
}
});
@@ -1014,16 +997,16 @@ where
));
}
}
return OperationResult::Ok(());
OperationResult::Ok(())
}
}
});
return match result {
match result {
Ok(_) => Ok(()),
Err(Operation { error, .. }) => Err(error),
Err(retry::Error::Internal(e)) => Err(CommandError::new_from_safe_message(e)),
};
}
}
#[derive(Debug, PartialEq)]
@@ -1067,7 +1050,7 @@ fn check_kubernetes_upgrade_status(
Ok(v) => v,
Err(e) => {
return Err(EngineError::new_cannot_determine_k8s_requested_upgrade_version(
event_details.clone(),
event_details,
requested_version.to_string(),
Some(e),
));
@@ -1093,7 +1076,7 @@ fn check_kubernetes_upgrade_status(
Err(e) => {
return Err(
EngineError::new_k8s_version_upgrade_deployed_vs_requested_versions_inconsistency(
event_details.clone(),
event_details,
deployed_masters_version,
wished_version,
e,
@@ -1107,7 +1090,7 @@ fn check_kubernetes_upgrade_status(
logger.log(
LogLevel::Warning,
EngineEvent::Deploying(
event_details.clone(),
event_details,
EventMessage::new_from_safe(
"No worker nodes found, can't check if upgrade is required for workers".to_string(),
),
@@ -1146,7 +1129,7 @@ fn check_kubernetes_upgrade_status(
Err(e) => {
return Err(
EngineError::new_k8s_version_upgrade_deployed_vs_requested_versions_inconsistency(
event_details.clone(),
event_details,
node,
wished_version,
e,
@@ -1159,7 +1142,7 @@ fn check_kubernetes_upgrade_status(
logger.log(
LogLevel::Info,
EngineEvent::Deploying(
event_details.clone(),
event_details,
EventMessage::new_from_safe(match &required_upgrade_on {
None => "All workers are up to date, no upgrade required".to_string(),
Some(node_type) => match node_type {
@@ -1324,9 +1307,7 @@ where
{
let listeners = std::clone::Clone::clone(kubernetes.listeners());
let logger = kubernetes.logger().clone_dyn();
let event_details = kubernetes
.get_event_details(Stage::Infrastructure(InfrastructureStep::Create))
.clone();
let event_details = kubernetes.get_event_details(Stage::Infrastructure(InfrastructureStep::Create));
let progress_info = ProgressInfo::new(
ProgressScope::Infrastructure {
@@ -1573,7 +1554,7 @@ mod tests {
"1.17",
version_1_17.clone(),
vec![version_1_17.clone(), version_1_16.clone()],
event_details.clone(),
event_details,
&logger,
)
.unwrap();
@@ -1590,7 +1571,7 @@ mod tests {
"Provider version: {} | Wished version: {} | Is upgrade required: {:?}",
provider_version.clone(),
provider.clone(),
compare_kubernetes_cluster_versions_for_upgrade(&provider_version, &provider)
compare_kubernetes_cluster_versions_for_upgrade(provider_version, provider)
.unwrap()
.message
)
@@ -2070,8 +2051,8 @@ mod tests {
let milli_cpu = "250m".to_string();
let int_cpu = "2".to_string();
assert_eq!(convert_k8s_cpu_value_to_f32(milli_cpu).unwrap(), 0.25 as f32);
assert_eq!(convert_k8s_cpu_value_to_f32(int_cpu).unwrap(), 2 as f32);
assert_eq!(convert_k8s_cpu_value_to_f32(milli_cpu).unwrap(), 0.25_f32);
assert_eq!(convert_k8s_cpu_value_to_f32(int_cpu).unwrap(), 2_f32);
}
#[test]
@@ -2122,7 +2103,7 @@ mod tests {
context_id,
total_cpu,
cpu_burst,
event_details.clone(),
event_details,
&logger
)
.unwrap(),

View File

@@ -63,13 +63,13 @@ pub fn get_qovery_app_version<T: DeserializeOwned>(
Ok(x) => match x.json::<T>() {
Ok(qa) => Ok(qa),
Err(e) => Err(CommandError::new(
format!("{}, error: {:?}", message_safe.to_string(), e),
Some(message_safe.to_string()),
format!("{}, error: {:?}", message_safe, e),
Some(message_safe),
)),
},
Err(e) => Err(CommandError::new(
format!("{}, error: {:?}", message_safe.to_string(), e),
Some(message_safe.to_string()),
format!("{}, error: {:?}", message_safe, e),
Some(message_safe),
)),
}
}

View File

@@ -228,7 +228,7 @@ impl Service for ApplicationScw {
let cpu_limits = match validate_k8s_required_cpu_and_burstable(
&ListenersHelper::new(&self.listeners),
&self.context.execution_id(),
self.context.execution_id(),
&self.id,
self.total_cpus(),
self.cpu_burst(),
@@ -238,7 +238,7 @@ impl Service for ApplicationScw {
Ok(l) => l,
Err(e) => {
return Err(EngineError::new_k8s_validate_required_cpu_and_burstable_error(
event_details.clone(),
event_details,
self.total_cpus(),
self.cpu_burst(),
e,
@@ -313,7 +313,7 @@ impl Create for ApplicationScw {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
@@ -334,7 +334,7 @@ impl Create for ApplicationScw {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);

View File

@@ -177,7 +177,7 @@ impl Service for MongoDbScw {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -185,7 +185,7 @@ impl Service for MongoDbScw {
context.insert("namespace", environment.namespace());
let version = self
.matching_correct_version(event_details.clone())?
.matching_correct_version(event_details)?
.matched_version()
.to_string();
context.insert("version", &version);

View File

@@ -203,7 +203,7 @@ impl Service for MySQLScw {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -211,7 +211,7 @@ impl Service for MySQLScw {
context.insert("namespace", environment.namespace());
let version = &self
.matching_correct_version(self.is_managed_service(), event_details.clone())?
.matching_correct_version(self.is_managed_service(), event_details)?
.matched_version();
context.insert("version_major", &version.to_major_version_string());
context.insert("version", &version.to_string()); // Scaleway needs to have major version only

View File

@@ -212,7 +212,7 @@ impl Service for PostgresScw {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
@@ -220,7 +220,7 @@ impl Service for PostgresScw {
context.insert("namespace", environment.namespace());
let version = &self
.matching_correct_version(self.is_managed_service(), event_details.clone())?
.matching_correct_version(self.is_managed_service(), event_details)?
.matched_version();
context.insert("version_major", &version.to_major_version_string());
context.insert("version", &version.to_string()); // Scaleway needs to have major version only

View File

@@ -176,13 +176,13 @@ impl Service for RedisScw {
context.insert("kubeconfig_path", &kube_config_file_path);
kubectl::kubectl_exec_create_namespace_without_labels(
&environment.namespace(),
environment.namespace(),
kube_config_file_path.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
);
let version = self
.matching_correct_version(event_details.clone())?
.matching_correct_version(event_details)?
.matched_version()
.to_string();

View File

@@ -117,7 +117,7 @@ pub fn scw_helm_charts(
Err(e) => {
let message_safe = "Can't deploy helm chart as Qovery terraform config file has not been rendered by Terraform. Are you running it in dry run mode?";
return Err(CommandError::new(
format!("{}, error: {:?}", message_safe.to_string(), e),
format!("{}, error: {:?}", message_safe, e),
Some(message_safe.to_string()),
));
}
@@ -133,8 +133,8 @@ pub fn scw_helm_charts(
qovery_terraform_config_file
);
return Err(CommandError::new(
format!("{}, error: {:?}", message_safe.to_string(), e),
Some(message_safe.to_string()),
format!("{}, error: {:?}", message_safe, e),
Some(message_safe),
));
}
};
@@ -454,7 +454,7 @@ datasources:
type: loki
url: \"http://{}.{}.svc:3100\"
",
prometheus_internal_url.clone(),
prometheus_internal_url,
&loki.chart_info.name,
loki_namespace.to_string(),
&loki.chart_info.name,

View File

@@ -165,7 +165,7 @@ impl Kapsule {
QoveryIdentifier::new_from_long_id(context.organization_id().to_string()),
QoveryIdentifier::new_from_long_id(context.cluster_id().to_string()),
QoveryIdentifier::new_from_long_id(context.execution_id().to_string()),
Some(zone.region_str().to_string()),
Some(zone.region_str()),
Stage::Infrastructure(InfrastructureStep::LoadConfiguration),
Transmitter::Kubernetes(id, name),
),
@@ -183,8 +183,8 @@ impl Kapsule {
context.clone(),
"s3-temp-id".to_string(),
"default-s3".to_string(),
cloud_provider.access_key_id().clone(),
cloud_provider.secret_access_key().clone(),
cloud_provider.access_key_id(),
cloud_provider.secret_access_key(),
zone,
BucketDeleteStrategy::Empty,
false,
@@ -240,7 +240,7 @@ impl Kapsule {
Err(e) => {
let msg = format!("wasn't able to retrieve SCW cluster information from the API. {:?}", e);
return Err(EngineError::new_cannot_get_cluster_error(
event_details.clone(),
event_details,
CommandError::new(msg.clone(), Some(msg)),
));
}
@@ -248,9 +248,9 @@ impl Kapsule {
// if no cluster exists
let cluster_info_content = cluster_info.clusters.unwrap();
if &cluster_info_content.len() == &(0 as usize) {
if &cluster_info_content.len() == &0_usize {
return Ok(None);
} else if &cluster_info_content.len() != &(1 as usize) {
} else if &cluster_info_content.len() != &1_usize {
let msg = format!(
"too many clusters found with this name, where 1 was expected. {:?}",
&cluster_info_content.len()
@@ -268,7 +268,7 @@ impl Kapsule {
&self,
cluster_info: ScalewayK8sV1Cluster,
) -> Result<Vec<ScwNodeGroup>, ScwNodeGroupErrors> {
let error_cluster_id = format!("expected cluster id for this Scaleway cluster");
let error_cluster_id = "expected cluster id for this Scaleway cluster".to_string();
let cluster_id = match cluster_info.id {
None => {
return Err(ScwNodeGroupErrors::NodeGroupValidationError(
@@ -291,7 +291,7 @@ impl Kapsule {
Ok(x) => x,
Err(e) => {
let msg = format!("error while trying to get SCW pool info from cluster {}", &cluster_id);
let msg_with_error = format!("{}. {:?}", msg.clone(), e);
let msg_with_error = format!("{}. {:?}", msg, e);
return Err(ScwNodeGroupErrors::CloudProviderApiError(CommandError::new(
msg_with_error,
Some(msg),
@@ -558,7 +558,7 @@ impl Kapsule {
LogLevel::Error,
EngineEvent::Error(
EngineError::new_missing_required_env_variable(
event_details.clone(),
event_details,
"VAULT_SECRET_ID".to_string(),
),
None,
@@ -671,9 +671,9 @@ impl Kapsule {
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -682,13 +682,12 @@ impl Kapsule {
// this is due to the required dependencies of lib/scaleway/bootstrap/*.tf files
let bootstrap_charts_dir = format!("{}/common/bootstrap/charts", self.context.lib_root_dir());
let common_charts_temp_dir = format!("{}/common/charts", temp_dir.as_str());
if let Err(e) =
crate::template::copy_non_template_files(bootstrap_charts_dir.to_string(), common_charts_temp_dir.as_str())
if let Err(e) = crate::template::copy_non_template_files(&bootstrap_charts_dir, common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
bootstrap_charts_dir.to_string(),
common_charts_temp_dir.to_string(),
event_details,
bootstrap_charts_dir,
common_charts_temp_dir,
e,
));
}
@@ -723,7 +722,7 @@ impl Kapsule {
),
Err(e) => {
return Err(EngineError::new_terraform_cannot_remove_entry_out(
event_details.clone(),
event_details,
entry.to_string(),
e,
))
@@ -756,7 +755,7 @@ impl Kapsule {
.create_bucket(self.kubeconfig_bucket_name().as_str())
{
let error = EngineError::new_object_storage_cannot_create_bucket_error(
event_details.clone(),
event_details,
self.kubeconfig_bucket_name(),
e,
);
@@ -767,11 +766,8 @@ impl Kapsule {
// Logs bucket
if let Err(e) = self.object_storage.create_bucket(self.logs_bucket_name().as_str()) {
let error = EngineError::new_object_storage_cannot_create_bucket_error(
event_details.clone(),
self.logs_bucket_name(),
e,
);
let error =
EngineError::new_object_storage_cannot_create_bucket_error(event_details, self.logs_bucket_name(), e);
self.logger()
.log(LogLevel::Error, EngineEvent::Error(error.clone(), None));
return Err(error);
@@ -780,7 +776,7 @@ impl Kapsule {
// terraform deployment dedicated to cloud resources
if let Err(e) = terraform_init_validate_plan_apply(temp_dir.as_str(), self.context.is_dry_run_deploy()) {
return Err(EngineError::new_terraform_error_while_executing_pipeline(
event_details.clone(),
event_details,
e,
));
}
@@ -795,7 +791,7 @@ impl Kapsule {
kubeconfig_path.to_str().expect("No path for Kubeconfig"),
) {
let error = EngineError::new_object_storage_cannot_put_file_into_bucket_error(
event_details.clone(),
event_details,
self.logs_bucket_name(),
kubeconfig_name.to_string(),
e,
@@ -809,7 +805,7 @@ impl Kapsule {
if cluster_info.is_none() {
let msg = "no cluster found from the Scaleway API".to_string();
return Err(EngineError::new_no_cluster_found_error(
event_details.clone(),
event_details,
CommandError::new(msg.clone(), Some(msg)),
));
}
@@ -822,7 +818,7 @@ impl Kapsule {
match e {
ScwNodeGroupErrors::CloudProviderApiError(c) => {
return Err(EngineError::new_missing_api_info_from_cloud_provider_error(
event_details.clone(),
event_details,
Some(c),
))
}
@@ -838,7 +834,7 @@ impl Kapsule {
ScwNodeGroupErrors::MultipleClusterFound => {
let msg = "multiple clusters found, can't match the correct node groups".to_string();
return Err(EngineError::new_multiple_cluster_found_expected_one_error(
event_details.clone(),
event_details,
CommandError::new(msg.clone(), Some(msg)),
));
}
@@ -852,15 +848,15 @@ impl Kapsule {
),
),
ScwNodeGroupErrors::MissingNodePoolInfo => {
let msg = format!("Error with Scaleway API while trying to retrieve node pool info");
let msg = "Error with Scaleway API while trying to retrieve node pool info".to_string();
return Err(EngineError::new_missing_api_info_from_cloud_provider_error(
event_details.clone(),
event_details,
Some(CommandError::new_from_safe_message(msg)),
));
}
ScwNodeGroupErrors::NodeGroupValidationError(c) => {
return Err(EngineError::new_missing_api_info_from_cloud_provider_error(
event_details.clone(),
event_details,
Some(c),
));
}
@@ -974,7 +970,7 @@ impl Kapsule {
Err(Operation { error, .. }) => return Err(error),
Err(retry::Error::Internal(msg)) => {
return Err(EngineError::new_k8s_node_not_ready(
event_details.clone(),
event_details,
CommandError::new(msg, Some("Waiting for too long worker nodes to be ready".to_string())),
))
}
@@ -1006,7 +1002,7 @@ impl Kapsule {
)
}
Err(e) => {
return Err(EngineError::new_k8s_node_not_ready(event_details.clone(), e));
return Err(EngineError::new_k8s_node_not_ready(event_details, e));
}
};
@@ -1027,8 +1023,8 @@ impl Kapsule {
self.cluster_name(),
"scw".to_string(),
self.context.is_test_cluster(),
self.cloud_provider.access_key_id().to_string(),
self.cloud_provider.secret_access_key().to_string(),
self.cloud_provider.access_key_id(),
self.cloud_provider.secret_access_key(),
self.options.scaleway_project_id.to_string(),
self.options.qovery_engine_location.clone(),
self.context.is_feature_enabled(&Features::LogsHistory),
@@ -1056,13 +1052,13 @@ impl Kapsule {
format!("{}/qovery-tf-config.json", &temp_dir).as_str(),
&charts_prerequisites,
Some(&temp_dir),
&kubeconfig_path,
kubeconfig_path,
&credentials_environment_variables,
)
.map_err(|e| EngineError::new_helm_charts_setup_error(event_details.clone(), e))?;
deploy_charts_levels(
&kubeconfig_path,
kubeconfig_path,
&credentials_environment_variables,
helm_charts_to_deploy,
self.context.is_dry_run_deploy(),
@@ -1086,12 +1082,12 @@ impl Kapsule {
match kubectl_exec_get_events(kubeconfig_path, None, environment_variables) {
Ok(ok_line) => self.logger().log(
LogLevel::Info,
EngineEvent::Deploying(event_details.clone(), EventMessage::new_from_safe(ok_line)),
EngineEvent::Deploying(event_details, EventMessage::new_from_safe(ok_line)),
),
Err(err) => self.logger().log(
LogLevel::Error,
EngineEvent::Deploying(
event_details.clone(),
event_details,
EventMessage::new("Error trying to get kubernetes events".to_string(), Some(err.message())),
),
),
@@ -1160,9 +1156,9 @@ impl Kapsule {
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -1171,13 +1167,12 @@ impl Kapsule {
// this is due to the required dependencies of lib/scaleway/bootstrap/*.tf files
let bootstrap_charts_dir = format!("{}/common/bootstrap/charts", self.context.lib_root_dir());
let common_charts_temp_dir = format!("{}/common/charts", temp_dir.as_str());
if let Err(e) =
crate::template::copy_non_template_files(bootstrap_charts_dir.to_string(), common_charts_temp_dir.as_str())
if let Err(e) = crate::template::copy_non_template_files(&bootstrap_charts_dir, common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
bootstrap_charts_dir.to_string(),
common_charts_temp_dir.to_string(),
event_details,
bootstrap_charts_dir,
common_charts_temp_dir,
e,
));
}
@@ -1195,7 +1190,7 @@ impl Kapsule {
tf_workers_resources_name
}
Err(e) => {
let error = EngineError::new_terraform_state_does_not_exist(event_details.clone(), e);
let error = EngineError::new_terraform_state_does_not_exist(event_details, e);
self.logger()
.log(LogLevel::Error, EngineEvent::Error(error.clone(), None));
return Err(error);
@@ -1203,10 +1198,7 @@ impl Kapsule {
};
if tf_workers_resources.is_empty() {
return Err(EngineError::new_cluster_has_no_worker_nodes(
event_details.clone(),
None,
));
return Err(EngineError::new_cluster_has_no_worker_nodes(event_details, None));
}
let kubernetes_config_file_path = self.get_kubeconfig_file_path()?;
@@ -1232,7 +1224,7 @@ impl Kapsule {
Ok(job_count) if job_count > 0 => current_engine_jobs += 1,
Err(e) => {
let safe_message = "Error while looking at the API metric value";
return OperationResult::Retry(EngineError::new_cannot_get_k8s_api_custom_metrics(event_details.clone(), CommandError::new(format!("{}, error: {}", safe_message, e.to_string()), Some(safe_message.to_string()))));
return OperationResult::Retry(EngineError::new_cannot_get_k8s_api_custom_metrics(event_details.clone(), CommandError::new(format!("{}, error: {}", safe_message, e), Some(safe_message.to_string()))));
}
_ => {}
}
@@ -1247,7 +1239,7 @@ impl Kapsule {
Err(e) => {
let safe_message = format!("Error while looking at the API metric value {}", metric_name);
OperationResult::Retry(
EngineError::new_cannot_get_k8s_api_custom_metrics(event_details.clone(), CommandError::new(format!("{}, error: {}", safe_message, e.message()), Some(safe_message.to_string()))))
EngineError::new_cannot_get_k8s_api_custom_metrics(event_details.clone(), CommandError::new(format!("{}, error: {}", safe_message, e.message()), Some(safe_message))))
}
};
});
@@ -1260,7 +1252,7 @@ impl Kapsule {
return Err(error)
}
Err(retry::Error::Internal(msg)) => {
return Err(EngineError::new_cannot_pause_cluster_tasks_are_running(event_details.clone(), Some(CommandError::new_from_safe_message(msg))))
return Err(EngineError::new_cannot_pause_cluster_tasks_are_running(event_details, Some(CommandError::new_from_safe_message(msg))))
}
}
}
@@ -1292,12 +1284,12 @@ impl Kapsule {
self.send_to_customer(&message, &listeners_helper);
self.logger().log(
LogLevel::Info,
EngineEvent::Pausing(event_details.clone(), EventMessage::new_from_safe(message)),
EngineEvent::Pausing(event_details, EventMessage::new_from_safe(message)),
);
Ok(())
}
Err(e) => Err(EngineError::new_terraform_error_while_executing_pipeline(
event_details.clone(),
event_details,
e,
)),
}
@@ -1343,9 +1335,9 @@ impl Kapsule {
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -1354,13 +1346,12 @@ impl Kapsule {
// this is due to the required dependencies of lib/scaleway/bootstrap/*.tf files
let bootstrap_charts_dir = format!("{}/common/bootstrap/charts", self.context.lib_root_dir());
let common_charts_temp_dir = format!("{}/common/charts", temp_dir.as_str());
if let Err(e) =
crate::template::copy_non_template_files(bootstrap_charts_dir.to_string(), common_charts_temp_dir.as_str())
if let Err(e) = crate::template::copy_non_template_files(&bootstrap_charts_dir, common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
bootstrap_charts_dir.to_string(),
common_charts_temp_dir.to_string(),
event_details,
bootstrap_charts_dir,
common_charts_temp_dir,
e,
));
}
@@ -1496,7 +1487,7 @@ impl Kapsule {
)
.map_err(|e| to_engine_error(&event_details, e))?;
let chart = ChartInfo::new_from_release_name("metrics-server", "kube-system");
helm.uninstall(&chart, &vec![])
helm.uninstall(&chart, &[])
.map_err(|e| to_engine_error(&event_details, e))?;
// required to avoid namespace stuck on deletion
@@ -1518,12 +1509,12 @@ impl Kapsule {
let qovery_namespaces = get_qovery_managed_namespaces();
for qovery_namespace in qovery_namespaces.iter() {
let charts_to_delete = helm
.list_release(Some(qovery_namespace), &vec![])
.list_release(Some(qovery_namespace), &[])
.map_err(|e| to_engine_error(&event_details, e))?;
for chart in charts_to_delete {
let chart_info = ChartInfo::new_from_release_name(&chart.name, &chart.namespace);
match helm.uninstall(&chart_info, &vec![]) {
match helm.uninstall(&chart_info, &[]) {
Ok(_) => self.logger().log(
LogLevel::Info,
EngineEvent::Deleting(
@@ -1592,11 +1583,11 @@ impl Kapsule {
),
);
match helm.list_release(None, &vec![]) {
match helm.list_release(None, &[]) {
Ok(helm_charts) => {
for chart in helm_charts {
let chart_info = ChartInfo::new_from_release_name(&chart.name, &chart.namespace);
match helm.uninstall(&chart_info, &vec![]) {
match helm.uninstall(&chart_info, &[]) {
Ok(_) => self.logger().log(
LogLevel::Info,
EngineEvent::Deleting(
@@ -1659,18 +1650,18 @@ impl Kapsule {
self.logger().log(
LogLevel::Info,
EngineEvent::Deleting(
event_details.clone(),
event_details,
EventMessage::new_from_safe("Kubernetes cluster successfully deleted".to_string()),
),
);
Ok(())
}
Err(Operation { error, .. }) => Err(EngineError::new_terraform_error_while_executing_destroy_pipeline(
event_details.clone(),
event_details,
error,
)),
Err(retry::Error::Internal(msg)) => Err(EngineError::new_terraform_error_while_executing_destroy_pipeline(
event_details.clone(),
event_details,
CommandError::new(msg, None),
)),
}
@@ -1758,7 +1749,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.create())
@@ -1772,7 +1763,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.create_error())
@@ -1840,9 +1831,9 @@ impl Kubernetes for Kapsule {
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
self.template_directory.to_string(),
temp_dir.to_string(),
temp_dir,
e,
));
}
@@ -1853,9 +1844,9 @@ impl Kubernetes for Kapsule {
crate::template::copy_non_template_files(common_bootstrap_charts.as_str(), common_charts_temp_dir.as_str())
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
common_bootstrap_charts.to_string(),
common_charts_temp_dir.to_string(),
event_details,
common_bootstrap_charts,
common_charts_temp_dir,
e,
));
}
@@ -1882,7 +1873,7 @@ impl Kubernetes for Kapsule {
self.logger().log(
LogLevel::Info,
EngineEvent::Deploying(
event_details.clone(),
event_details,
EventMessage::new_from_safe(
"Kubernetes nodes have been successfully upgraded.".to_string(),
),
@@ -1891,7 +1882,7 @@ impl Kubernetes for Kapsule {
}
Err(e) => {
return Err(EngineError::new_k8s_node_not_ready_with_requested_version(
event_details.clone(),
event_details,
kubernetes_upgrade_status.requested_version.to_string(),
e,
));
@@ -1899,7 +1890,7 @@ impl Kubernetes for Kapsule {
},
Err(e) => {
return Err(EngineError::new_terraform_error_while_executing_pipeline(
event_details.clone(),
event_details,
e,
));
}
@@ -1916,7 +1907,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.upgrade())
@@ -1930,7 +1921,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.upgrade_error())
@@ -1944,7 +1935,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.downgrade())
@@ -1958,7 +1949,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Create, || self.downgrade_error())
@@ -1972,7 +1963,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Pause, || self.pause())
@@ -1986,7 +1977,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Pause, || self.pause_error())
@@ -2000,7 +1991,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Delete, || self.delete())
@@ -2014,7 +2005,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
send_progress_on_long_task(self, Action::Delete, || self.delete_error())
@@ -2070,7 +2061,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
Ok(())
@@ -2098,7 +2089,7 @@ impl Kubernetes for Kapsule {
self.struct_name(),
function_name!(),
self.name(),
event_details.clone(),
event_details,
self.logger(),
);
Ok(())

View File

@@ -82,7 +82,7 @@ impl FromStr for ScwInstancesType {
"render-s" => Ok(ScwInstancesType::RenderS),
_ => {
let message = format!("`{}` instance type is not supported", s);
return Err(CommandError::new(message.clone(), Some(message)));
Err(CommandError::new(message.clone(), Some(message)))
}
}
}

View File

@@ -154,7 +154,7 @@ impl Service for RouterScw {
let route_data_templates = self
.routes
.iter()
.map(|r| {
.filter_map(|r| {
match applications
.iter()
.find(|app| app.name() == r.application_name.as_str())
@@ -167,8 +167,6 @@ impl Service for RouterScw {
_ => None,
}
})
.filter(|x| x.is_some())
.map(|x| x.unwrap())
.collect::<Vec<_>>();
let router_default_domain_hash = crate::crypto::to_sha1_truncate_16(self.default_domain.as_str());
@@ -292,9 +290,9 @@ impl Create for RouterScw {
crate::template::generate_and_copy_all_files_into_dir(from_dir.as_str(), workspace_dir.as_str(), context)
{
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
from_dir.to_string(),
workspace_dir.to_string(),
event_details,
from_dir,
workspace_dir,
e,
));
}
@@ -319,7 +317,7 @@ impl Create for RouterScw {
self.selector(),
);
helm.upgrade(&chart, &vec![])
helm.upgrade(&chart, &[])
.map_err(|e| helm::to_engine_error(&event_details, e))
}

View File

@@ -296,7 +296,7 @@ impl<'a> ServiceType<'a> {
impl<'a> ToString for ServiceType<'a> {
fn to_string(&self) -> String {
self.name().to_string()
self.name()
}
}
@@ -311,7 +311,7 @@ where
{
let kubernetes = deployment_target.kubernetes;
let environment = deployment_target.environment;
match get_stateless_resource_information_for_user(kubernetes, environment, service, event_details.clone()) {
match get_stateless_resource_information_for_user(kubernetes, environment, service, event_details) {
Ok(lines) => lines,
Err(err) => {
logger.log(
@@ -390,9 +390,9 @@ where
tera_context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
service.helm_chart_dir(),
workspace_dir.to_string(),
workspace_dir,
e,
));
}
@@ -440,7 +440,7 @@ where
service.selector(),
);
helm.upgrade(&chart, &vec![])
helm.upgrade(&chart, &[])
.map_err(|e| helm::to_engine_error(&event_details, e))?;
crate::cmd::kubectl::kubectl_exec_is_pod_ready_with_retry(
@@ -558,12 +558,7 @@ where
let helm_release_name = service.helm_release_name();
// clean the resource
let _ = helm_uninstall_release(
kubernetes,
environment,
helm_release_name.as_str(),
event_details.clone(),
)?;
let _ = helm_uninstall_release(kubernetes, environment, helm_release_name.as_str(), event_details)?;
Ok(())
}
@@ -602,9 +597,9 @@ where
context.clone(),
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
service.terraform_common_resource_dir_path(),
workspace_dir.to_string(),
workspace_dir,
e,
));
}
@@ -615,9 +610,9 @@ where
context.clone(),
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
service.terraform_resource_dir_path(),
workspace_dir.to_string(),
workspace_dir,
e,
));
}
@@ -626,12 +621,12 @@ where
if let Err(e) = crate::template::generate_and_copy_all_files_into_dir(
service.helm_chart_external_name_service_dir(),
external_svc_dir.as_str(),
context.clone(),
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
service.helm_chart_external_name_service_dir(),
external_svc_dir.to_string(),
external_svc_dir,
e,
));
}
@@ -665,9 +660,9 @@ where
context.clone(),
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
service.helm_chart_dir(),
workspace_dir.to_string(),
workspace_dir,
e,
));
}
@@ -676,12 +671,12 @@ where
if let Err(e) = crate::template::generate_and_copy_all_files_into_dir(
service.helm_chart_values_dir(),
workspace_dir.as_str(),
context.clone(),
context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
service.helm_chart_values_dir(),
workspace_dir.to_string(),
workspace_dir,
e,
));
}
@@ -698,7 +693,7 @@ where
// create a namespace with labels if it does not exist
crate::cmd::kubectl::kubectl_exec_create_namespace(
kubernetes_config_file_path.to_string(),
&kubernetes_config_file_path,
environment.namespace(),
namespace_labels,
kubernetes.cloud_provider().credentials_environment_variables(),
@@ -726,7 +721,7 @@ where
service.selector(),
);
helm.upgrade(&chart, &vec![])
helm.upgrade(&chart, &[])
.map_err(|e| helm::to_engine_error(&event_details, e))?;
// check app status
@@ -741,7 +736,7 @@ where
}
return Err(EngineError::new_database_failed_to_start_after_several_retries(
event_details.clone(),
event_details,
service.name_with_id(),
service.service_type().name(),
match is_pod_ready {
@@ -775,9 +770,9 @@ where
tera_context.clone(),
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
service.terraform_common_resource_dir_path(),
workspace_dir.to_string(),
workspace_dir,
e,
));
}
@@ -788,9 +783,9 @@ where
tera_context.clone(),
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
service.terraform_resource_dir_path(),
workspace_dir.to_string(),
workspace_dir,
e,
));
}
@@ -798,13 +793,13 @@ where
let external_svc_dir = format!("{}/{}", workspace_dir, "external-name-svc");
if let Err(e) = crate::template::generate_and_copy_all_files_into_dir(
service.helm_chart_external_name_service_dir(),
external_svc_dir.to_string(),
&external_svc_dir,
tera_context.clone(),
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
service.helm_chart_external_name_service_dir(),
external_svc_dir.to_string(),
external_svc_dir,
e,
));
}
@@ -812,12 +807,12 @@ where
if let Err(e) = crate::template::generate_and_copy_all_files_into_dir(
service.helm_chart_external_name_service_dir(),
workspace_dir.as_str(),
tera_context.clone(),
tera_context,
) {
return Err(EngineError::new_cannot_copy_files_from_one_directory_to_another(
event_details.clone(),
event_details,
service.helm_chart_external_name_service_dir(),
workspace_dir.to_string(),
workspace_dir,
e,
));
}
@@ -827,7 +822,7 @@ where
logger.log(
LogLevel::Info,
EngineEvent::Deleting(
event_details.clone(),
event_details,
EventMessage::new_from_safe("Deleting secret containing tfstates".to_string()),
),
);
@@ -835,8 +830,7 @@ where
delete_terraform_tfstate_secret(kubernetes, environment.namespace(), &get_tfstate_name(service));
}
Err(e) => {
let engine_err =
EngineError::new_terraform_error_while_executing_destroy_pipeline(event_details.clone(), e);
let engine_err = EngineError::new_terraform_error_while_executing_destroy_pipeline(event_details, e);
logger.log(LogLevel::Error, EngineEvent::Error(engine_err.clone(), None));
@@ -847,12 +841,7 @@ where
// If not managed, we use helm to deploy
let helm_release_name = service.helm_release_name();
// clean the resource
let _ = helm_uninstall_release(
kubernetes,
environment,
helm_release_name.as_str(),
event_details.clone(),
)?;
let _ = helm_uninstall_release(kubernetes, environment, helm_release_name.as_str(), event_details)?;
}
Ok(())
@@ -925,10 +914,10 @@ where
VersionsNumber::from_str(&service.version()).map_err(|e| {
EngineError::new_version_number_parsing_error(event_details.clone(), service.version(), e)
})?,
VersionsNumber::from_str(&version.to_string()).map_err(|e| {
VersionsNumber::from_str(&version).map_err(|e| {
EngineError::new_version_number_parsing_error(event_details.clone(), version.to_string(), e)
})?,
Some(message.to_string()),
Some(message),
));
}
@@ -936,7 +925,7 @@ where
VersionsNumber::from_str(&service.version()).map_err(|e| {
EngineError::new_version_number_parsing_error(event_details.clone(), service.version(), e)
})?,
VersionsNumber::from_str(&version.to_string()).map_err(|e| {
VersionsNumber::from_str(&version).map_err(|e| {
EngineError::new_version_number_parsing_error(event_details.clone(), version.to_string(), e)
})?,
None,
@@ -959,7 +948,7 @@ where
listeners_helper.deployment_error(progress_info);
let error = EngineError::new_unsupported_version_error(
event_details.clone(),
event_details,
service.service_type().name(),
service.version(),
);
@@ -1028,21 +1017,21 @@ where
listeners_helper.deployment_in_progress(progress_info);
logger.log(
LogLevel::Info,
EngineEvent::Deploying(event_details.clone(), EventMessage::new_from_safe(message.to_string())),
EngineEvent::Deploying(event_details.clone(), EventMessage::new_from_safe(message)),
);
}
CheckAction::Pause => {
listeners_helper.pause_in_progress(progress_info);
logger.log(
LogLevel::Info,
EngineEvent::Pausing(event_details.clone(), EventMessage::new_from_safe(message.to_string())),
EngineEvent::Pausing(event_details.clone(), EventMessage::new_from_safe(message)),
);
}
CheckAction::Delete => {
listeners_helper.delete_in_progress(progress_info);
logger.log(
LogLevel::Info,
EngineEvent::Deleting(event_details.clone(), EventMessage::new_from_safe(message.to_string())),
EngineEvent::Deleting(event_details.clone(), EventMessage::new_from_safe(message)),
);
}
}
@@ -1107,10 +1096,10 @@ where
CheckAction::Delete => listeners_helper.delete_error(progress_info),
}
return Err(EngineError::new_k8s_service_issue(
event_details.clone(),
Err(EngineError::new_k8s_service_issue(
event_details,
CommandError::new(err.message(), Some("Error with Kubernetes service".to_string())),
));
))
}
_ => {
let progress_info = ProgressInfo::new(
@@ -1156,7 +1145,7 @@ where
// get logs
let logs = crate::cmd::kubectl::kubectl_exec_logs(
kubernetes_config_file_path.to_string(),
&kubernetes_config_file_path,
environment.namespace(),
selector.as_str(),
kubernetes.cloud_provider().credentials_environment_variables(),
@@ -1174,7 +1163,7 @@ where
// get pod state
let pods = crate::cmd::kubectl::kubectl_exec_get_pods(
kubernetes_config_file_path.to_string(),
&kubernetes_config_file_path,
Some(environment.namespace()),
Some(selector.as_str()),
kubernetes.cloud_provider().credentials_environment_variables(),
@@ -1253,7 +1242,7 @@ pub fn helm_uninstall_release(
.map_err(|e| EngineError::new_helm_error(event_details.clone(), e))?;
let chart = ChartInfo::new_from_release_name(helm_release_name, environment.namespace());
helm.uninstall(&chart, &vec![])
helm.uninstall(&chart, &[])
.map_err(|e| EngineError::new_helm_error(event_details.clone(), e))
}
@@ -1298,9 +1287,7 @@ where
S: Service + Listen,
F: Fn() -> R,
{
let event_details = service
.get_event_details(Stage::Environment(EnvironmentStep::Deploy))
.clone();
let event_details = service.get_event_details(Stage::Environment(EnvironmentStep::Deploy));
let logger = service.logger().clone_dyn();
let listeners = std::clone::Clone::clone(service.listeners());

View File

@@ -167,10 +167,7 @@ pub fn generate_supported_version(
if minor_min == minor_max {
// add short minor format targeting latest version
supported_versions.insert(
format!("{}.{}", major.to_string(), minor_max.to_string()),
latest_major_version.clone(),
);
supported_versions.insert(format!("{}.{}", major, minor_max), latest_major_version.clone());
if update_min.unwrap() == update_max.unwrap() {
let version = format!("{}.{}.{}", major, minor_min, update_min.unwrap());
supported_versions.insert(version.clone(), format!("{}{}", version, suffix));
@@ -184,13 +181,8 @@ pub fn generate_supported_version(
for minor in minor_min..minor_max + 1 {
// add short minor format targeting latest version
supported_versions.insert(
format!("{}.{}", major.to_string(), minor.to_string()),
format!(
"{}.{}.{}",
major.to_string(),
minor.to_string(),
update_max.unwrap().to_string()
),
format!("{}.{}", major, minor),
format!("{}.{}.{}", major, minor, update_max.unwrap()),
);
if update_min.unwrap() == update_max.unwrap() {
let version = format!("{}.{}.{}", major, minor, update_min.unwrap());
@@ -286,7 +278,7 @@ impl FromStr for VersionsNumber {
let major = match version_split.next() {
Some(major) => {
let major = major.to_string();
major.replace("v", "")
major.replace('v', "")
}
None => {
return Err(CommandError::new_from_safe_message(format!(
@@ -298,7 +290,7 @@ impl FromStr for VersionsNumber {
let minor = version_split.next().map(|minor| {
let minor = minor.to_string();
minor.replace("+", "")
minor.replace('+', "")
});
let patch = version_split.next().map(|patch| patch.to_string());
@@ -539,12 +531,12 @@ pub fn check_domain_for(
}
pub fn sanitize_name(prefix: &str, name: &str) -> String {
format!("{}-{}", prefix, name).replace("_", "-")
format!("{}-{}", prefix, name).replace('_', "-")
}
pub fn managed_db_name_sanitizer(max_size: usize, prefix: &str, name: &str) -> String {
let max_size = max_size - prefix.len();
let mut new_name = format!("{}{}", prefix, name.replace("_", "").replace("-", ""));
let mut new_name = format!("{}{}", prefix, name.replace('_', "").replace('-', ""));
if new_name.chars().count() > max_size {
new_name = new_name[..max_size].to_string();
}

View File

@@ -344,14 +344,14 @@ mod tests {
#[test]
fn test_error() {
let mut cmd = QoveryCommand::new("false", &vec![], &vec![]);
let mut cmd = QoveryCommand::new("false", &[], &[]);
assert_eq!(cmd.exec().is_err(), true);
assert_eq!(matches!(cmd.exec(), Err(CommandError::ExitStatusError(_))), true);
}
#[test]
fn test_command_with_timeout() {
let mut cmd = QoveryCommand::new("sleep", &vec!["120"], &vec![]);
let mut cmd = QoveryCommand::new("sleep", &["120"], &[]);
let ret = cmd.exec_with_abort(
&mut |_| {},
&mut |_| {},
@@ -360,7 +360,7 @@ mod tests {
assert!(matches!(ret, Err(CommandError::TimeoutError(_))));
let mut cmd = QoveryCommand::new("sh", &vec!["-c", "cat /dev/urandom | grep -a --null-data ."], &vec![]);
let mut cmd = QoveryCommand::new("sh", &["-c", "cat /dev/urandom | grep -a --null-data ."], &[]);
let ret = cmd.exec_with_abort(
&mut |_| {},
&mut |_| {},
@@ -369,7 +369,7 @@ mod tests {
assert!(matches!(ret, Err(CommandError::TimeoutError(_))));
let mut cmd = QoveryCommand::new("sleep", &vec!["1"], &vec![]);
let mut cmd = QoveryCommand::new("sleep", &["1"], &[]);
let ret = cmd.exec_with_abort(
&mut |_| {},
&mut |_| {},
@@ -380,7 +380,7 @@ mod tests {
#[test]
fn test_command_with_abort() {
let mut cmd = QoveryCommand::new("sleep", &vec!["120"], &vec![]);
let mut cmd = QoveryCommand::new("sleep", &["120"], &[]);
let should_kill = Arc::new(AtomicBool::new(false));
let should_kill2 = should_kill.clone();
let barrier = Arc::new(Barrier::new(2));

View File

@@ -83,15 +83,15 @@ impl Docker {
let args = vec!["buildx", "version"];
let buildx_cmd_exist = docker_exec(
&args,
&docker.get_all_envs(&vec![]),
&docker.get_all_envs(&[]),
&mut |_| {},
&mut |_| {},
&CommandKiller::never(),
);
if let Err(_) = buildx_cmd_exist {
return Err(DockerError::InvalidConfig(format!(
"Docker buildx plugin for buildkit is not correctly installed"
)));
return Err(DockerError::InvalidConfig(
"Docker buildx plugin for buildkit is not correctly installed".to_string(),
));
}
// In order to be able to use --cache-from --cache-to for buildkit,
@@ -108,7 +108,7 @@ impl Docker {
];
let _ = docker_exec(
&args,
&docker.get_all_envs(&vec![]),
&docker.get_all_envs(&[]),
&mut |_| {},
&mut |_| {},
&CommandKiller::never(),
@@ -130,7 +130,7 @@ impl Docker {
pub fn login(&self, registry: &Url) -> Result<(), DockerError> {
info!("Docker login {} as user {}", registry, registry.username());
let password = urlencoding::decode(&registry.password().unwrap_or_default())
let password = urlencoding::decode(registry.password().unwrap_or_default())
.unwrap_or_default()
.to_string();
let args = vec![
@@ -144,7 +144,7 @@ impl Docker {
docker_exec(
&args,
&self.get_all_envs(&vec![]),
&self.get_all_envs(&[]),
&mut |line| info!("{}", line),
&mut |line| warn!("{}", line),
&CommandKiller::never(),
@@ -157,8 +157,8 @@ impl Docker {
info!("Docker check locally image exist {:?}", image);
let ret = docker_exec(
&vec!["image", "inspect", &image.image_name()],
&self.get_all_envs(&vec![]),
&["image", "inspect", &image.image_name()],
&self.get_all_envs(&[]),
&mut |line| info!("{}", line),
&mut |line| warn!("{}", line),
&CommandKiller::never(),
@@ -172,8 +172,8 @@ impl Docker {
info!("Docker check remotely image exist {:?}", image);
let ret = docker_exec(
&vec!["manifest", "inspect", &image.image_name()],
&self.get_all_envs(&vec![]),
&["manifest", "inspect", &image.image_name()],
&self.get_all_envs(&[]),
&mut |line| info!("{}", line),
&mut |line| warn!("{}", line),
&CommandKiller::never(),
@@ -200,8 +200,8 @@ impl Docker {
info!("Docker pull {:?}", image);
docker_exec(
&vec!["pull", &image.image_name()],
&self.get_all_envs(&vec![]),
&["pull", &image.image_name()],
&self.get_all_envs(&[]),
stdout_output,
stderr_output,
should_abort,
@@ -319,7 +319,7 @@ impl Docker {
let _ = docker_exec(
&args_string.iter().map(|x| x.as_str()).collect::<Vec<&str>>(),
&self.get_all_envs(&vec![]),
&self.get_all_envs(&[]),
stdout_output,
stderr_output,
should_abort,
@@ -384,7 +384,7 @@ impl Docker {
docker_exec(
&args_string.iter().map(|x| x.as_str()).collect::<Vec<&str>>(),
&self.get_all_envs(&vec![]),
&self.get_all_envs(&[]),
stdout_output,
stderr_output,
should_abort,
@@ -409,7 +409,7 @@ impl Docker {
docker_exec(
&args,
&self.get_all_envs(&vec![]),
&self.get_all_envs(&[]),
stdout_output,
stderr_output,
should_abort,
@@ -431,7 +431,7 @@ impl Docker {
for prune in all_prunes_commands {
let ret = docker_exec(
&prune,
&self.get_all_envs(&vec![]),
&self.get_all_envs(&[]),
&mut |_| {},
&mut |_| {},
&CommandKiller::never(),
@@ -461,7 +461,7 @@ where
X: FnMut(String),
{
let mut cmd = QoveryCommand::new("docker", args, envs);
let ret = cmd.exec_with_abort(stdout_output, stderr_output, &cmd_killer);
let ret = cmd.exec_with_abort(stdout_output, stderr_output, cmd_killer);
match ret {
Ok(_) => Ok(()),
@@ -550,7 +550,7 @@ mod tests {
Path::new("tests/docker/multi_stage_simple/Dockerfile"),
Path::new("tests/docker/multi_stage_simple/"),
&image_to_build,
&vec![],
&[],
&image_cache,
false,
&mut |msg| println!("{}", msg),
@@ -565,7 +565,7 @@ mod tests {
Path::new("tests/docker/multi_stage_simple/Dockerfile.buildkit"),
Path::new("tests/docker/multi_stage_simple/"),
&image_to_build,
&vec![],
&[],
&image_cache,
false,
&mut |msg| println!("{}", msg),
@@ -597,7 +597,7 @@ mod tests {
Path::new("tests/docker/multi_stage_simple/Dockerfile"),
Path::new("tests/docker/multi_stage_simple/"),
&image_to_build,
&vec![],
&[],
&image_cache,
false,
&mut |msg| println!("{}", msg),
@@ -611,7 +611,7 @@ mod tests {
Path::new("tests/docker/multi_stage_simple/Dockerfile.buildkit"),
Path::new("tests/docker/multi_stage_simple/"),
&image_to_build,
&vec![],
&[],
&image_cache,
false,
&mut |msg| println!("{}", msg),
@@ -643,7 +643,7 @@ mod tests {
Path::new("tests/docker/multi_stage_simple/Dockerfile"),
Path::new("tests/docker/multi_stage_simple/"),
&image_to_build,
&vec![],
&[],
&image_cache,
false,
&mut |msg| println!("{}", msg),

View File

@@ -524,7 +524,7 @@ impl Helm {
self.get_chart_version(chart.name.clone(), Some(chart.get_namespace_string().as_str()), envs)?
{
if installed_version.le(breaking_version) {
self.uninstall(&chart, envs)?;
self.uninstall(chart, envs)?;
}
}
}
@@ -579,7 +579,7 @@ mod tests {
impl HelmTestCtx {
fn cleanup(&self) {
let ret = self.helm.uninstall(&self.chart, &vec![]);
let ret = self.helm.uninstall(&self.chart, &[]);
assert!(ret.is_ok())
}
@@ -595,7 +595,7 @@ mod tests {
);
let mut kube_config = dirs::home_dir().unwrap();
kube_config.push(".kube/config");
let helm = Helm::new(kube_config.to_str().unwrap(), &vec![]).unwrap();
let helm = Helm::new(kube_config.to_str().unwrap(), &[]).unwrap();
let cleanup = HelmTestCtx { helm, chart };
cleanup.cleanup();
@@ -612,19 +612,14 @@ mod tests {
#[test]
fn check_version() {
let mut output = String::new();
let _ = helm_exec_with_output(
&vec!["version"],
&vec![],
&mut |line| output.push_str(&line),
&mut |_line| {},
);
let _ = helm_exec_with_output(&["version"], &[], &mut |line| output.push_str(&line), &mut |_line| {});
assert!(output.contains("Version:\"v3.7.2\""));
}
#[test]
fn test_release_exist() {
let HelmTestCtx { ref helm, ref chart } = HelmTestCtx::new("test-release-exist");
let ret = helm.check_release_exist(chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Err(HelmError::ReleaseDoesNotExist(test)) if test == chart.name))
}
@@ -638,19 +633,19 @@ mod tests {
chart.custom_namespace = Some("hello-my-friend-this-is-a-test".to_string());
// no existing namespace should return an empty array
let ret = helm.list_release(Some("tsdfsfsdf"), &vec![]);
let ret = helm.list_release(Some("tsdfsfsdf"), &[]);
assert!(matches!(ret, Ok(vec) if vec.is_empty()));
// install something
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Ok(())));
// We should have at least one release in all the release
let ret = helm.list_release(None, &vec![]);
let ret = helm.list_release(None, &[]);
assert!(matches!(ret, Ok(vec) if !vec.is_empty()));
// We should have at least one release in all the release
let ret = helm.list_release(Some(&chart.get_namespace_string()), &vec![]);
let ret = helm.list_release(Some(&chart.get_namespace_string()), &[]);
assert!(matches!(ret, Ok(vec) if vec.len() == 1));
// Install a second stuff
@@ -659,10 +654,10 @@ mod tests {
ref mut chart,
} = HelmTestCtx::new("test-list-release-2");
chart.custom_namespace = Some("hello-my-friend-this-is-a-test".to_string());
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Ok(())));
let ret = helm.list_release(Some(&chart.get_namespace_string()), &vec![]);
let ret = helm.list_release(Some(&chart.get_namespace_string()), &[]);
assert!(matches!(ret, Ok(vec) if vec.len() == 2));
}
@@ -670,7 +665,7 @@ mod tests {
fn test_upgrade_diff() {
let HelmTestCtx { ref helm, ref chart } = HelmTestCtx::new("test-upgrade-diff");
let ret = helm.upgrade_diff(&chart, &vec![]);
let ret = helm.upgrade_diff(chart, &[]);
assert!(matches!(ret, Ok(())));
}
@@ -679,23 +674,23 @@ mod tests {
let HelmTestCtx { ref helm, ref chart } = HelmTestCtx::new("test-rollback");
// check release does not exist yet
let ret = helm.rollback(&chart, &vec![]);
let ret = helm.rollback(chart, &[]);
assert!(matches!(ret, Err(HelmError::ReleaseDoesNotExist(test)) if test == chart.name));
// install it
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Ok(())));
// First revision cannot be rollback
let ret = helm.rollback(&chart, &vec![]);
let ret = helm.rollback(chart, &[]);
assert!(matches!(ret, Err(HelmError::CannotRollback(_))));
// 2nd upgrade
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Ok(())));
// Rollback should be ok now
let ret = helm.rollback(&chart, &vec![]);
let ret = helm.rollback(chart, &[]);
assert!(matches!(ret, Ok(())));
}
@@ -704,15 +699,15 @@ mod tests {
let HelmTestCtx { ref helm, ref chart } = HelmTestCtx::new("test-upgrade");
// check release does not exist yet
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Err(HelmError::ReleaseDoesNotExist(test)) if test == chart.name));
// install it
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Ok(())));
// check now it exists
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Ok(_)));
}
@@ -725,15 +720,15 @@ mod tests {
chart.timeout_in_seconds = 1;
// check release does not exist yet
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Err(HelmError::ReleaseDoesNotExist(test)) if test == chart.name));
// install it
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Err(HelmError::Timeout(_, _, _))));
// Release should not exist if it fails
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Err(HelmError::ReleaseDoesNotExist(test)) if test == chart.name));
}
@@ -743,7 +738,7 @@ mod tests {
let HelmTestCtx { ref helm, ref chart } = HelmTestCtx::new("test-upgrade-with-lock-install");
// check release does not exist yet
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Err(HelmError::ReleaseDoesNotExist(test)) if test == chart.name));
// Spawn our task killer
@@ -754,26 +749,26 @@ mod tests {
move || {
barrier.wait();
thread::sleep(Duration::from_millis(3000));
let mut cmd = QoveryCommand::new("pkill", &vec!["-9", "-f", &format!("helm.*{}", chart_name)], &vec![]);
let mut cmd = QoveryCommand::new("pkill", &["-9", "-f", &format!("helm.*{}", chart_name)], &[]);
let _ = cmd.exec();
}
});
// install it
barrier.wait();
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Err(_)));
// Release should be locked
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Ok(release) if release.is_locked()));
// New installation should work even if a lock is present
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Ok(())));
// Release should not be locked anymore
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Ok(release) if !release.is_locked()));
}
@@ -786,11 +781,11 @@ mod tests {
} = HelmTestCtx::new("test-upgrade-with-lock-upgrade");
// check release does not exist yet
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Err(HelmError::ReleaseDoesNotExist(test)) if test == chart.name));
// First install
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Ok(())));
// Spawn our task killer
@@ -801,7 +796,7 @@ mod tests {
move || {
barrier.wait();
thread::sleep(Duration::from_millis(3000));
let mut cmd = QoveryCommand::new("pkill", &vec!["-9", "-f", &format!("helm.*{}", chart_name)], &vec![]);
let mut cmd = QoveryCommand::new("pkill", &["-9", "-f", &format!("helm.*{}", chart_name)], &[]);
let _ = cmd.exec();
}
});
@@ -811,19 +806,19 @@ mod tests {
value: "6".to_string(),
}];
barrier.wait();
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Err(_)));
// Release should be locked
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Ok(release) if release.is_locked() && release.version == 2));
// New installation should work even if a lock is present
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Ok(())));
// Release should not be locked anymore
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Ok(release) if !release.is_locked() && release.version == 4));
}
@@ -832,27 +827,27 @@ mod tests {
let HelmTestCtx { ref helm, ref chart } = HelmTestCtx::new("test-uninstall");
// check release does not exist yet
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Err(HelmError::ReleaseDoesNotExist(test)) if test == chart.name));
// deleting something that does not exist should not be an issue
let ret = helm.uninstall(&chart, &vec![]);
let ret = helm.uninstall(chart, &[]);
assert!(matches!(ret, Ok(())));
// install it
let ret = helm.upgrade(&chart, &vec![]);
let ret = helm.upgrade(chart, &[]);
assert!(matches!(ret, Ok(())));
// check now it exists
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Ok(_)));
// Delete it
let ret = helm.uninstall(&chart, &vec![]);
let ret = helm.uninstall(chart, &[]);
assert!(matches!(ret, Ok(())));
// check release does not exist anymore
let ret = helm.check_release_exist(&chart, &vec![]);
let ret = helm.check_release_exist(chart, &[]);
assert!(matches!(ret, Err(HelmError::ReleaseDoesNotExist(test)) if test == chart.name));
}
@@ -862,8 +857,8 @@ mod tests {
ref helm,
ref mut chart,
} = HelmTestCtx::new("test-version-release");
let _ = helm.upgrade(&chart, &vec![]);
let releases = helm.list_release(Some(&chart.get_namespace_string()), &vec![]).unwrap();
let _ = helm.upgrade(chart, &[]);
let releases = helm.list_release(Some(&chart.get_namespace_string()), &[]).unwrap();
assert_eq!(releases[0].clone().version.unwrap(), Version::new(0, 1, 0))
}
}

View File

@@ -123,7 +123,7 @@ where
cmd_args.into_iter().map(|a| a.to_string()).collect(),
envs.iter().map(|(k, v)| (k.to_string(), v.to_string())).collect(),
Some(output_string.to_string()),
Some(err_output_string.to_string()),
Some(err_output_string),
)),
}
}
@@ -166,11 +166,7 @@ where
}
Ok(Some(
result
.metadata
.annotations
.kubernetes_digitalocean_com_load_balancer_id
.clone(),
result.metadata.annotations.kubernetes_digitalocean_com_load_balancer_id,
))
}
Err(e) => Err(e),
@@ -527,7 +523,7 @@ pub fn kubectl_exec_delete_namespace<P>(
where
P: AsRef<Path>,
{
if does_contain_terraform_tfstate(&kubernetes_config, &namespace, &envs)? {
if does_contain_terraform_tfstate(&kubernetes_config, namespace, &envs)? {
return Err(CommandError::new_from_safe_message(
"Namespace contains terraform tfstates in secret, can't delete it !".to_string(),
));
@@ -789,7 +785,7 @@ where
P: AsRef<Path>,
{
kubectl_exec::<P, Configmap>(
vec!["get", "configmap", "-o", "json", "-n", namespace, &name],
vec!["get", "configmap", "-o", "json", "-n", namespace, name],
kubernetes_config,
envs,
)
@@ -845,7 +841,7 @@ where
P: AsRef<Path>,
{
let result = kubectl_exec::<P, KubernetesList<Item>>(
vec!["delete", &object.to_string(), "--all-namespaces", "--all"],
vec!["delete", object, "--all-namespaces", "--all"],
kubernetes_config,
envs,
);
@@ -857,7 +853,7 @@ where
if lower_case_message.contains("no resources found") || lower_case_message.ends_with(" deleted") {
return Ok(());
}
return Err(e);
Err(e)
}
}
}
@@ -972,7 +968,7 @@ where
"scale",
"--replicas",
&replicas_count.to_string(),
&kind_formatted,
kind_formatted,
"--selector",
selector,
],
@@ -1128,7 +1124,7 @@ where
.container_statuses
.as_ref()
.expect("Cannot get container statuses")
.into_iter()
.iter()
.any(|e| {
e.state.waiting.as_ref().is_some()
&& e.state.waiting.as_ref().expect("cannot get container state").reason == KubernetesPodStatusReason::CrashLoopBackOff // check 1

View File

@@ -70,8 +70,8 @@ fn terraform_init_validate(root_dir: &str) -> Result<(), CommandError> {
match result {
Ok(_) => Ok(()),
Err(Operation { error, .. }) => return Err(error),
Err(retry::Error::Internal(e)) => return Err(CommandError::new(e, None)),
Err(Operation { error, .. }) => Err(error),
Err(retry::Error::Internal(e)) => Err(CommandError::new(e, None)),
}
}
@@ -195,7 +195,7 @@ pub fn terraform_exec(root_dir: &str, args: Vec<&str>) -> Result<Vec<String>, Co
let mut cmd = QoveryCommand::new(
"terraform",
&args,
&vec![(TF_PLUGIN_CACHE_DIR, tf_plugin_cache_dir_value.as_str())],
&[(TF_PLUGIN_CACHE_DIR, tf_plugin_cache_dir_value.as_str())],
);
cmd.set_current_dir(root_dir);

View File

@@ -32,8 +32,8 @@ impl DOCR {
let registry_name = name.to_string();
let registry_name2 = name.to_string();
let mut registry = Url::parse(&format!("https://{}", CR_REGISTRY_DOMAIN)).unwrap();
let _ = registry.set_username(&api_key);
let _ = registry.set_password(Some(&api_key));
let _ = registry.set_username(api_key);
let _ = registry.set_password(Some(api_key));
let registry_info = ContainerRegistryInfo {
endpoint: registry,
@@ -99,7 +99,7 @@ impl DOCR {
raw_error_message: format!(
"Failed to create DOCR repository `{}`, error: {}.",
registry_name.as_str(),
e.to_string(),
e,
),
});
}
@@ -111,7 +111,7 @@ impl DOCR {
raw_error_message: format!(
"Failed to create DOCR repository `{}`, error: {}.",
registry_name.as_str(),
e.to_string(),
e,
),
});
}
@@ -141,7 +141,7 @@ impl DOCR {
Err(e) => {
return Err(ContainerRegistryError::CannotDeleteRegistry {
registry_name: "default".to_string(),
raw_error_message: format!("No response from the Digital Ocean API, error: {}", e.to_string()),
raw_error_message: format!("No response from the Digital Ocean API, error: {}", e),
});
}
}
@@ -150,8 +150,8 @@ impl DOCR {
pub fn exec_docr_login(&self) -> Result<(), ContainerRegistryError> {
let mut cmd = QoveryCommand::new(
"doctl",
&vec!["registry", "login", self.name.as_str(), "-t", self.api_key.as_str()],
&vec![],
&["registry", "login", self.name.as_str(), "-t", self.api_key.as_str()],
&[],
);
match cmd.exec() {
@@ -184,7 +184,7 @@ impl ContainerRegistry for DOCR {
fn create_registry(&self) -> Result<(), ContainerRegistryError> {
// Digital Ocean only allow one registry per account...
if let Err(_) = get_current_registry_name(self.api_key.as_str()) {
if get_current_registry_name(self.api_key.as_str()).is_err() {
let _ = self.create_registry(self.name())?;
}
@@ -282,17 +282,14 @@ pub fn subscribe_kube_cluster_to_container_registry(
Err(e) => Err(ContainerRegistryError::CannotLinkRegistryToCluster {
registry_name: "default".to_string(),
cluster_id: cluster_uuid.to_string(),
raw_error_message: format!("Unable to call Digital Ocean when tyring to subscribe repository to cluster, error: {}", e.to_string()),
raw_error_message: format!("Unable to call Digital Ocean when tyring to subscribe repository to cluster, error: {}", e),
}),
}
}
Err(e) => Err(ContainerRegistryError::CannotLinkRegistryToCluster {
registry_name: "default".to_string(),
cluster_id: cluster_uuid.to_string(),
raw_error_message: format!(
"Unable to Serialize digital ocean cluster uuids, error: {}",
e.to_string()
),
raw_error_message: format!("Unable to Serialize digital ocean cluster uuids, error: {}", e),
}),
};
}
@@ -316,7 +313,7 @@ pub fn get_current_registry_name(api_key: &str) -> Result<String, ContainerRegis
registry_name: "default".to_string(),
raw_error_message: format!(
"Seems there is no registry set (DO has only one registry), error: {}.",
err.to_string()
err
),
}),
}
@@ -333,7 +330,7 @@ pub fn get_current_registry_name(api_key: &str) -> Result<String, ContainerRegis
registry_name: "default".to_string(),
raw_error_message: format!(
"Unable to call Digital Ocean when tyring to fetch the container registry name, error: {}.",
e.to_string(),
e,
),
}),
};

View File

@@ -109,7 +109,7 @@ impl ECR {
fn get_image(&self, image: &Image) -> Option<ImageDetail> {
let mut dir = DescribeImagesRequest::default();
dir.repository_name = image.name().to_string();
dir.repository_name = image.name();
let mut image_identifier = ImageIdentifier::default();
image_identifier.image_tag = Some(image.tag.to_string());
@@ -183,7 +183,7 @@ impl ECR {
return Err(ContainerRegistryError::CannotCreateRepository {
registry_name: self.name.to_string(),
repository_name: repository_name.to_string(),
raw_error_message: e.to_string(),
raw_error_message: e,
})
}
};

View File

@@ -102,11 +102,7 @@ impl ScalewayCR {
// We consider every registry namespace names are unique
if let Some(registries) = scaleway_registry_namespaces {
if let Some(registry) = registries
.into_iter()
.filter(|r| r.status == Some(Status::Ready))
.next()
{
if let Some(registry) = registries.into_iter().find(|r| r.status == Some(Status::Ready)) {
return Some(registry);
}
}
@@ -223,13 +219,11 @@ impl ScalewayCR {
registry_to_delete.id.unwrap().as_str(),
)) {
Ok(res) => Ok(res),
Err(e) => {
return Err(ContainerRegistryError::CannotDeleteRepository {
registry_name: self.name.to_string(),
repository_name: namespace_name.to_string(),
raw_error_message: e.to_string(),
});
}
Err(e) => Err(ContainerRegistryError::CannotDeleteRepository {
registry_name: self.name.to_string(),
repository_name: namespace_name.to_string(),
raw_error_message: e.to_string(),
}),
}
}
@@ -294,7 +288,7 @@ impl ContainerRegistry for ScalewayCR {
fn does_image_exists(&self, image: &Image) -> bool {
let image = docker::ContainerImage {
registry: self.registry_info.endpoint.clone(),
name: image.name().clone(),
name: image.name(),
tags: vec![image.tag.clone()],
};
match self.context.docker.does_image_exist_remotely(&image) {

View File

@@ -247,10 +247,7 @@ impl From<errors::EngineError> for EngineError {
event_details: EventDetails::from(error.event_details),
qovery_log_message: error.qovery_log_message,
user_log_message: error.user_log_message,
message: match error.message {
Some(msg) => Some(CommandError::from(msg)),
None => None,
},
message: error.message.map(CommandError::from),
link: error.link.map(|url| url.to_string()),
hint_message: error.hint_message,
}

View File

@@ -84,8 +84,8 @@ impl CommandError {
) -> Self {
let mut unsafe_message = format!(
"{}\ncommand: {} {}\nenv: {}",
message.to_string(),
bin.to_string(),
message,
bin,
cmd_args.join(" "),
envs.iter()
.map(|(k, v)| format!("{}={}", k, v))
@@ -432,7 +432,7 @@ impl EngineError {
},
),
qovery_log_message: message.to_string(),
user_log_message: message.to_string(),
user_log_message: message,
message: None,
link: None,
hint_message: None,
@@ -494,7 +494,7 @@ impl EngineError {
event_details,
Tag::MissingRequiredEnvVariable,
message.to_string(),
message.to_string(),
message,
None,
None,
None,
@@ -669,7 +669,7 @@ impl EngineError {
Tag::CannotRetrieveClusterConfigFile,
message.to_string(),
message.to_string(),
Some(error_message.into()),
Some(error_message),
None,
None,
)
@@ -779,7 +779,7 @@ impl EngineError {
event_details,
Tag::NotEnoughResourcesToDeployEnvironment,
message.to_string(),
message.to_string(),
message,
None,
None,
Some("Consider to add one more node or upgrade your nodes configuration. If not possible, pause or delete unused environments.".to_string()),
@@ -809,7 +809,7 @@ impl EngineError {
event_details,
Tag::CannotUninstallHelmChart,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -858,7 +858,7 @@ impl EngineError {
event_details,
Tag::CannotDetermineK8sMasterVersion,
message.to_string(),
message.to_string(),
message,
None,
None,
None,
@@ -886,7 +886,7 @@ impl EngineError {
event_details,
Tag::CannotDetermineK8sRequestedUpgradeVersion,
message.to_string(),
message.to_string(),
message,
error_message,
None,
None,
@@ -912,7 +912,7 @@ impl EngineError {
event_details,
Tag::CannotDetermineK8sKubeletWorkerVersion,
message.to_string(),
message.to_string(),
message,
None,
None,
None,
@@ -935,7 +935,7 @@ impl EngineError {
event_details,
Tag::CannotDetermineK8sKubeProxyVersion,
message.to_string(),
message.to_string(),
message,
None,
None,
None,
@@ -981,7 +981,7 @@ impl EngineError {
event_details,
Tag::K8sPodDisruptionBudgetInInvalidState,
message.to_string(),
message.to_string(),
message,
None,
None,
None,
@@ -1029,7 +1029,7 @@ impl EngineError {
event_details,
Tag::K8sCannotDeletePod,
message.to_string(),
message.to_string(),
message,
Some(raw_k8s_error),
None,
None,
@@ -1102,7 +1102,7 @@ impl EngineError {
event_details,
Tag::K8sUpgradeDeployedVsRequestedVersionsInconsistency,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1134,7 +1134,7 @@ impl EngineError {
event_details,
Tag::K8sScaleReplicas,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1207,7 +1207,7 @@ impl EngineError {
event_details,
Tag::K8sGetLogs,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1232,7 +1232,7 @@ impl EngineError {
event_details,
Tag::K8sGetLogs,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1262,7 +1262,7 @@ impl EngineError {
event_details,
Tag::K8sDescribe,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1283,7 +1283,7 @@ impl EngineError {
event_details,
Tag::K8sHistory,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1308,7 +1308,7 @@ impl EngineError {
event_details,
Tag::K8sCannotCreateNamespace,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1338,7 +1338,7 @@ impl EngineError {
event_details,
Tag::K8sPodIsNotReady,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1366,7 +1366,7 @@ impl EngineError {
event_details,
Tag::K8sNodeIsNotReadyWithTheRequestedVersion,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1416,7 +1416,7 @@ impl EngineError {
event_details,
Tag::K8sValidateRequiredCPUandBurstableError,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
Some("Please ensure your configuration is valid.".to_string()),
@@ -1436,7 +1436,7 @@ impl EngineError {
event_details,
Tag::CannotFindRequiredBinary,
message.to_string(),
message.to_string(),
message,
None,
None,
None,
@@ -1464,7 +1464,7 @@ impl EngineError {
event_details,
Tag::SubnetsCountShouldBeEven,
message.to_string(),
message.to_string(),
message,
None,
None,
None,
@@ -1489,7 +1489,7 @@ impl EngineError {
event_details,
Tag::CannotGetOrCreateIamRole,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1519,7 +1519,7 @@ impl EngineError {
event_details,
Tag::CannotCopyFilesFromDirectoryToDirectory,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1566,7 +1566,7 @@ impl EngineError {
event_details,
Tag::TerraformCannotRemoveEntryOut,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1664,7 +1664,7 @@ impl EngineError {
event_details,
Tag::TerraformContextUnsupportedParameterValue,
message.to_string(),
message.to_string(),
message,
raw_error,
None,
None,
@@ -1802,13 +1802,13 @@ impl EngineError {
helm_chart: String,
raw_error: CommandError,
) -> EngineError {
let message = format!("Error while uninstalling helm chart: `{}`.", helm_chart.to_string());
let message = format!("Error while uninstalling helm chart: `{}`.", helm_chart);
EngineError::new(
event_details,
Tag::HelmChartUninstallError,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1831,15 +1831,14 @@ impl EngineError {
) -> EngineError {
let message = format!(
"Error while trying to get helm chart `{}` history in namespace `{}`.",
helm_chart.to_string(),
namespace
helm_chart, namespace
);
EngineError::new(
event_details,
Tag::HelmHistoryError,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1878,16 +1877,13 @@ impl EngineError {
product_name: String,
raw_error: CommandError,
) -> EngineError {
let message = format!(
"Error while trying to get supported versions for `{}`.",
product_name.to_string()
);
let message = format!("Error while trying to get supported versions for `{}`.", product_name);
EngineError::new(
event_details,
Tag::CannotGetSupportedVersions,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -1906,17 +1902,13 @@ impl EngineError {
product_name: String,
version: String,
) -> EngineError {
let message = format!(
"Error, version `{}` is not supported for `{}`.",
version.to_string(),
product_name.to_string()
);
let message = format!("Error, version `{}` is not supported for `{}`.", version, product_name);
EngineError::new(
event_details,
Tag::UnsupportedVersion,
message.to_string(),
message.to_string(),
message,
None,
None,
None,
@@ -1962,7 +1954,7 @@ impl EngineError {
event_details,
Tag::ClientServiceFailedToStart,
message.to_string(),
message.to_string(),
message,
None,
None,
Some("Ensure you can run it without issues with `qovery run` and check its logs from the web interface or the CLI with `qovery log`. \
@@ -1992,7 +1984,7 @@ impl EngineError {
event_details,
Tag::ClientServiceFailedToDeployBeforeStart,
message.to_string(),
message.to_string(),
message,
None,
None,
None,
@@ -2022,7 +2014,7 @@ impl EngineError {
event_details,
Tag::DatabaseFailedToStartAfterSeveralRetries,
message.to_string(),
message.to_string(),
message,
raw_error,
None,
None,
@@ -2088,7 +2080,7 @@ impl EngineError {
event_details,
Tag::VersionNumberParsingError,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -2190,7 +2182,7 @@ impl EngineError {
event_details,
Tag::BuilderDockerCannotFindAnyDockerfile,
message.to_string(),
message.to_string(),
message,
None,
None,
Some("Your Dockerfile is not present at the specified location, check your settings.".to_string()),
@@ -2216,7 +2208,7 @@ impl EngineError {
event_details,
Tag::BuilderBuildpackInvalidLanguageFormat,
message.to_string(),
message.to_string(),
message,
None,
None,
Some("Expected format `builder[@version]`.".to_string()),
@@ -2271,7 +2263,7 @@ impl EngineError {
event_details,
Tag::BuilderGetBuildError,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -2296,7 +2288,7 @@ impl EngineError {
event_details,
Tag::BuilderCloningRepositoryError,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -2363,7 +2355,7 @@ impl EngineError {
event_details,
Tag::DockerPushImageError,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -2393,7 +2385,7 @@ impl EngineError {
event_details,
Tag::DockerPullImageError,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -2418,7 +2410,7 @@ impl EngineError {
event_details,
Tag::BuilderDockerCannotReadDockerfile,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -2443,7 +2435,7 @@ impl EngineError {
event_details,
Tag::BuilderDockerCannotExtractEnvVarsFromDockerfile,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -2468,7 +2460,7 @@ impl EngineError {
event_details,
Tag::BuilderDockerCannotBuildContainerImage,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
Some("It looks like there is something wrong in your Dockerfile. Try building the application locally with `docker build --no-cache`.".to_string()),
@@ -2498,7 +2490,7 @@ impl EngineError {
event_details,
Tag::ContainerRegistryRepositoryCreationError,
message.to_string(),
message.to_string(),
message,
Some(raw_error.into()),
None,
None,
@@ -2526,7 +2518,7 @@ impl EngineError {
event_details,
Tag::ContainerRegistryRepositorySetLifecycleError,
message.to_string(),
message.to_string(),
message,
Some(raw_error.into()),
None,
None,
@@ -2552,7 +2544,7 @@ impl EngineError {
event_details,
Tag::ContainerRegistryGetCredentialsError,
message.to_string(),
message.to_string(),
message,
None,
None,
None,
@@ -2577,7 +2569,7 @@ impl EngineError {
event_details,
Tag::ContainerRegistryDeleteImageError,
message.to_string(),
message.to_string(),
message,
Some(raw_error.into()),
None,
None,
@@ -2601,7 +2593,7 @@ impl EngineError {
event_details,
Tag::ContainerRegistryImageDoesntExist,
message.to_string(),
message.to_string(),
message,
Some(raw_error.into()),
None,
None,
@@ -2628,7 +2620,7 @@ impl EngineError {
event_details,
Tag::ContainerRegistryImageUnreachableAfterPush,
message.to_string(),
message.to_string(),
message,
None,
None,
Some("Please try to redeploy in a few minutes.".to_string()),
@@ -2652,7 +2644,7 @@ impl EngineError {
event_details,
Tag::ContainerRegistryRepositoryDoesntExist,
message.to_string(),
message.to_string(),
message,
raw_error,
None,
None,
@@ -2677,7 +2669,7 @@ impl EngineError {
event_details,
Tag::ContainerRegistryDeleteRepositoryError,
message.to_string(),
message.to_string(),
message,
raw_error,
None,
None,
@@ -2717,7 +2709,7 @@ impl EngineError {
event_details,
Tag::ObjectStorageInvalidBucketName,
message.to_string(),
message.to_string(),
message,
None,
None,
Some("Check your cloud provider documentation to know bucket naming rules.".to_string()),
@@ -2736,16 +2728,13 @@ impl EngineError {
bucket_name: String,
raw_error: ObjectStorageError,
) -> EngineError {
let message = format!(
"Error, cannot create object storage bucket `{}`.",
bucket_name.to_string(),
);
let message = format!("Error, cannot create object storage bucket `{}`.", bucket_name,);
EngineError::new(
event_details,
Tag::ObjectStorageCannotCreateBucket,
message.to_string(),
message.to_string(),
message,
Some(raw_error.into()),
None,
None,
@@ -2768,15 +2757,14 @@ impl EngineError {
) -> EngineError {
let message = format!(
"Error, cannot put file `{}` into object storage bucket `{}`.",
file_name.to_string(),
bucket_name.to_string(),
file_name, bucket_name,
);
EngineError::new(
event_details,
Tag::ObjectStorageCannotPutFileIntoBucket,
message.to_string(),
message.to_string(),
message,
Some(raw_error.into()),
None,
None,
@@ -2795,16 +2783,13 @@ impl EngineError {
bucket_name: String,
raw_error: CommandError,
) -> EngineError {
let message = format!(
"Error while trying to empty object storage bucket `{}`.",
bucket_name.to_string(),
);
let message = format!("Error while trying to empty object storage bucket `{}`.", bucket_name,);
EngineError::new(
event_details,
Tag::ObjectStorageCannotEmptyBucket,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -2823,16 +2808,13 @@ impl EngineError {
bucket_name: String,
raw_error: CommandError,
) -> EngineError {
let message = format!(
"Error while trying to tag object storage bucket `{}`.",
bucket_name.to_string(),
);
let message = format!("Error while trying to tag object storage bucket `{}`.", bucket_name,);
EngineError::new(
event_details,
Tag::ObjectStorageCannotTagBucket,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,
@@ -2853,14 +2835,14 @@ impl EngineError {
) -> EngineError {
let message = format!(
"Error while trying to activate versioning for object storage bucket `{}`.",
bucket_name.to_string(),
bucket_name,
);
EngineError::new(
event_details,
Tag::ObjectStorageCannotActivateBucketVersioning,
message.to_string(),
message.to_string(),
message,
Some(raw_error),
None,
None,

View File

@@ -79,10 +79,7 @@ impl From<events::EngineEvent> for EngineEvent {
},
events::EngineEvent::Error(e, m) => EngineEvent::Error {
error: EngineError::from(e),
message: match m {
Some(msg) => Some(EventMessage::from(msg)),
None => None,
},
message: m.map(EventMessage::from),
},
events::EngineEvent::Waiting(d, m) => EngineEvent::Waiting {
details: EventDetails::from(d),
@@ -308,10 +305,7 @@ pub struct EventDetails {
impl From<events::EventDetails> for EventDetails {
fn from(details: events::EventDetails) -> Self {
let provider_kind = match details.provider_kind {
Some(kind) => Some(Kind::from(kind)),
None => None,
};
let provider_kind = details.provider_kind.map(Kind::from);
EventDetails {
provider_kind,
organisation_id: details.organisation_id.to_string(),

View File

@@ -132,11 +132,7 @@ impl EventMessage {
EventMessageVerbosity::SafeOnly => self.safe_message.to_string(),
EventMessageVerbosity::FullDetails => match &self.full_details {
None => self.safe_message.to_string(),
Some(details) => format!(
"{} / Full details: {}",
self.safe_message.to_string(),
details.to_string()
),
Some(details) => format!("{} / Full details: {}", self.safe_message, details),
},
}
}
@@ -411,7 +407,7 @@ impl EventDetails {
/// TODO(benjaminch): remove this dirty hack
pub fn clone_changing_stage(event_details: EventDetails, stage: Stage) -> Self {
let mut event_details = event_details.clone();
let mut event_details = event_details;
event_details.stage = stage;
event_details
}

View File

@@ -176,7 +176,7 @@ mod tests {
let root_dir_path = Path::new(root_dir.as_str());
let directories_to_create = vec![
format!("{}", root_dir),
root_dir.to_string(),
format!("{}/.terraform", root_dir),
format!("{}/.terraform/dir-1", root_dir),
format!("{}/dir-1", root_dir),
@@ -255,7 +255,7 @@ mod tests {
}
// clean:
tmp_files.into_iter().for_each(|f| drop(f));
tmp_files.into_iter().for_each(drop);
tmp_dir.close().expect("error closing temporary directory");
}
}

View File

@@ -14,7 +14,7 @@ fn authentication_callback<'a>(
) -> impl FnMut(&str, Option<&str>, CredentialType) -> Result<Cred, Error> + 'a {
let mut current_credentials: (String, Vec<(CredentialType, Cred)>) = ("".into(), vec![]);
return move |remote_url, username_from_url, allowed_types| {
move |remote_url, username_from_url, allowed_types| {
// If we have changed remote, reset our available auth methods
if remote_url != current_credentials.0 {
current_credentials = (
@@ -43,7 +43,7 @@ fn authentication_callback<'a>(
return Ok(credential);
}
}
};
}
}
fn checkout<'a>(repo: &'a Repository, commit_id: &'a str) -> Result<Object<'a>, Error> {
@@ -173,7 +173,7 @@ mod tests {
/// Since tests are runs in parallel and eventually on the same node, it will avoid having directories collisions between tests running on the same node.
pub fn new_with_random_suffix(base_path: String) -> Self {
DirectoryForTests {
path: format!("{}_{}", base_path, Uuid::new_v4().to_string()),
path: format!("{}_{}", base_path, Uuid::new_v4()),
}
}

View File

@@ -133,7 +133,7 @@ mod tests {
safe_message.to_string(),
Some(raw_message.to_string()),
)),
Some(link.clone()),
Some(link),
Some(hint.to_string()),
),
None,
@@ -150,7 +150,7 @@ mod tests {
execution_id.clone(),
Some(ScwRegion::Paris.as_str().to_string()),
Stage::Infrastructure(InfrastructureStep::Create),
Transmitter::Kubernetes(cluster_id.to_string(), cluster_name.to_string()),
Transmitter::Kubernetes(cluster_id.to_string(), cluster_name),
),
EventMessage::new(raw_message.to_string(), Some(safe_message.to_string())),
),
@@ -182,7 +182,7 @@ mod tests {
execution_id.clone(),
Some(ScwRegion::Paris.as_str().to_string()),
Stage::Environment(EnvironmentStep::Delete),
Transmitter::Application(app_id.to_string(), app_name.to_string()),
Transmitter::Application(app_id.to_string(), app_name),
),
EventMessage::new(raw_message.to_string(), Some(safe_message.to_string())),
),
@@ -219,7 +219,7 @@ mod tests {
tc.description
);
assert!(
logs_contain(format!("execution_id=\"{}\"", execution_id.to_string()).as_str()),
logs_contain(format!("execution_id=\"{}\"", execution_id).as_str()),
"{}",
tc.description
);
@@ -256,17 +256,17 @@ mod tests {
);
assert!(
logs_contain(format!("stage=\"{}\"", details.stage().to_string()).as_str()),
logs_contain(format!("stage=\"{}\"", details.stage()).as_str()),
"{}",
tc.description
);
assert!(
logs_contain(format!("step=\"{}\"", details.stage().sub_step_name().to_string()).as_str()),
logs_contain(format!("step=\"{}\"", details.stage().sub_step_name()).as_str()),
"{}",
tc.description
);
assert!(
logs_contain(format!("transmitter=\"{}\"", details.transmitter().to_string()).as_str()),
logs_contain(format!("transmitter=\"{}\"", details.transmitter()).as_str()),
"{}",
tc.description
);

View File

@@ -45,9 +45,9 @@ impl S3 {
context,
id,
name,
access_key_id: access_key_id.to_string(),
secret_access_key: secret_access_key.to_string(),
region: region.clone(),
access_key_id,
secret_access_key,
region,
bucket_versioning_activated,
bucket_ttl_in_seconds,
}
@@ -59,7 +59,7 @@ impl S3 {
fn get_s3_client(&self) -> S3Client {
let region = RusotoRegion::from_str(&self.region.to_aws_format())
.expect(format!("S3 region `{}` doesn't seems to be valid.", self.region.to_aws_format()).as_str());
.unwrap_or_else(|_| panic!("S3 region `{}` doesn't seems to be valid.", self.region.to_aws_format()));
let client = Client::new_with(
self.get_credentials(),
HttpClient::new().expect("unable to create new Http client"),
@@ -191,11 +191,11 @@ impl ObjectStorage for S3 {
tag_set: vec![
Tag {
key: "CreationDate".to_string(),
value: format!("{}", creation_date.to_rfc3339()),
value: creation_date.to_rfc3339(),
},
Tag {
key: "Ttl".to_string(),
value: format!("{}", self.bucket_ttl_in_seconds.unwrap_or_else(|| 0).to_string()),
value: format!("{}", self.bucket_ttl_in_seconds.unwrap_or(0)),
},
],
},

View File

@@ -76,7 +76,7 @@ impl ScalewayOS {
}
fn get_endpoint_url_for_region(&self) -> String {
format!("https://s3.{}.scw.cloud", self.zone.region().to_string())
format!("https://s3.{}.scw.cloud", self.zone.region())
}
fn is_bucket_name_valid(bucket_name: &str) -> Result<(), ObjectStorageError> {
@@ -217,7 +217,7 @@ impl ObjectStorage for ScalewayOS {
},
Tag {
key: "Ttl".to_string(),
value: format!("Ttl={}", self.bucket_ttl_in_seconds.unwrap_or_else(|| 0).to_string()),
value: format!("Ttl={}", self.bucket_ttl_in_seconds.unwrap_or(0)),
},
],
},
@@ -263,12 +263,10 @@ impl ObjectStorage for ScalewayOS {
..Default::default()
})) {
Ok(_) => Ok(()),
Err(e) => {
return Err(ObjectStorageError::CannotDeleteBucket {
bucket_name: bucket_name.to_string(),
raw_error_message: e.to_string(),
});
}
Err(e) => Err(ObjectStorageError::CannotDeleteBucket {
bucket_name: bucket_name.to_string(),
raw_error_message: e.to_string(),
}),
},
BucketDeleteStrategy::Empty => Ok(()), // Do not delete the bucket
}
@@ -331,19 +329,15 @@ impl ObjectStorage for ScalewayOS {
let file = File::open(path).unwrap();
Ok((file_path, file))
}
Err(e) => {
return Err(ObjectStorageError::CannotReadFile {
bucket_name: bucket_name.to_string(),
raw_error_message: e.to_string(),
});
}
},
Err(e) => {
return Err(ObjectStorageError::CannotOpenFile {
Err(e) => Err(ObjectStorageError::CannotReadFile {
bucket_name: bucket_name.to_string(),
raw_error_message: e.to_string(),
});
}
}),
},
Err(e) => Err(ObjectStorageError::CannotOpenFile {
bucket_name: bucket_name.to_string(),
raw_error_message: e.to_string(),
}),
}
}
Err(e) => Err(ObjectStorageError::CannotGetObjectFile {

View File

@@ -329,7 +329,7 @@ impl ObjectStorage for Spaces {
Error::Internal(err) => Err(ObjectStorageError::CannotGetObjectFile {
bucket_name: bucket_name.to_string(),
file_name: object_key.to_string(),
raw_error_message: err.to_string(),
raw_error_message: err,
}),
};
}

View File

@@ -260,9 +260,9 @@ impl<'a> Transaction<'a> {
// FIXME: Cleanup this, qe_environment should not be rebuilt at this step
fn rollback_environment(&self, environment: &Environment) -> Result<(), RollbackError> {
let action = match environment.action {
Action::Create => self.engine.kubernetes().deploy_environment_error(&environment),
Action::Pause => self.engine.kubernetes().pause_environment_error(&environment),
Action::Delete => self.engine.kubernetes().delete_environment_error(&environment),
Action::Create => self.engine.kubernetes().deploy_environment_error(environment),
Action::Pause => self.engine.kubernetes().pause_environment_error(environment),
Action::Delete => self.engine.kubernetes().delete_environment_error(environment),
Action::Nothing => Ok(()),
};
@@ -498,7 +498,7 @@ impl<'a> Transaction<'a> {
// Even by storing data at the micro seconds precision
thread::sleep(std::time::Duration::from_millis(100));
let _ = match action_fn(&environment) {
let _ = match action_fn(environment) {
Err(err) => {
let rollback_result = match self.rollback() {
Ok(_) => TransactionResult::Rollback(err),

View File

@@ -19,7 +19,7 @@ pub fn cpu_string_to_float<T: Into<String>>(cpu: T) -> f32 {
}
// the result is in millis, so convert it to float
let cpu = cpu.replace("m", "");
let cpu = cpu.replace('m', "");
match cpu.parse::<f32>() {
Ok(v) if v >= 0.0 => v / 1000.0,
_ => 0.0,

View File

@@ -59,14 +59,14 @@ mod tests_utilities {
&"/".to_string(),
&Some("Dockerfile".to_string()),
&BTreeMap::new(),
&"63d8c437337416a7067d3f358197ac47d003fab9".to_string(),
"63d8c437337416a7067d3f358197ac47d003fab9",
);
let image_tag_2 = compute_image_tag(
&"/".to_string(),
&Some("Dockerfile.qovery".to_string()),
&BTreeMap::new(),
&"63d8c437337416a7067d3f358197ac47d003fab9".to_string(),
"63d8c437337416a7067d3f358197ac47d003fab9",
);
assert_ne!(image_tag, image_tag_2);
@@ -75,7 +75,7 @@ mod tests_utilities {
&"/xxx".to_string(),
&Some("Dockerfile.qovery".to_string()),
&BTreeMap::new(),
&"63d8c437337416a7067d3f358197ac47d003fab9".to_string(),
"63d8c437337416a7067d3f358197ac47d003fab9",
);
assert_ne!(image_tag, image_tag_3);
@@ -84,7 +84,7 @@ mod tests_utilities {
&"/xxx".to_string(),
&Some("Dockerfile.qovery".to_string()),
&BTreeMap::new(),
&"63d8c437337416a7067d3f358197ac47d003fab9".to_string(),
"63d8c437337416a7067d3f358197ac47d003fab9",
);
assert_eq!(image_tag_3, image_tag_3_2);
@@ -93,7 +93,7 @@ mod tests_utilities {
&"/".to_string(),
&None as &Option<&str>,
&BTreeMap::new(),
&"63d8c437337416a7067d3f358197ac47d003fab9".to_string(),
"63d8c437337416a7067d3f358197ac47d003fab9",
);
let mut env_vars_5 = BTreeMap::new();
@@ -103,7 +103,7 @@ mod tests_utilities {
&"/".to_string(),
&None as &Option<&str>,
&env_vars_5,
&"63d8c437337416a7067d3f358197ac47d003fab9".to_string(),
"63d8c437337416a7067d3f358197ac47d003fab9",
);
assert_eq!(image_tag_4, image_tag_5);

View File

@@ -71,7 +71,7 @@ fn deploy_an_environment_with_3_databases_and_3_apps() {
let ret = environment_delete.delete_environment(&ea_delete, logger, &engine_config_for_deletion);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -128,20 +128,14 @@ fn deploy_an_environment_with_db_and_pause_it() {
// Check that we have actually 0 pods running for this db
let app_name = format!("postgresql{}-0", environment.databases[0].name);
let ret = get_pods(
context.clone(),
Kind::Aws,
environment.clone(),
app_name.clone().as_str(),
secrets.clone(),
);
let ret = get_pods(context, Kind::Aws, environment, app_name.as_str(), secrets);
assert_eq!(ret.is_ok(), true);
assert_eq!(ret.unwrap().items.is_empty(), true);
let ret = environment_delete.delete_environment(&ea_delete, logger, &engine_config_for_deletion);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -213,7 +207,7 @@ fn postgresql_deploy_a_working_development_environment_with_all_options() {
let ret = environment_delete.delete_environment(&ea_for_deletion, logger, &engine_config_for_deletion);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -330,13 +324,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() {
// TO CHECK: DATABASE SHOULDN'T BE RESTARTED AFTER A REDEPLOY
let database_name = format!("postgresql{}-0", &environment_check.databases[0].name);
match is_pod_restarted_env(
context.clone(),
Kind::Aws,
environment_check,
database_name.as_str(),
secrets.clone(),
) {
match is_pod_restarted_env(context, Kind::Aws, environment_check, database_name.as_str(), secrets) {
(true, _) => assert!(true),
(false, _) => assert!(false),
}
@@ -347,7 +335,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() {
TransactionResult::Ok | TransactionResult::UnrecoverableError(_, _)
));
return test_name.to_string();
test_name.to_string()
})
}

View File

@@ -70,7 +70,7 @@ fn deploy_a_working_environment_with_no_router_on_aws_eks() {
let ret = environment_for_delete.delete_environment(&ea_delete, logger, &engine_config_for_delete);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -112,7 +112,7 @@ fn deploy_a_working_environment_and_pause_it_eks() {
);
let ea = environment.clone();
let selector = format!("appId={}", environment.clone().applications[0].id);
let selector = format!("appId={}", environment.applications[0].id);
let ret = environment.deploy_environment(&ea, logger.clone(), &engine_config);
assert!(matches!(ret, TransactionResult::Ok));
@@ -183,7 +183,7 @@ fn deploy_a_working_environment_and_pause_it_eks() {
assert!(matches!(ret, TransactionResult::Ok));
let ret = get_pods(
context.clone(),
context,
Kind::Aws,
environment.clone(),
selector.as_str(),
@@ -235,7 +235,7 @@ fn deploy_a_working_environment_and_pause_it_eks() {
let ret = environment.delete_environment(&ea, logger, &engine_config_for_delete);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -291,7 +291,7 @@ fn deploy_a_not_working_environment_with_no_router_on_aws_eks() {
TransactionResult::Ok | TransactionResult::UnrecoverableError(_, _)
));
return test_name.to_string();
test_name.to_string()
})
}
@@ -362,7 +362,7 @@ fn build_with_buildpacks_and_deploy_a_working_environment() {
let ret = environment_delete.delete_environment(&ea_delete, logger, &engine_config_for_deletion);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -433,7 +433,7 @@ fn build_worker_with_buildpacks_and_deploy_a_working_environment() {
let ret = environment_delete.delete_environment(&ea_delete, logger, &engine_config_for_deletion);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -485,7 +485,7 @@ fn deploy_a_working_environment_with_domain() {
let ret = environment_delete.delete_environment(&ea_delete, logger, &engine_config_for_deletion);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -553,7 +553,7 @@ fn deploy_a_working_environment_with_storage_on_aws_eks() {
let ret = environment.deploy_environment(&ea, logger.clone(), &engine_config);
assert!(matches!(ret, TransactionResult::Ok));
match get_pvc(context.clone(), Kind::Aws, environment.clone(), secrets.clone()) {
match get_pvc(context, Kind::Aws, environment, secrets) {
Ok(pvc) => assert_eq!(
pvc.items.expect("No items in pvc")[0].spec.resources.requests.storage,
format!("{}Gi", storage_size)
@@ -564,7 +564,7 @@ fn deploy_a_working_environment_with_storage_on_aws_eks() {
let ret = environment_delete.delete_environment(&ea_delete, logger, &engine_config_for_deletion);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -638,7 +638,7 @@ fn redeploy_same_app_with_ebs() {
let ret = environment.deploy_environment(&ea, logger.clone(), &engine_config);
assert!(matches!(ret, TransactionResult::Ok));
match get_pvc(context.clone(), Kind::Aws, environment.clone(), secrets.clone()) {
match get_pvc(context.clone(), Kind::Aws, environment, secrets.clone()) {
Ok(pvc) => assert_eq!(
pvc.items.expect("No items in pvc")[0].spec.resources.requests.storage,
format!("{}Gi", storage_size)
@@ -651,26 +651,20 @@ fn redeploy_same_app_with_ebs() {
context.clone(),
Kind::Aws,
environment_check1,
app_name.clone().as_str(),
app_name.as_str(),
secrets.clone(),
);
let ret = environment_redeploy.deploy_environment(&ea2, logger.clone(), &engine_config_bis);
assert!(matches!(ret, TransactionResult::Ok));
let (_, number2) = is_pod_restarted_env(
context.clone(),
Kind::Aws,
environment_check2,
app_name.as_str(),
secrets.clone(),
);
let (_, number2) = is_pod_restarted_env(context, Kind::Aws, environment_check2, app_name.as_str(), secrets);
//nothing change in the app, so, it shouldn't be restarted
assert!(number.eq(&number2));
let ret = environment_delete.delete_environment(&ea_delete, logger, &engine_config_for_deletion);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -747,7 +741,7 @@ fn deploy_a_not_working_environment_and_after_working_environment() {
let ret = environment_for_delete.delete_environment(&ea_delete, logger, &engine_config_for_delete);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -848,7 +842,7 @@ fn deploy_ok_fail_fail_ok_environment() {
let ret = delete_env.delete_environment(&ea_delete, logger, &engine_config_for_delete);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -900,7 +894,7 @@ fn deploy_a_non_working_environment_with_no_failover_on_aws_eks() {
let ret = delete_env.delete_environment(&ea_delete, logger, &engine_config_for_delete);
assert!(matches!(ret, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -953,7 +947,7 @@ fn aws_eks_deploy_a_working_environment_with_sticky_session() {
// let time for nginx to reload the config
thread::sleep(Duration::from_secs(10));
// checking if cookie is properly set on the app
assert!(routers_sessions_are_sticky(environment.routers.clone()));
assert!(routers_sessions_are_sticky(environment.routers));
let ret = environment_for_delete.delete_environment(&env_action_for_delete, logger, &engine_config_for_delete);
assert!(matches!(ret, TransactionResult::Ok));

View File

@@ -12,17 +12,17 @@ fn test_delete_bucket() {
let context = context("fake_orga_id", "fake_cluster_id");
let secrets = FuncTestsSecrets::new();
let id = generate_id();
let name = format!("test-{}", id.to_string());
let name = format!("test-{}", id);
let aws_access_key = secrets.AWS_ACCESS_KEY_ID.expect("AWS_ACCESS_KEY_ID is not set");
let aws_secret_key = secrets.AWS_SECRET_ACCESS_KEY.expect("AWS_SECRET_ACCESS_KEY is not set");
let aws_region_raw = secrets.AWS_DEFAULT_REGION.expect("AWS_DEFAULT_REGION is not set");
let aws_region = AwsRegion::from_str(aws_region_raw.as_str())
.expect(format!("AWS region `{}` seems not to be valid", aws_region_raw).as_str());
.unwrap_or_else(|_| panic!("AWS region `{}` seems not to be valid", aws_region_raw));
let aws_os = S3::new(
context.clone(),
id.to_string(),
name.to_string(),
id,
name,
aws_access_key,
aws_secret_key,
aws_region.clone(),
@@ -34,7 +34,7 @@ fn test_delete_bucket() {
aws_os
.create_bucket(bucket_name.as_str())
.expect(format!("error while creating S3 bucket in `{}`", aws_region.to_aws_format()).as_str());
.unwrap_or_else(|_| panic!("error while creating S3 bucket in `{}`", aws_region.to_aws_format()));
// compute:
let result = aws_os.delete_bucket(bucket_name.as_str());
@@ -59,17 +59,17 @@ fn test_create_bucket() {
let context = context("fake_orga_id", "fake_cluster_id");
let secrets = FuncTestsSecrets::new();
let id = generate_id();
let name = format!("test-{}", id.to_string());
let name = format!("test-{}", id);
let aws_access_key = secrets.AWS_ACCESS_KEY_ID.expect("AWS_ACCESS_KEY_ID is not set");
let aws_secret_key = secrets.AWS_SECRET_ACCESS_KEY.expect("AWS_SECRET_ACCESS_KEY is not set");
let aws_region_raw = secrets.AWS_DEFAULT_REGION.expect("AWS_DEFAULT_REGION is not set");
let aws_region = AwsRegion::from_str(aws_region_raw.as_str())
.expect(format!("AWS region `{}` seems not to be valid", aws_region_raw).as_str());
.unwrap_or_else(|_| panic!("AWS region `{}` seems not to be valid", aws_region_raw));
let aws_os = S3::new(
context.clone(),
id.to_string(),
name.to_string(),
id,
name,
aws_access_key,
aws_secret_key,
aws_region.clone(),
@@ -111,20 +111,20 @@ fn test_recreate_bucket() {
let context = context("fake_orga_id", "fake_cluster_id");
let secrets = FuncTestsSecrets::new();
let id = generate_id();
let name = format!("test-{}", id.to_string());
let name = format!("test-{}", id);
let aws_access_key = secrets.AWS_ACCESS_KEY_ID.expect("AWS_ACCESS_KEY_ID is not set");
let aws_secret_key = secrets.AWS_SECRET_ACCESS_KEY.expect("AWS_SECRET_ACCESS_KEY is not set");
let aws_region_raw = secrets.AWS_DEFAULT_REGION.expect("AWS_DEFAULT_REGION is not set");
let aws_region = AwsRegion::from_str(aws_region_raw.as_str())
.expect(format!("AWS region `{}` seems not to be valid", aws_region_raw).as_str());
.unwrap_or_else(|_| panic!("AWS region `{}` seems not to be valid", aws_region_raw));
let aws_os = S3::new(
context.clone(),
id.to_string(),
name.to_string(),
id,
name,
aws_access_key,
aws_secret_key,
aws_region.clone(),
aws_region,
false,
context.resource_expiration_in_seconds(),
);
@@ -156,20 +156,20 @@ fn test_put_file() {
let context = context("fake_orga_id", "fake_cluster_id");
let secrets = FuncTestsSecrets::new();
let id = generate_id();
let name = format!("test-{}", id.to_string());
let name = format!("test-{}", id);
let aws_access_key = secrets.AWS_ACCESS_KEY_ID.expect("AWS_ACCESS_KEY_ID is not set");
let aws_secret_key = secrets.AWS_SECRET_ACCESS_KEY.expect("AWS_SECRET_ACCESS_KEY is not set");
let aws_region_raw = secrets.AWS_DEFAULT_REGION.expect("AWS_DEFAULT_REGION is not set");
let aws_region = AwsRegion::from_str(aws_region_raw.as_str())
.expect(format!("AWS region `{}` seems not to be valid", aws_region_raw).as_str());
.unwrap_or_else(|_| panic!("AWS region `{}` seems not to be valid", aws_region_raw));
let aws_os = S3::new(
context.clone(),
id.to_string(),
name.to_string(),
id,
name,
aws_access_key,
aws_secret_key,
aws_region.clone(),
aws_region,
false,
context.resource_expiration_in_seconds(),
);
@@ -207,20 +207,20 @@ fn test_get_file() {
let context = context("fake_orga_id", "fake_cluster_id");
let secrets = FuncTestsSecrets::new();
let id = generate_id();
let name = format!("test-{}", id.to_string());
let name = format!("test-{}", id);
let aws_access_key = secrets.AWS_ACCESS_KEY_ID.expect("AWS_ACCESS_KEY_ID is not set");
let aws_secret_key = secrets.AWS_SECRET_ACCESS_KEY.expect("AWS_SECRET_ACCESS_KEY is not set");
let aws_region_raw = secrets.AWS_DEFAULT_REGION.expect("AWS_DEFAULT_REGION is not set");
let aws_region = AwsRegion::from_str(aws_region_raw.as_str())
.expect(format!("AWS region `{}` seems not to be valid", aws_region_raw).as_str());
.unwrap_or_else(|_| panic!("AWS region `{}` seems not to be valid", aws_region_raw));
let aws_os = S3::new(
context.clone(),
id.to_string(),
name.to_string(),
id,
name,
aws_access_key,
aws_secret_key,
aws_region.clone(),
aws_region,
false,
context.resource_expiration_in_seconds(),
);

View File

@@ -14,7 +14,7 @@ fn create_upgrade_and_destroy_eks_cluster_with_env_in_eu_west_3() {
let secrets = FuncTestsSecrets::new();
let region = secrets.AWS_DEFAULT_REGION.as_ref().expect("AWS region was not found");
let aws_region = AwsRegion::from_str(&region).expect("Wasn't able to convert the desired region");
let aws_region = AwsRegion::from_str(region).expect("Wasn't able to convert the desired region");
let aws_zones = aws_region.get_zones();
let organization_id = generate_id();
@@ -32,7 +32,7 @@ fn create_upgrade_and_destroy_eks_cluster_with_env_in_eu_west_3() {
);
let environment = test_utilities::common::working_minimal_environment(&context, cluster_domain.as_str());
let env_action = environment.clone();
let env_action = environment;
engine_run_test(|| {
cluster_test(
@@ -40,7 +40,7 @@ fn create_upgrade_and_destroy_eks_cluster_with_env_in_eu_west_3() {
Kind::Aws,
context.clone(),
logger(),
&region,
region,
Some(aws_zones),
ClusterTestType::Classic,
AWS_KUBERNETES_MAJOR_VERSION,

View File

@@ -76,7 +76,7 @@ fn deploy_an_environment_with_3_databases_and_3_apps() {
warn!("cannot clean environments, error: {:?}", e);
}
return test_name.to_string();
test_name.to_string()
})
}
@@ -123,7 +123,7 @@ fn deploy_an_environment_with_db_and_pause_it() {
let env_action = environment.clone();
let env_action_delete = environment_delete.clone();
let ret = environment.deploy_environment(&env_action.clone(), logger.clone(), &engine_config);
let ret = environment.deploy_environment(&env_action, logger.clone(), &engine_config);
assert!(matches!(ret, TransactionResult::Ok));
let ret = environment.pause_environment(&env_action, logger.clone(), &engine_config);
@@ -135,7 +135,7 @@ fn deploy_an_environment_with_db_and_pause_it() {
context.clone(),
ProviderKind::Do,
environment.clone(),
app_name.clone().as_str(),
app_name.as_str(),
secrets.clone(),
);
assert_eq!(ret.is_ok(), true);
@@ -145,11 +145,11 @@ fn deploy_an_environment_with_db_and_pause_it() {
assert!(matches!(ret, TransactionResult::Ok));
// delete images created during test from registries
if let Err(e) = clean_environments(&context, vec![environment], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
return test_name.to_string();
test_name.to_string()
})
}
@@ -229,7 +229,7 @@ fn postgresql_deploy_a_working_development_environment_with_all_options() {
warn!("cannot clean environments, error: {:?}", e);
}
return test_name.to_string();
test_name.to_string()
})
}
@@ -381,7 +381,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() {
warn!("cannot clean environments, error: {:?}", e);
}
return test_name.to_string();
test_name.to_string()
})
}

View File

@@ -69,7 +69,7 @@ fn digitalocean_doks_deploy_a_working_environment_with_no_router() {
let ret = environment_for_delete.delete_environment(&env_action_for_delete, logger, &engine_config_for_delete);
assert!(matches!(ret, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -130,7 +130,7 @@ fn digitalocean_doks_deploy_a_not_working_environment_with_no_router() {
TransactionResult::Ok | TransactionResult::UnrecoverableError(_, _)
));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -197,7 +197,7 @@ fn digitalocean_doks_deploy_a_working_environment_and_pause() {
context.clone(),
Kind::Do,
environment.clone(),
selector.clone().as_str(),
selector.as_str(),
secrets.clone(),
);
assert_eq!(ret.is_ok(), true);
@@ -223,7 +223,7 @@ fn digitalocean_doks_deploy_a_working_environment_and_pause() {
let ret = environment.delete_environment(&env_action, logger, &engine_config_for_delete);
assert!(matches!(ret, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -298,7 +298,7 @@ fn digitalocean_doks_build_with_buildpacks_and_deploy_a_working_environment() {
environment_for_delete.delete_environment(&env_action_for_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -353,7 +353,7 @@ fn digitalocean_doks_deploy_a_working_environment_with_domain() {
let result = environment_delete.delete_environment(&env_action_for_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -433,7 +433,7 @@ fn digitalocean_doks_deploy_a_working_environment_with_storage() {
let result = environment_delete.delete_environment(&env_action_delete, logger, &engine_config_for_deletion);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -522,7 +522,7 @@ fn digitalocean_doks_redeploy_same_app() {
context.clone(),
Kind::Do,
environment_check1,
app_name.clone().as_str(),
app_name.as_str(),
secrets.clone(),
);
@@ -543,7 +543,7 @@ fn digitalocean_doks_redeploy_same_app() {
let result = environment_delete.delete_environment(&env_action_delete, logger, &engine_config_for_deletion);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -622,7 +622,7 @@ fn digitalocean_doks_deploy_a_not_working_environment_and_then_working_environme
let result = environment_for_delete.delete_environment(&env_action_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -731,7 +731,7 @@ fn digitalocean_doks_deploy_ok_fail_fail_ok_environment() {
let result = delete_env.delete_environment(&env_action_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -786,7 +786,7 @@ fn digitalocean_doks_deploy_a_non_working_environment_with_no_failover() {
let result = delete_env.delete_environment(&env_action_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -849,7 +849,7 @@ fn digitalocean_doks_deploy_a_working_environment_with_sticky_session() {
environment_for_delete.delete_environment(&env_action_for_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), DO_TEST_REGION) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, DO_TEST_REGION) {
warn!("cannot clean environments, error: {:?}", e);
}

View File

@@ -18,8 +18,8 @@ fn test_delete_bucket_hard_delete_strategy() {
context,
"test-fake".to_string(),
"test-fake".to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap(),
TEST_REGION,
BucketDeleteStrategy::HardDelete,
);
@@ -49,8 +49,8 @@ fn test_delete_bucket_empty_strategy() {
context,
"test-fake".to_string(),
"test-fake".to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap(),
TEST_REGION,
BucketDeleteStrategy::Empty,
);
@@ -85,8 +85,8 @@ fn test_create_bucket() {
context,
"test-fake".to_string(),
"test-fake".to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap(),
TEST_REGION,
BucketDeleteStrategy::HardDelete,
);
@@ -116,8 +116,8 @@ fn test_recreate_bucket() {
context,
"test-fake".to_string(),
"test-fake".to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap(),
TEST_REGION,
BucketDeleteStrategy::HardDelete,
);
@@ -154,8 +154,8 @@ fn test_put_file() {
context,
"test-fake".to_string(),
"test-fake".to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap(),
TEST_REGION,
BucketDeleteStrategy::HardDelete,
);
@@ -200,8 +200,8 @@ fn test_get_file() {
context,
"test-fake".to_string(),
"test-fake".to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap().to_string(),
secrets.DIGITAL_OCEAN_SPACES_ACCESS_ID.unwrap(),
secrets.DIGITAL_OCEAN_SPACES_SECRET_ID.unwrap(),
TEST_REGION,
BucketDeleteStrategy::HardDelete,
);

View File

@@ -28,7 +28,7 @@ fn create_upgrade_and_destroy_doks_cluster_with_env_in_ams_3() {
);
let environment = test_utilities::common::working_minimal_environment(&context, cluster_domain.as_str());
let env_action = environment.clone();
let env_action = environment;
engine_run_test(|| {
cluster_test(

View File

@@ -80,7 +80,7 @@ fn deploy_an_environment_with_3_databases_and_3_apps() {
warn!("cannot clean environments, error: {:?}", e);
}
return test_name.to_string();
test_name.to_string()
})
}
@@ -141,7 +141,7 @@ fn deploy_an_environment_with_db_and_pause_it() {
context.clone(),
ProviderKind::Scw,
environment.clone(),
app_name.clone().as_str(),
app_name.as_str(),
secrets.clone(),
);
assert_eq!(ret.is_ok(), true);
@@ -152,11 +152,11 @@ fn deploy_an_environment_with_db_and_pause_it() {
assert!(matches!(result, TransactionResult::Ok));
// delete images created during test from registries
if let Err(e) = clean_environments(&context, vec![environment], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
return test_name.to_string();
test_name.to_string()
})
}
@@ -231,7 +231,7 @@ fn postgresql_deploy_a_working_development_environment_with_all_options() {
warn!("cannot clean environments, error: {:?}", e);
}
return test_name.to_string();
test_name.to_string()
})
}
@@ -386,7 +386,7 @@ fn postgresql_deploy_a_working_environment_and_redeploy() {
warn!("cannot clean environments, error: {:?}", e);
}
return test_name.to_string();
test_name.to_string()
})
}

View File

@@ -71,7 +71,7 @@ fn scaleway_kapsule_deploy_a_working_environment_with_no_router() {
environment_for_delete.delete_environment(&env_action_for_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -134,7 +134,7 @@ fn scaleway_kapsule_deploy_a_not_working_environment_with_no_router() {
TransactionResult::Ok | TransactionResult::UnrecoverableError(_, _)
));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -229,7 +229,7 @@ fn scaleway_kapsule_deploy_a_working_environment_and_pause() {
let result = environment.delete_environment(&env_action, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -306,7 +306,7 @@ fn scaleway_kapsule_build_with_buildpacks_and_deploy_a_working_environment() {
environment_for_delete.delete_environment(&env_action_for_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -363,7 +363,7 @@ fn scaleway_kapsule_deploy_a_working_environment_with_domain() {
let result = environment_delete.delete_environment(&env_action_for_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -446,7 +446,7 @@ fn scaleway_kapsule_deploy_a_working_environment_with_storage() {
let result = environment_delete.delete_environment(&env_action_delete, logger, &engine_config_for_deletion);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -526,20 +526,14 @@ fn deploy_a_working_environment_and_pause_it() {
let result = environment.deploy_environment(&ea, logger.clone(), &engine_config_resume);
assert!(matches!(result, TransactionResult::Ok));
let ret = get_pods(
context.clone(),
Kind::Scw,
environment.clone(),
selector.as_str(),
secrets.clone(),
);
let ret = get_pods(context, Kind::Scw, environment.clone(), selector.as_str(), secrets);
assert_eq!(ret.is_ok(), true);
assert_eq!(ret.unwrap().items.is_empty(), false);
// Cleanup
let result = environment.delete_environment(&ea, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
return test_name.to_string();
test_name.to_string()
})
}
@@ -577,7 +571,6 @@ fn scaleway_kapsule_redeploy_same_app() {
let mut environment = test_utilities::common::working_minimal_environment(
&context,
secrets
.clone()
.DEFAULT_TEST_DOMAIN
.as_ref()
.expect("DEFAULT_TEST_DOMAIN is not set in secrets")
@@ -627,7 +620,7 @@ fn scaleway_kapsule_redeploy_same_app() {
context.clone(),
Kind::Scw,
environment_check1,
app_name.clone().as_str(),
app_name.as_str(),
secrets.clone(),
);
@@ -648,7 +641,7 @@ fn scaleway_kapsule_redeploy_same_app() {
let result = environment_delete.delete_environment(&env_action_delete, logger, &engine_config_for_deletion);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -731,7 +724,7 @@ fn scaleway_kapsule_deploy_a_not_working_environment_and_then_working_environmen
let result = environment_for_delete.delete_environment(&env_action_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -843,7 +836,7 @@ fn scaleway_kapsule_deploy_ok_fail_fail_ok_environment() {
let result = delete_env.delete_environment(&env_action_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -901,7 +894,7 @@ fn scaleway_kapsule_deploy_a_non_working_environment_with_no_failover() {
let result = delete_env.delete_environment(&env_action_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}
@@ -964,7 +957,7 @@ fn scaleway_kapsule_deploy_a_working_environment_with_sticky_session() {
environment_for_delete.delete_environment(&env_action_for_delete, logger, &engine_config_for_delete);
assert!(matches!(result, TransactionResult::Ok));
if let Err(e) = clean_environments(&context, vec![environment.clone()], secrets.clone(), SCW_TEST_ZONE) {
if let Err(e) = clean_environments(&context, vec![environment], secrets, SCW_TEST_ZONE) {
warn!("cannot clean environments, error: {:?}", e);
}

View File

@@ -26,7 +26,7 @@ fn create_and_destroy_kapsule_cluster_with_env_in_par_2() {
);
let environment = test_utilities::common::working_minimal_environment(&context, cluster_domain.as_str());
let env_action = environment.clone();
let env_action = environment;
engine_run_test(|| {
cluster_test(