(&self)
| 269 | } |
| 270 | |
| 271 | fn run(&self) { |
| 272 | if self.request.is_self_managed() { |
| 273 | engine_task::enable_log_file_writer(&self.info_context(), &self.log_file_writer); |
| 274 | } |
| 275 | |
| 276 | let _span = self.span.enter(); |
| 277 | info!("blueprint task {} started", self.id()); |
| 278 | |
| 279 | self.logger.log(EngineEvent::Info( |
| 280 | self.get_event_details(BlueprintStep::Start), |
| 281 | EventMessage::new("Qovery Engine starts to execute the blueprint deployment".to_string(), None), |
| 282 | )); |
| 283 | |
| 284 | let guard = scopeguard::guard((), |_| { |
| 285 | hack::remove_gke_gcloud_auth_plugin_cache(); |
| 286 | self.logger.log(EngineEvent::Info( |
| 287 | self.get_event_details(BlueprintStep::Terminated), |
| 288 | EventMessage::new("Qovery Engine has terminated the blueprint deployment".to_string(), None), |
| 289 | )); |
| 290 | let Some(is_terminated_tx) = self.is_terminated.0.write().unwrap().take() else { |
| 291 | return; |
| 292 | }; |
| 293 | let _ = is_terminated_tx.send(()); |
| 294 | }); |
| 295 | |
| 296 | // 1. Create infrastructure context |
| 297 | let infra_context = match self.infrastructure_context() { |
| 298 | Ok(infra_ctx) => infra_ctx, |
| 299 | Err(err) => { |
| 300 | self.logger.log(EngineEvent::Error(*err, None)); |
| 301 | return; |
| 302 | } |
| 303 | }; |
| 304 | |
| 305 | let metrics_registry = Arc::new(infra_context.metrics_registry().clone_dyn()); |
| 306 | let record = |
| 307 | metrics_registry.start_record(self.request.target_environment.long_id, StepLabel::Service, StepName::Total); |
| 308 | |
| 309 | let mut target_env = self.request.target_environment.clone(); |
| 310 | |
| 311 | let deployment_ret = (|| -> Result<BlueprintTaskOutcome, Box<EngineError>> { |
| 312 | // 2. Clone blueprint repo |
| 313 | let (blueprint_dir, blueprint_info) = self.clone_blueprint_repo(&infra_context)?; |
| 314 | |
| 315 | // 3. Parse QBM manifest |
| 316 | let manifest = self.parse_manifest(&blueprint_dir)?; |
| 317 | |
| 318 | // 4. Inject context variables |
| 319 | inject_context_variables( |
| 320 | &mut target_env, |
| 321 | &self.request.cloud_provider.kind, |
| 322 | &self.request.kubernetes.region, |
| 323 | &self.request.kubernetes.name, |
| 324 | ); |
| 325 | |
| 326 | // 5. Resolve spec |
| 327 | let resolved_spec = ResolvedBlueprintSpec::resolve(&manifest, &target_env.spec_overrides).map_err(|e| { |
| 328 | Box::new(EngineError::new_blueprint_error( |
nothing calls this directly
no test coverage detected