| 514 | } |
| 515 | |
| 516 | fn run(&self) { |
| 517 | if self.request.is_self_managed() { |
| 518 | engine_task::enable_log_file_writer(&self.info_context(), &self.log_file_writer); |
| 519 | } |
| 520 | |
| 521 | let _span = self.span.enter(); |
| 522 | info!("environment task {} started", self.id()); |
| 523 | |
| 524 | self.logger.log(EngineEvent::Info( |
| 525 | self.get_event_details(EnvironmentStep::Start), |
| 526 | EventMessage::new("🚀 Qovery Engine starts to execute the deployment".to_string(), None), |
| 527 | )); |
| 528 | let guard = scopeguard::guard((), |_| { |
| 529 | hack::remove_gke_gcloud_auth_plugin_cache(); |
| 530 | self.logger.log(EngineEvent::Info( |
| 531 | self.get_event_details(EnvironmentStep::Terminated), |
| 532 | EventMessage::new("Qovery Engine has terminated the deployment".to_string(), None), |
| 533 | )); |
| 534 | let Some(is_terminated_tx) = self.is_terminated.0.write().unwrap().take() else { |
| 535 | return; |
| 536 | }; |
| 537 | let _ = is_terminated_tx.send(()); |
| 538 | }); |
| 539 | |
| 540 | let infra_context = match self.infrastructure_context() { |
| 541 | Ok(infra_ctx) => infra_ctx, |
| 542 | Err(err) => { |
| 543 | self.logger.log(EngineEvent::Error(*err, None)); |
| 544 | return; |
| 545 | } |
| 546 | }; |
| 547 | let env_step = service::Action::from(self.request.target_environment.action).into(); |
| 548 | let event_details = self.get_event_details(env_step); |
| 549 | let environment = match self.request.target_environment.to_environment_domain( |
| 550 | infra_context.context(), |
| 551 | infra_context.cloud_provider(), |
| 552 | infra_context.container_registry(), |
| 553 | infra_context.kubernetes(), |
| 554 | ) { |
| 555 | Ok(env) => env, |
| 556 | Err(err) => { |
| 557 | self.logger.log(EngineEvent::Error( |
| 558 | EngineError::new_invalid_engine_payload(event_details, err.to_string().as_str(), None), |
| 559 | None, |
| 560 | )); |
| 561 | return; |
| 562 | } |
| 563 | }; |
| 564 | |
| 565 | // run the actions |
| 566 | let metrics_registry = Arc::new(infra_context.metrics_registry().clone_dyn()); |
| 567 | let service_ids = std::iter::empty() |
| 568 | .chain(environment.applications.iter().map(|x| x.as_service().long_id())) |
| 569 | .chain(environment.containers.iter().map(|x| x.as_service().long_id())) |
| 570 | .chain(environment.routers.iter().map(|x| x.as_service().long_id())) |
| 571 | .chain(environment.databases.iter().map(|x| x.as_service().long_id())) |
| 572 | .chain(environment.jobs.iter().map(|x| x.as_service().long_id())) |
| 573 | .chain(environment.helm_charts.iter().map(|x| x.as_service().long_id())) |