diff --git a/awx/ui/static/js/controllers/JobDetail.js b/awx/ui/static/js/controllers/JobDetail.js
index d86883cd5b..5ca051fd3d 100644
--- a/awx/ui/static/js/controllers/JobDetail.js
+++ b/awx/ui/static/js/controllers/JobDetail.js
@@ -386,6 +386,10 @@ function JobDetailController ($location, $rootScope, $scope, $compile, $routePar
// this is not the first task
play.tasks[event.id].hostCount = play.tasks[play.firstTask].hostCount;
}
+ if (play.tasks[event.id].hostCount === 0) {
+ play.tasks[event.id].status_text = 'No matching hosts';
+ play.tasks[event.id].status_tip = "Event ID: " + event.id + "
Status: No matching hosts";
+ }
play.taskCount++;
SetTaskStyles({
task: play.tasks[event.id]
@@ -491,11 +495,17 @@ function JobDetailController ($location, $rootScope, $scope, $compile, $routePar
scope.jobData.plays[event.id].hostCount = ok + changed + failed + skipped;
- if (scope.jobData.plays[event.id].hostCount > 0 || event.unreachable_count > 0) {
+ if (scope.jobData.plays[event.id].hostCount > 0 || event.unreachable_count > 0 || scope.job_status.status === 'successful' ||
+ scope.job_status.status === 'failed' || scope.job_status.status === 'error' || scope.job_status.status === 'canceled') {
// force the play to be on the 'active' list
scope.jobData.plays[event.id].taskCount = 1;
}
+ if (scope.jobData.plays[event.id].hostCount === 0 && event.unreachable_count === 0) {
+ scope.jobData.plays[event.id].status_text = 'No matching hosts';
+ scope.jobData.plays[event.id].status_tip = "Event ID: " + event.id + "
Status: No matching hosts";
+ }
+
scope.host_summary.ok += ok;
scope.host_summary.changed += changed;
scope.host_summary.unreachable += (event.unreachable_count) ? event.unreachable_count : 0;
diff --git a/awx/ui/static/js/helpers/JobDetail.js b/awx/ui/static/js/helpers/JobDetail.js
index f995abfbf0..3c117dcf1d 100644
--- a/awx/ui/static/js/helpers/JobDetail.js
+++ b/awx/ui/static/js/helpers/JobDetail.js
@@ -104,7 +104,7 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge
UpdatePlayStatus({
scope: scope,
play_id: event.parent,
- failed: true,
+ failed: false,
changed: false,
modified: event.modified,
no_hosts: true
@@ -384,22 +384,21 @@ function($rootScope, $log, UpdatePlayStatus, UpdateHostStatus, AddHostResult, Ge
play;
if (scope.jobData.plays[id] !== undefined) {
- play = scope.jobData.plays[scope.activePlay];
+ play = scope.jobData.plays[id];
if (failed) {
play.status = 'failed';
play.status_text = 'Failed';
}
else if (play.status !== 'changed' && play.status !== 'failed') {
// once the status becomes 'changed' or 'failed' don't modify it
+ play.status = (changed) ? 'changed' : (failed) ? 'failed' : 'successful';
if (no_hosts) {
- play.status = 'no-matching-hosts';
play.status_text = 'No matching hosts';
- }
- else {
- play.status = (changed) ? 'changed' : (failed) ? 'failed' : 'successful';
+ } else {
play.status_text = (changed) ? 'Changed' : (failed) ? 'Failed' : 'OK';
}
}
+ play.taskCount = (play.taskCount > 0) ? play.taskCount : 1; // set to a minimum of 1 to force drawing
play.status_tip = "Event ID: " + play.id + "
Status: " + play.status_text;
play.finished = modified;
play.elapsed = GetElapsed({