mirror of
https://github.com/jlengrand/engine.git
synced 2026-03-10 08:11:21 +00:00
Linter (#663)
This commit is contained in:
committed by
GitHub
parent
804fb1b990
commit
4653964798
@@ -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(),
|
||||
);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(())
|
||||
|
||||
@@ -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)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
|
||||
@@ -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(),
|
||||
);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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)),
|
||||
|
||||
@@ -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)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
|
||||
@@ -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",
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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),
|
||||
)),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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(),
|
||||
);
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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();
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(())
|
||||
|
||||
@@ -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)))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
|
||||
@@ -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());
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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(®istry.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),
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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,
|
||||
),
|
||||
}),
|
||||
};
|
||||
|
||||
@@ -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,
|
||||
})
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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,
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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()),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
@@ -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)),
|
||||
},
|
||||
],
|
||||
},
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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,
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
@@ -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),
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -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));
|
||||
|
||||
@@ -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(),
|
||||
);
|
||||
|
||||
@@ -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(®ion).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(),
|
||||
®ion,
|
||||
region,
|
||||
Some(aws_zones),
|
||||
ClusterTestType::Classic,
|
||||
AWS_KUBERNETES_MAJOR_VERSION,
|
||||
|
||||
@@ -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()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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,
|
||||
);
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user