diff --git a/src/app/VMClaim.ts b/src/app/VMClaim.ts
index 2659ea85..fd91d735 100644
--- a/src/app/VMClaim.ts
+++ b/src/app/VMClaim.ts
@@ -14,4 +14,5 @@ export class VMClaim {
static_bind_attempts: number;
dynamic_bind_request_id: string;
tainted: boolean;
+ error: boolean;
}
diff --git a/src/app/scenario/scenario.component.html b/src/app/scenario/scenario.component.html
index dd139472..fe7925dc 100644
--- a/src/app/scenario/scenario.component.html
+++ b/src/app/scenario/scenario.component.html
@@ -54,7 +54,11 @@
@for (vmc of vmclaims; track vmc) {
-
+
}
}
diff --git a/src/app/scenario/scenario.component.ts b/src/app/scenario/scenario.component.ts
index 4a82b88d..08dd00cc 100644
--- a/src/app/scenario/scenario.component.ts
+++ b/src/app/scenario/scenario.component.ts
@@ -1,6 +1,6 @@
import { Component, OnInit, Input, EventEmitter, Output } from '@angular/core';
import { Scenario } from './Scenario';
-import { catchError, concatMap, delay } from 'rxjs/operators';
+import { catchError, concatMap, delay, take } from 'rxjs/operators';
import { Session } from '../Session';
import { from, of } from 'rxjs';
import { ScenarioService } from '../services/scenario.service';
@@ -46,13 +46,18 @@ export class ScenarioComponent implements OnInit {
vmc.ready = true;
}
+ onError() {
+ this.error = true;
+ this.ssService.finish(this.session.id).pipe(take(1)).subscribe();
+ }
+
get isReady() {
return this.vmclaims.length > 0 && this.vmclaims.every((v) => v.ready);
}
get isDynamicallyBinding() {
const dynVmcs = this.vmclaims.filter((v) => v.bind_mode === 'dynamic');
- return dynVmcs.length > 0 && dynVmcs.every((v) => !v.ready);
+ return dynVmcs.length > 0 && dynVmcs.every((v) => !v.ready) && !this.error;
}
close() {
diff --git a/src/app/scenario/vmclaim.component.ts b/src/app/scenario/vmclaim.component.ts
index bd1611ea..8741b91c 100644
--- a/src/app/scenario/vmclaim.component.ts
+++ b/src/app/scenario/vmclaim.component.ts
@@ -26,6 +26,9 @@ export class VMClaimComponent implements OnChanges {
@Output()
ready: EventEmitter = new EventEmitter(false);
+ @Output()
+ provisioningError: EventEmitter = new EventEmitter(false);
+
private vms: Map = new Map();
constructor(
@@ -48,10 +51,11 @@ export class VMClaimComponent implements OnChanges {
// On every tick of the timer, call vmClaimService.get()
switchMap(() => this.vmClaimService.get(this.vmclaim.id)),
// Continue the Observable chain if vmclaim is not ready
- takeWhile((s: VMClaim) => !s.ready, true),
+ takeWhile((s: VMClaim) => !s.ready && !s.error, true),
// Convert object to Map and emit the VMs if vmclaim is ready
concatMap((s: VMClaim) => {
this.vmclaim = s;
+ if (s.error) this.provisioningError.emit(true);
if (!s.ready) return [];
this.ready.emit(s.id);
return s.vm.values();