diff --git a/awxkit/awxkit/cli/custom.py b/awxkit/awxkit/cli/custom.py index b398b68a9a..fb45043632 100644 --- a/awxkit/awxkit/cli/custom.py +++ b/awxkit/awxkit/cli/custom.py @@ -552,3 +552,41 @@ class SettingsModify(CustomAction): except json.decoder.JSONDecodeError: return False return True + + +class HasMonitor(object): + + action = 'monitor' + + def add_arguments(self, parser, resource_options_parser): + from .options import pk_or_name + parser.choices[self.action].add_argument( + 'id', + type=functools.partial( + pk_or_name, None, self.resource, page=self.page + ), + help='' + ) + + def perform(self, **kwargs): + response = self.page.get() + mon = monitor_workflow if response.type == 'workflow_job' else monitor + if not response.failed and response.status != 'successful': + status = mon( + response, + self.page.connection.session, + ) + if status: + response.json['status'] = status + if status in ('failed', 'error'): + setattr(response, 'rc', 1) + else: + return 'Unable to monitor finished job' + + +class JobMonitor(HasMonitor, CustomAction): + resource = 'jobs' + + +class WorkflowJobMonitor(HasMonitor, CustomAction): + resource = 'workflow_jobs'