From eea41e34014e5a0aa22af5ce3b69bc74fdb44a0d Mon Sep 17 00:00:00 2001 From: Chris Houseknecht Date: Sat, 22 Mar 2014 17:49:22 -0400 Subject: [PATCH] Continuing work on new Jobs page. Increased pop-over width. Added a footer explaning how to close. Added close-on-click behavior in addition to esc key. --- awx/ui/static/js/controllers/Jobs.js | 108 +++- awx/ui/static/js/helpers/Jobs.js | 21 +- awx/ui/static/js/lists/CompletedJobs.js | 83 ++- awx/ui/static/js/lists/QueuedJobs.js | 78 +-- awx/ui/static/js/lists/RunningJobs.js | 59 +- awx/ui/static/less/ansible-ui.less | 21 +- awx/ui/static/lib/ansible/Utilities.js | 24 +- awx/ui/static/lib/ansible/directives.js | 8 +- .../static/lib/ansible/generator-helpers.js | 7 +- .../sample/data/jobs/completed/data.json | 604 +----------------- .../static/sample/data/jobs/queued/data.json | 15 +- .../static/sample/data/jobs/running/data.json | 241 +------ 12 files changed, 277 insertions(+), 992 deletions(-) diff --git a/awx/ui/static/js/controllers/Jobs.js b/awx/ui/static/js/controllers/Jobs.js index b99da4d93f..965f0f1d12 100644 --- a/awx/ui/static/js/controllers/Jobs.js +++ b/awx/ui/static/js/controllers/Jobs.js @@ -10,11 +10,12 @@ 'use strict'; -function JobsList($scope, $compile, ClearScope, Breadcrumbs, LoadScope, RunningJobsList, CompletedJobsList, QueuedJobsList) { +function JobsList($scope, $compile, ClearScope, Breadcrumbs, LoadScope, RunningJobsList, CompletedJobsList, QueuedJobsList, + GetChoices, GetBasePath, Wait) { ClearScope(); - var e, completed_scope, running_scope, queued_scope; + var e, completed_scope, running_scope, queued_scope, choicesCount = 0, listsCount = 0; // schedule_scope; // Add breadcrumbs @@ -22,33 +23,96 @@ function JobsList($scope, $compile, ClearScope, Breadcrumbs, LoadScope, RunningJ e.html(Breadcrumbs({ list: { editTitle: 'Jobs' } , mode: 'edit' })); $compile(e)($scope); - completed_scope = $scope.$new(); - LoadScope({ - scope: completed_scope, - list: CompletedJobsList, - id: 'completed-jobs', - url: '/static/sample/data/jobs/completed/data.json' + // After all the lists are loaded + if ($scope.removeListLoaded) { + $scope.removeListLoaded(); + } + $scope.removeListLoaded = $scope.$on('listLoaded', function() { + listsCount++; + if (listsCount === 3) { + Wait('stop'); + } + }); + + // After all choices are ready, load up the lists and populate the page + if ($scope.removeBuildJobsList) { + $scope.removeBuildJobsList(); + } + $scope.removeBuildJobsList = $scope.$on('buildJobsList', function() { + completed_scope = $scope.$new(); + LoadScope({ + parent_scope: $scope, + scope: completed_scope, + list: CompletedJobsList, + id: 'completed-jobs', + url: '/static/sample/data/jobs/completed/data.json' + }); + running_scope = $scope.$new(); + LoadScope({ + parent_scope: $scope, + scope: running_scope, + list: RunningJobsList, + id: 'active-jobs', + url: '/static/sample/data/jobs/running/data.json' + }); + queued_scope = $scope.$new(); + LoadScope({ + parent_scope: $scope, + scope: queued_scope, + list: QueuedJobsList, + id: 'queued-jobs', + url: '/static/sample/data/jobs/queued/data.json' + }); }); - running_scope = $scope.$new(); - LoadScope({ - scope: running_scope, - list: RunningJobsList, - id: 'active-jobs', - url: '/static/sample/data/jobs/running/data.json' + if ($scope.removeChoicesReady) { + $scope.removeChoicesReady(); + } + $scope.removeChoicesReady = $scope.$on('choicesReady', function() { + choicesCount++; + if (choicesCount === 2) { + $scope.$emit('buildJobsList'); + } }); - queued_scope = $scope.$new(); - LoadScope({ - scope: queued_scope, - list: QueuedJobsList, - id: 'queued-jobs', - url: '/static/sample/data/jobs/queued/data.json' - }); + Wait('start'); + GetChoices({ + scope: $scope, + url: GetBasePath('jobs'), + field: 'status', + variable: 'status_choices', + callback: 'choicesReady' + }); + + /* Use for types later + GetChoices({ + scope: $scope, + url: GetBasePath('jobs'), + field: 'type', + variable: 'types', + callback: '' + }); + */ + + $scope.type_choices = [{ + label: 'Inventory sync', + value: 'inventory_sync', + name: 'inventory_sync' + },{ + label: 'Project sync', + value: 'scm_sync', + name: 'scm_sync' + },{ + label: 'Playbook run', + value: 'playbook_run', + name: 'playbook_run' + }]; + $scope.$emit('choicesReady'); } -JobsList.$inject = ['$scope', '$compile', 'ClearScope', 'Breadcrumbs', 'LoadScope', 'RunningJobsList', 'CompletedJobsList', 'QueuedJobsList']; +JobsList.$inject = ['$scope', '$compile', 'ClearScope', 'Breadcrumbs', 'LoadScope', 'RunningJobsList', 'CompletedJobsList', + 'QueuedJobsList', 'GetChoices', 'GetBasePath', 'Wait']; diff --git a/awx/ui/static/js/helpers/Jobs.js b/awx/ui/static/js/helpers/Jobs.js index d353f4ebfd..d0c75b3183 100644 --- a/awx/ui/static/js/helpers/Jobs.js +++ b/awx/ui/static/js/helpers/Jobs.js @@ -165,10 +165,11 @@ angular.module('JobsHelper', ['Utilities', 'FormGenerator', 'JobSummaryDefinitio * Called from JobsList controller to load each section or list on the page * */ -.factory('LoadScope', ['SearchInit', 'PaginateInit', 'GenerateList', 'PageRangeSetup', 'Wait', 'ProcessErrors', 'Rest', - function(SearchInit, PaginateInit, GenerateList, PageRangeSetup, Wait, ProcessErrors, Rest) { +.factory('LoadScope', ['SearchInit', 'PaginateInit', 'GenerateList', 'PageRangeSetup', 'ProcessErrors', 'Rest', + function(SearchInit, PaginateInit, GenerateList, PageRangeSetup, ProcessErrors, Rest) { return function(params) { - var scope = params.scope, + var parent_scope = params.parent_scope, + scope = params.scope, list = params.list, id = params.id, url = params.url; @@ -218,7 +219,19 @@ angular.module('JobsHelper', ['Utilities', 'FormGenerator', 'JobSummaryDefinitio } scope[list.name] = data.results; window.scrollTo(0, 0); - Wait('stop'); + + if (list.fields.type) { + scope[list.name].forEach(function(item, item_idx) { + parent_scope.type_choices.every(function(choice) { + if (choice.value === item.type) { + scope[list.name][item_idx].type = choice.label; + return false; + } + return true; + }); + }); + } + parent_scope.$emit('listLoaded'); }); Rest.setUrl(url); diff --git a/awx/ui/static/js/lists/CompletedJobs.js b/awx/ui/static/js/lists/CompletedJobs.js index caf2082501..c1655c23fb 100644 --- a/awx/ui/static/js/lists/CompletedJobs.js +++ b/awx/ui/static/js/lists/CompletedJobs.js @@ -21,31 +21,28 @@ angular.module('CompletedJobsDefinition', []) fields: { id: { label: 'Job ID', + linkTo: '/#/jobs/{{ completed_job.id }}', key: true, desc: true, searchType: 'int', columnClass: 'col-lg-1 col-md-2 col-sm-2 col-xs-2' }, - inventory: { - label: 'Inventory ID', - searchType: 'int', - searchOnly: true - }, - created: { - label: 'Create On', + modified: { + label: 'Completed On', link: false, searchable: false, filter: "date:'MM/dd/yy HH:mm:ss'", - columnClass: "hidden-sm hidden-xs" + columnClass: "col-md-2 hidden-xs" }, - job_template: { - label: 'Job Template', - ngBind: 'completed_job.summary_fields.job_template.name', - //ngHref: "{{ '/#/job_templates/?name=' + completed_job.summary_fields.job_template.name }}", - ngHref:"{{ '/#/job_templates/' + completed_job.job_template }}", - sourceModel: 'job_template', - sourceField: 'name', - columnClass: 'col-lg-4 col-md-4 col-sm-4 col-xs-3' + type: { + label: 'Type', + link: false, + columnClass: "col-md-2 hidden-sm hidden-xs" + }, + name: { + label: 'Name', + columnClass: 'col-sm-4 col-xs-5', + ngHref: 'nameHref' }, failed: { label: 'Job failed?', @@ -54,29 +51,6 @@ angular.module('CompletedJobsDefinition', []) searchValue: 'true', searchOnly: true, nosort: true - }, - status: { - label: 'Status', - "class": 'job-{{ completed_job.status }}', - searchType: 'select', - linkTo: "{{ completed_job.statusLinkTo }}", - searchOptions: [ - { name: "new", value: "new" }, - { name: "waiting", value: "waiting" }, - { name: "pending", value: "pending" }, - { name: "running", value: "running" }, - { name: "successful", value: "successful" }, - { name: "error", value: "error" }, - { name: "failed", value: "failed" }, - { name: "canceled", value: "canceled" } - ], - badgeIcon: 'fa icon-job-{{ completed_job.status }}', - badgePlacement: 'left', - badgeToolTip: "{{ completed_job.statusBadgeToolTip }}", - badgeTipPlacement: 'top', - badgeNgHref: "{{ completed_job.statusLinkTo }}", - awToolTip: "{{ completed_job.statusBadgeToolTip }}", - dataPlacement: 'top' } }, @@ -89,16 +63,40 @@ angular.module('CompletedJobsDefinition', []) }, fieldActions: { + status: { + mode: 'all', + //"class": 'job-{{ completed_job.status }}', + //searchType: 'select', + //linkTo: "{{ completed_job.statusLinkTo }}", + //searchOptions: [ + // { name: "new", value: "new" }, + // { name: "waiting", value: "waiting" }, + // { name: "pending", value: "pending" }, + // { name: "running", value: "running" }, + // { name: "successful", value: "successful" }, + // { name: "error", value: "error" }, + // { name: "failed", value: "failed" }, + // { name: "canceled", value: "canceled" } + //], + iconClass: 'fa icon-job-{{ completed_job.status }}', + awToolTip: "{{ completed_job.statusToolTip }}", + dataPlacement: 'top' + //badgeIcon: 'fa icon-job-{{ completed_job.status }}', + //badgePlacement: 'left', + //badgeToolTip: "{{ completed_job.statusBadgeToolTip }}", + //badgeTipPlacement: 'top', + //badgeNgHref: "{{ completed_job.statusLinkTo }}", + //awToolTip: "{{ completed_job.statusBadgeToolTip }}", + //dataPlacement: 'top' + }, submit: { - label: 'Relaunch', icon: 'icon-rocket', mode: 'all', ngClick: 'submitJob(completed_job.id, completed_job.summary_fields.job_template.name)', - awToolTip: 'Start the job', + awToolTip: 'Relaunch the job', dataPlacement: 'top' }, cancel: { - label: 'Stop', mode: 'all', ngClick: 'deleteJob(completed_job.id)', awToolTip: 'Cancel a running or pending job', @@ -106,7 +104,6 @@ angular.module('CompletedJobsDefinition', []) dataPlacement: 'top' }, "delete": { - label: 'Delete', mode: 'all', ngClick: 'deleteJob(completed_job.id)', awToolTip: 'Delete the job', diff --git a/awx/ui/static/js/lists/QueuedJobs.js b/awx/ui/static/js/lists/QueuedJobs.js index 791ea0adfd..aec55998ec 100644 --- a/awx/ui/static/js/lists/QueuedJobs.js +++ b/awx/ui/static/js/lists/QueuedJobs.js @@ -32,20 +32,21 @@ angular.module('QueuedJobsDefinition', []) searchOnly: true }, created: { - label: 'Create On', + label: 'Created On', link: false, searchable: false, filter: "date:'MM/dd/yy HH:mm:ss'", - columnClass: 'hidden-sm hidden-xs' + columnClass: 'col-md-2 hidden-xs' }, - job_template: { - label: 'Job Template', - ngBind: 'queued_job.summary_fields.job_template.name', - //ngHref: "{{ '/#/job_templates/?name=' + queued_job.summary_fields.job_template.name }}", - ngHref:"{{ '/#/job_templates/' + queued_job.job_template }}", - sourceModel: 'job_template', - sourceField: 'name', - columnClass: 'col-lg-4 col-md-4 col-sm-4 col-xs-3' + type: { + label: 'Type', + link: false, + columnClass: "col-md-2 hidden-sm hidden-xs" + }, + name: { + label: 'Name', + columnClass: 'col-sm-4 col-xs-5', + ngHref: 'nameHref' }, failed: { label: 'Job failed?', @@ -54,29 +55,6 @@ angular.module('QueuedJobsDefinition', []) searchValue: 'true', searchOnly: true, nosort: true - }, - status: { - label: 'Status', - "class": 'job-{{ queued_job.status }}', - searchType: 'select', - linkTo: "{{ queued_job.statusLinkTo }}", - searchOptions: [ - { name: "new", value: "new" }, - { name: "waiting", value: "waiting" }, - { name: "pending", value: "pending" }, - { name: "running", value: "running" }, - { name: "successful", value: "successful" }, - { name: "error", value: "error" }, - { name: "failed", value: "failed" }, - { name: "canceled", value: "canceled" } - ], - badgeIcon: 'fa icon-job-{{ queued_job.status }}', - badgePlacement: 'left', - badgeToolTip: "{{ queued_job.statusBadgeToolTip }}", - badgeTipPlacement: 'top', - badgeNgHref: "{{ queued_job.statusLinkTo }}", - awToolTip: "{{ queued_job.statusBadgeToolTip }}", - dataPlacement: 'top' } }, @@ -89,42 +67,24 @@ angular.module('QueuedJobsDefinition', []) }, fieldActions: { + status: { + mode: 'all', + iconClass: 'fa icon-job-{{ queued_job.status }}', + awToolTip: "{{ queued_job.statusToolTip }}", + dataPlacement: 'top' + }, submit: { - label: 'Relaunch', icon: 'icon-rocket', mode: 'all', ngClick: 'submitJob(queued_job.id, queued_job.summary_fields.job_template.name)', - awToolTip: 'Start the job', + awToolTip: 'Launch another instance of the job', dataPlacement: 'top' }, cancel: { - label: 'Stop', mode: 'all', ngClick: 'deleteJob(queued_job.id)', - awToolTip: 'Cancel a running or pending job', - ngShow: "queued_job.status == 'pending' || queued_job.status == 'running' || queued_job.status == 'waiting'", + awToolTip: 'Cancel the job', dataPlacement: 'top' - }, - "delete": { - label: 'Delete', - mode: 'all', - ngClick: 'deleteJob(queued_job.id)', - awToolTip: 'Delete the job', - ngShow: "queued_job.status != 'pending' && queued_job.status != 'running' && queued_job.status != 'waiting'", - dataPlacement: 'top' - }, - dropdown: { - type: 'DropDown', - label: 'View', - icon: 'fa-search-plus', - 'class': 'btn-default btn-xs', - options: [ - { ngClick: 'editJob(queued_job.id, queued_job.summary_fields.job_template.name)', label: 'Status' }, - { ngClick: 'viewEvents(queued_job.id, queued_job.summary_fields.job_template.name)', label: 'Events', - ngHide: "queued_job.status == 'new'" }, - { ngClick: 'viewSummary(queued_job.id, queued_job.summary_fields.job_template.name)', label: 'Host Summary', - ngHide: "queued_job.status == 'new'" } - ] } } }); diff --git a/awx/ui/static/js/lists/RunningJobs.js b/awx/ui/static/js/lists/RunningJobs.js index ae251c727f..23bf6b4e87 100644 --- a/awx/ui/static/js/lists/RunningJobs.js +++ b/awx/ui/static/js/lists/RunningJobs.js @@ -31,21 +31,22 @@ angular.module('RunningJobsDefinition', []) searchType: 'int', searchOnly: true }, - created: { - label: 'Create On', + modified: { + label: 'Last Updated', link: false, searchable: false, filter: "date:'MM/dd/yy HH:mm:ss'", - columnClass: 'hidden-sm hidden-xs' + columnClass: "col-md-2 hidden-xs" }, - job_template: { - label: 'Job Template', - ngBind: 'running_job.summary_fields.job_template.name', - //ngHref: "{{ '/#/job_templates/?name=' + running_job.summary_fields.job_template.name }}", - ngHref:"{{ '/#/job_templates/' + running_job.job_template }}", - sourceModel: 'job_template', - sourceField: 'name', - columnClass: 'col-lg-4 col-md-4 col-sm-4 col-xs-3' + type: { + label: 'Type', + link: false, + columnClass: "col-md-2 hidden-sm hidden-xs" + }, + name: { + label: 'Name', + columnClass: 'col-sm-4 col-xs-5', + ngHref: 'nameHref' }, failed: { label: 'Job failed?', @@ -54,29 +55,6 @@ angular.module('RunningJobsDefinition', []) searchValue: 'true', searchOnly: true, nosort: true - }, - status: { - label: 'Status', - "class": 'job-{{ running_job.status }}', - searchType: 'select', - linkTo: "{{ running_job.statusLinkTo }}", - searchOptions: [ - { name: "new", value: "new" }, - { name: "waiting", value: "waiting" }, - { name: "pending", value: "pending" }, - { name: "running", value: "running" }, - { name: "successful", value: "successful" }, - { name: "error", value: "error" }, - { name: "failed", value: "failed" }, - { name: "canceled", value: "canceled" } - ], - badgeIcon: 'fa icon-job-{{ running_job.status }}', - badgePlacement: 'left', - badgeToolTip: "{{ running_job.statusBadgeToolTip }}", - badgeTipPlacement: 'top', - badgeNgHref: "{{ running_job.statusLinkTo }}", - awToolTip: "{{ running_job.statusBadgeToolTip }}", - dataPlacement: 'top' } }, @@ -89,24 +67,27 @@ angular.module('RunningJobsDefinition', []) }, fieldActions: { + status: { + mode: 'all', + iconClass: 'fa icon-job-{{ running_job.status }}', + awToolTip: "{{ running_job.statusToolTip }}", + dataPlacement: 'top' + }, submit: { - label: 'Relaunch', icon: 'icon-rocket', mode: 'all', ngClick: 'submitJob(running_job.id, running_job.summary_fields.job_template.name)', - awToolTip: 'Start the job', + awToolTip: 'Launch another instance of the job', dataPlacement: 'top' }, cancel: { - label: 'Stop', mode: 'all', ngClick: 'deleteJob(running_job.id)', - awToolTip: 'Cancel a running or pending job', + awToolTip: 'Cancel the job', ngShow: "running_job.status == 'pending' || running_job.status == 'running' || running_job.status == 'waiting'", dataPlacement: 'top' }, "delete": { - label: 'Delete', mode: 'all', ngClick: 'deleteJob(running_job.id)', awToolTip: 'Delete the job', diff --git a/awx/ui/static/less/ansible-ui.less b/awx/ui/static/less/ansible-ui.less index 4cddf4c730..c74effc6c8 100644 --- a/awx/ui/static/less/ansible-ui.less +++ b/awx/ui/static/less/ansible-ui.less @@ -133,9 +133,6 @@ a:focus { a:hover { cursor: pointer; } - .cancel { - padding-right: 8px; - } .dropdown .caret { border-top-color: @blue; } @@ -211,8 +208,20 @@ textarea { } .popover { z-index: 2000; + max-width: 325px; + } + .popover-footer { + font-size: 12px; + margin-top: 5px; + margin-bottom: 5px; + text-align: right; + .key { + color: @white; + background-color: @grey; + padding: 0 1px 1px 1px; + border-radius: 3px; + } } - .tooltip { z-index: 2050; opacity: 1.0; @@ -1013,8 +1022,8 @@ input[type="checkbox"].checkbox-no-label { margin-bottom: 6px; color: @black; } - thead >tr >th, tbody >tr >td, .page-row { - font-size: 12.5px; + thead >tr >th, .page-row { + font-size: 12px; color: #666; } .pagination li a { diff --git a/awx/ui/static/lib/ansible/Utilities.js b/awx/ui/static/lib/ansible/Utilities.js index 0ec477bd9f..e606f7b079 100644 --- a/awx/ui/static/lib/ansible/Utilities.js +++ b/awx/ui/static/lib/ansible/Utilities.js @@ -557,6 +557,14 @@ angular.module('Utilities', ['RestServices', 'Utilities']) /* * Make an Options call to the API and retrieve dropdown options * + * GetChoices({ + * scope: Parent $scope + * url: API resource to access + * field: API element in the response object that contains the option list. + * variable: Scope variable that will receive the list. + * callback: Optional. Will issue scope.$emit(callback) on completion. + * choice_name: Optional. Used when list is found in a variable other than 'choices'. + * }) */ .factory('GetChoices', ['Rest', 'ProcessErrors', function (Rest, ProcessErrors) { @@ -565,8 +573,8 @@ angular.module('Utilities', ['RestServices', 'Utilities']) url = params.url, field = params.field, variable = params.variable, - callback = params.callback, // Optional. Provide if you want scop.$emit on completion. - choice_name = params.choice_name; // Optional. Used when data is in something other than 'choices' + callback = params.callback, + choice_name = params.choice_name; if (scope[variable]) { scope[variable].length = 0; @@ -577,16 +585,16 @@ angular.module('Utilities', ['RestServices', 'Utilities']) Rest.setUrl(url); Rest.options() .success(function (data) { - var choices, i; + var choices; choices = (choice_name) ? data.actions.GET[field][choice_name] : data.actions.GET[field].choices; // including 'name' property so list can be used by search - for (i = 0; i < choices.length; i++) { + choices.forEach(function(choice) { scope[variable].push({ - label: choices[i][1], - value: choices[i][0], - name: choices[i][1] + label: choice[1], + value: choice[0], + name: choice[1] }); - } + }); if (callback) { scope.$emit(callback); } diff --git a/awx/ui/static/lib/ansible/directives.js b/awx/ui/static/lib/ansible/directives.js index ba0d81e0b8..f474259068 100644 --- a/awx/ui/static/lib/ansible/directives.js +++ b/awx/ui/static/lib/ansible/directives.js @@ -290,9 +290,9 @@ angular.module('AWDirectives', ['RestServices', 'Utilities', 'AuthService', 'Job $(element).popover({ placement: placement, delay: 0, title: title, content: attrs.awPopOver, trigger: 'manual', html: true, container: container }); $(element).click(function() { - var me = $(this).attr('id'); + var self = $(this).attr('id'); $('.help-link, .help-link-white').each( function() { - if (me !== $(this).attr('id')) { + if (self !== $(this).attr('id')) { $(this).popover('hide'); } }); @@ -313,6 +313,10 @@ angular.module('AWDirectives', ['RestServices', 'Utilities', 'AuthService', 'Job $compile($(this))(scope); //make nested directives work! }); + $('.popover-content, .popover-title').click(function() { + $('#' + self).popover('hide'); + }); + }); $(document).bind('keydown', function(e) { diff --git a/awx/ui/static/lib/ansible/generator-helpers.js b/awx/ui/static/lib/ansible/generator-helpers.js index 99c460f0db..21eba90f9e 100644 --- a/awx/ui/static/lib/ansible/generator-helpers.js +++ b/awx/ui/static/lib/ansible/generator-helpers.js @@ -38,9 +38,10 @@ angular.module('GeneratorHelpers', ['GeneratorHelpers']) break; case 'awPopOver': // construct the entire help link - result = "esc or click to exit\' "; + result += (obj.dataPlacement) ? "data-placement=\"" + obj.dataPlacement + "\" " : ""; + result += (obj.dataContainer) ? "data-container=\"" + obj.dataContainer + "\" " : ""; + result += (obj.dataTitle) ? "data-title=\"" + obj.dataTitle + "\" " : ""; result += "class=\"help-link\" "; result += "> "; break; diff --git a/awx/ui/static/sample/data/jobs/completed/data.json b/awx/ui/static/sample/data/jobs/completed/data.json index b8b7696029..b06f03a364 100644 --- a/awx/ui/static/sample/data/jobs/completed/data.json +++ b/awx/ui/static/sample/data/jobs/completed/data.json @@ -1,5 +1,5 @@ { - "count": 15, + "count": 5, "next": "/blah/blah/blah", "previous": null, "results": [ @@ -31,7 +31,7 @@ "project": { "name": "Examples", "description": "Ansible example project", - "status": "successful" + "scm_type": "git" }, "inventory": { "name": "Rackspace", @@ -49,8 +49,11 @@ "created": "2014-03-06T16:51:04.557Z", "modified": "2014-03-06T16:51:14.272Z", "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, + "job_type": "run", + "type": "playbook_run", + "name": "Hello World", + "job_explanation": "Completed successfully", + "inventory": 4, "project": 1, "playbook": "lamp_simple/site.yml", "credential": 8, @@ -161,10 +164,12 @@ "created": "2014-03-07T23:28:06.999Z", "modified": "2014-03-07T23:28:16.424Z", "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, + "job_type": "run", + "job_explanation": "AWS access error. Check your credentials.", + "type": "inventory_sync", + "name": "AWS Cloud", + "inventory": 4, "project": 1, - "playbook": "lamp_simple/site.yml", "credential": 8, "cloud_credential": null, "forks": 0, @@ -273,8 +278,11 @@ "created": "2014-03-07T23:28:06.999Z", "modified": "2014-03-07T23:28:16.424Z", "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, + "job_type": "run", + "job_explanation": "Completed successfully", + "type": "inventory_sync", + "inventory": 4, + "name": "Rackspace", "project": 1, "playbook": "lamp_simple/site.yml", "credential": 8, @@ -285,8 +293,8 @@ "extra_vars": "{\n\t\"variable1\": \"some value\",\n\t\"variable2\": \"another value\"\n}", "job_tags": "", "launch_type": "manual", - "status": "failed", - "failed": true, + "status": "successful", + "failed": false, "result_traceback": "", "passwords_needed_to_start": [], "job_args": "[\"ssh-agent\", \"sh\", \"-c\", \"ssh-add /tmp/tmpoeaDyc && ansible-playbook -i /vagrant/ansible-commander/awx/plugins/inventory/awxrest.py -u vagrant -e '{\\\"variable1\\\": \\\"some value\\\", \\\"variable2\\\": \\\"another value\\\"}' lamp_simple/site.yml\"]", @@ -383,9 +391,12 @@ } }, "created": "2014-03-07T23:28:06.999Z", - "modified": "2014-03-07T23:28:16.424Z", + "modified": "2014-03-07T23:28:16.424Z", + "job_explanation": "Completed successfully", "job_template": 3, - "job_type": "playbook_run", + "job_type": "run", + "type": "scm_sync", + "name": "Examples", "inventory": 4, "project": 1, "playbook": "lamp_simple/site.yml", @@ -397,7 +408,7 @@ "extra_vars": "{\n\t\"variable1\": \"some value\",\n\t\"variable2\": \"another value\"\n}", "job_tags": "", "launch_type": "manual", - "status": "failed", + "status": "successful", "failed": true, "result_traceback": "", "passwords_needed_to_start": [], @@ -497,567 +508,10 @@ "created": "2014-03-07T23:28:06.999Z", "modified": "2014-03-07T23:28:16.424Z", "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, - "project": 1, - "playbook": "lamp_simple/site.yml", - "credential": 8, - "cloud_credential": null, - "forks": 0, - "limit": "", - "verbosity": 0, - "extra_vars": "{\n\t\"variable1\": \"some value\",\n\t\"variable2\": \"another value\"\n}", - "job_tags": "", - "launch_type": "manual", - "status": "failed", - "failed": true, - "result_traceback": "", - "passwords_needed_to_start": [], - "job_args": "[\"ssh-agent\", \"sh\", \"-c\", \"ssh-add /tmp/tmpoeaDyc && ansible-playbook -i /vagrant/ansible-commander/awx/plugins/inventory/awxrest.py -u vagrant -e '{\\\"variable1\\\": \\\"some value\\\", \\\"variable2\\\": \\\"another value\\\"}' lamp_simple/site.yml\"]", - "job_cwd": "/vagrant/ansible-commander/awx/projects/_1__examples", - "job_env": { - "CELERY_LOG_REDIRECT_LEVEL": "WARNING", - "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False", - "DJANGO_LIVE_TEST_SERVER_ADDRESS": "localhost:9013-9199", - "LESSOPEN": "|/usr/bin/lesspipe.sh %s", - "_MP_FORK_LOGFILE_": "", - "SSH_CLIENT": "10.0.2.2 61378 22", - "CVS_RSH": "ssh", - "LOGNAME": "vagrant", - "USER": "vagrant", - "HOME": "/home/vagrant", - "PATH": "/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin", - "REST_API_TOKEN": "**********************************", - "CALLBACK_CONSUMER_PORT": "tcp://127.0.0.1:5557", - "ANSIBLE_CALLBACK_PLUGINS": "/vagrant/ansible-commander/awx/plugins/callback", - "LANG": "en_US.UTF-8", - "HISTCONTROL": "ignoredups", - "TERM": "xterm", - "SHELL": "/bin/bash", - "TZ": "America/New_York", - "_MP_FORK_LOGFORMAT_": "[%(asctime)s: %(levelname)s/%(processName)s] %(message)s", - "SHLVL": "1", - "G_BROKEN_FILENAMES": "1", - "HISTSIZE": "1000", - "CELERY_LOG_FILE": "", - "DJANGO_PROJECT_DIR": "/vagrant/ansible-commander", - "ANSIBLE_HOST_KEY_CHECKING": "False", - "JOB_ID": "2", - "PYTHONPATH": "/vagrant/ansible-commander/awx/lib/site-packages:", - "CELERY_LOADER": "djcelery.loaders.DjangoLoader", - "_MP_FORK_LOGLEVEL_": "10", - "ANSIBLE_NOCOLOR": "1", - "JOB_CALLBACK_DEBUG": "1", - "REST_API_URL": "http://127.0.0.1:8013", - "_": "/usr/bin/nohup", - "SSH_CONNECTION": "10.0.2.2 61378 10.0.2.15 22", - "INVENTORY_HOSTVARS": "True", - "SSH_TTY": "/dev/pts/0", - "CELERY_LOG_LEVEL": "10", - "HOSTNAME": "vagrant-centos64.vagrantup.com", - "INVENTORY_ID": "4", - "PWD": "/home/vagrant", - "CELERY_LOG_REDIRECT": "1", - "DJANGO_SETTINGS_MODULE": "awx.settings.development", - "MAIL": "/var/spool/mail/vagrant", - "LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:" - } - }, - { - "id": 6, - "url": "/api/v1/jobs/2/", - "related": { - "job_host_summaries": "/api/v1/jobs/2/job_host_summaries/", - "activity_stream": "/api/v1/jobs/2/activity_stream/", - "job_events": "/api/v1/jobs/2/job_events/", - "job_template": "/api/v1/job_templates/3/", - "inventory": "/api/v1/inventories/4/", - "project": "/api/v1/projects/1/", - "credential": "/api/v1/credentials/8/", - "start": "/api/v1/jobs/2/start/", - "cancel": "/api/v1/jobs/2/cancel/" - }, - "summary_fields": { - "credential": { - "name": "ssh", - "description": "machine creds", - "kind": "ssh", - "cloud": false - }, - "job_template": { - "name": "Hello World", - "description": "" - }, - "project": { - "name": "Examples", - "description": "Ansible example project", - "status": "successful" - }, - "inventory": { - "name": "Rackspace", - "description": "", - "has_active_failures": true, - "total_hosts": 20, - "hosts_with_active_failures": 20, - "total_groups": 3, - "groups_with_active_failures": 3, - "has_inventory_sources": true, - "total_inventory_sources": 1, - "inventory_sources_with_failures": 1 - } - }, - "created": "2014-03-07T23:28:06.999Z", - "modified": "2014-03-07T23:28:16.424Z", - "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, - "project": 1, - "playbook": "lamp_simple/site.yml", - "credential": 8, - "cloud_credential": null, - "forks": 0, - "limit": "", - "verbosity": 0, - "extra_vars": "{\n\t\"variable1\": \"some value\",\n\t\"variable2\": \"another value\"\n}", - "job_tags": "", - "launch_type": "manual", - "status": "failed", - "failed": true, - "result_traceback": "", - "passwords_needed_to_start": [], - "job_args": "[\"ssh-agent\", \"sh\", \"-c\", \"ssh-add /tmp/tmpoeaDyc && ansible-playbook -i /vagrant/ansible-commander/awx/plugins/inventory/awxrest.py -u vagrant -e '{\\\"variable1\\\": \\\"some value\\\", \\\"variable2\\\": \\\"another value\\\"}' lamp_simple/site.yml\"]", - "job_cwd": "/vagrant/ansible-commander/awx/projects/_1__examples", - "job_env": { - "CELERY_LOG_REDIRECT_LEVEL": "WARNING", - "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False", - "DJANGO_LIVE_TEST_SERVER_ADDRESS": "localhost:9013-9199", - "LESSOPEN": "|/usr/bin/lesspipe.sh %s", - "_MP_FORK_LOGFILE_": "", - "SSH_CLIENT": "10.0.2.2 61378 22", - "CVS_RSH": "ssh", - "LOGNAME": "vagrant", - "USER": "vagrant", - "HOME": "/home/vagrant", - "PATH": "/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin", - "REST_API_TOKEN": "**********************************", - "CALLBACK_CONSUMER_PORT": "tcp://127.0.0.1:5557", - "ANSIBLE_CALLBACK_PLUGINS": "/vagrant/ansible-commander/awx/plugins/callback", - "LANG": "en_US.UTF-8", - "HISTCONTROL": "ignoredups", - "TERM": "xterm", - "SHELL": "/bin/bash", - "TZ": "America/New_York", - "_MP_FORK_LOGFORMAT_": "[%(asctime)s: %(levelname)s/%(processName)s] %(message)s", - "SHLVL": "1", - "G_BROKEN_FILENAMES": "1", - "HISTSIZE": "1000", - "CELERY_LOG_FILE": "", - "DJANGO_PROJECT_DIR": "/vagrant/ansible-commander", - "ANSIBLE_HOST_KEY_CHECKING": "False", - "JOB_ID": "2", - "PYTHONPATH": "/vagrant/ansible-commander/awx/lib/site-packages:", - "CELERY_LOADER": "djcelery.loaders.DjangoLoader", - "_MP_FORK_LOGLEVEL_": "10", - "ANSIBLE_NOCOLOR": "1", - "JOB_CALLBACK_DEBUG": "1", - "REST_API_URL": "http://127.0.0.1:8013", - "_": "/usr/bin/nohup", - "SSH_CONNECTION": "10.0.2.2 61378 10.0.2.15 22", - "INVENTORY_HOSTVARS": "True", - "SSH_TTY": "/dev/pts/0", - "CELERY_LOG_LEVEL": "10", - "HOSTNAME": "vagrant-centos64.vagrantup.com", - "INVENTORY_ID": "4", - "PWD": "/home/vagrant", - "CELERY_LOG_REDIRECT": "1", - "DJANGO_SETTINGS_MODULE": "awx.settings.development", - "MAIL": "/var/spool/mail/vagrant", - "LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:" - } - }, - { - "id": 7, - "url": "/api/v1/jobs/2/", - "related": { - "job_host_summaries": "/api/v1/jobs/2/job_host_summaries/", - "activity_stream": "/api/v1/jobs/2/activity_stream/", - "job_events": "/api/v1/jobs/2/job_events/", - "job_template": "/api/v1/job_templates/3/", - "inventory": "/api/v1/inventories/4/", - "project": "/api/v1/projects/1/", - "credential": "/api/v1/credentials/8/", - "start": "/api/v1/jobs/2/start/", - "cancel": "/api/v1/jobs/2/cancel/" - }, - "summary_fields": { - "credential": { - "name": "ssh", - "description": "machine creds", - "kind": "ssh", - "cloud": false - }, - "job_template": { - "name": "Hello World", - "description": "" - }, - "project": { - "name": "Examples", - "description": "Ansible example project", - "status": "successful" - }, - "inventory": { - "name": "Rackspace", - "description": "", - "has_active_failures": true, - "total_hosts": 20, - "hosts_with_active_failures": 20, - "total_groups": 3, - "groups_with_active_failures": 3, - "has_inventory_sources": true, - "total_inventory_sources": 1, - "inventory_sources_with_failures": 1 - } - }, - "created": "2014-03-07T23:28:06.999Z", - "modified": "2014-03-07T23:28:16.424Z", - "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, - "project": 1, - "playbook": "lamp_simple/site.yml", - "credential": 8, - "cloud_credential": null, - "forks": 0, - "limit": "", - "verbosity": 0, - "extra_vars": "{\n\t\"variable1\": \"some value\",\n\t\"variable2\": \"another value\"\n}", - "job_tags": "", - "launch_type": "manual", - "status": "failed", - "failed": true, - "result_traceback": "", - "passwords_needed_to_start": [], - "job_args": "[\"ssh-agent\", \"sh\", \"-c\", \"ssh-add /tmp/tmpoeaDyc && ansible-playbook -i /vagrant/ansible-commander/awx/plugins/inventory/awxrest.py -u vagrant -e '{\\\"variable1\\\": \\\"some value\\\", \\\"variable2\\\": \\\"another value\\\"}' lamp_simple/site.yml\"]", - "job_cwd": "/vagrant/ansible-commander/awx/projects/_1__examples", - "job_env": { - "CELERY_LOG_REDIRECT_LEVEL": "WARNING", - "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False", - "DJANGO_LIVE_TEST_SERVER_ADDRESS": "localhost:9013-9199", - "LESSOPEN": "|/usr/bin/lesspipe.sh %s", - "_MP_FORK_LOGFILE_": "", - "SSH_CLIENT": "10.0.2.2 61378 22", - "CVS_RSH": "ssh", - "LOGNAME": "vagrant", - "USER": "vagrant", - "HOME": "/home/vagrant", - "PATH": "/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin", - "REST_API_TOKEN": "**********************************", - "CALLBACK_CONSUMER_PORT": "tcp://127.0.0.1:5557", - "ANSIBLE_CALLBACK_PLUGINS": "/vagrant/ansible-commander/awx/plugins/callback", - "LANG": "en_US.UTF-8", - "HISTCONTROL": "ignoredups", - "TERM": "xterm", - "SHELL": "/bin/bash", - "TZ": "America/New_York", - "_MP_FORK_LOGFORMAT_": "[%(asctime)s: %(levelname)s/%(processName)s] %(message)s", - "SHLVL": "1", - "G_BROKEN_FILENAMES": "1", - "HISTSIZE": "1000", - "CELERY_LOG_FILE": "", - "DJANGO_PROJECT_DIR": "/vagrant/ansible-commander", - "ANSIBLE_HOST_KEY_CHECKING": "False", - "JOB_ID": "2", - "PYTHONPATH": "/vagrant/ansible-commander/awx/lib/site-packages:", - "CELERY_LOADER": "djcelery.loaders.DjangoLoader", - "_MP_FORK_LOGLEVEL_": "10", - "ANSIBLE_NOCOLOR": "1", - "JOB_CALLBACK_DEBUG": "1", - "REST_API_URL": "http://127.0.0.1:8013", - "_": "/usr/bin/nohup", - "SSH_CONNECTION": "10.0.2.2 61378 10.0.2.15 22", - "INVENTORY_HOSTVARS": "True", - "SSH_TTY": "/dev/pts/0", - "CELERY_LOG_LEVEL": "10", - "HOSTNAME": "vagrant-centos64.vagrantup.com", - "INVENTORY_ID": "4", - "PWD": "/home/vagrant", - "CELERY_LOG_REDIRECT": "1", - "DJANGO_SETTINGS_MODULE": "awx.settings.development", - "MAIL": "/var/spool/mail/vagrant", - "LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:" - } - }, - { - "id": 8, - "url": "/api/v1/jobs/2/", - "related": { - "job_host_summaries": "/api/v1/jobs/2/job_host_summaries/", - "activity_stream": "/api/v1/jobs/2/activity_stream/", - "job_events": "/api/v1/jobs/2/job_events/", - "job_template": "/api/v1/job_templates/3/", - "inventory": "/api/v1/inventories/4/", - "project": "/api/v1/projects/1/", - "credential": "/api/v1/credentials/8/", - "start": "/api/v1/jobs/2/start/", - "cancel": "/api/v1/jobs/2/cancel/" - }, - "summary_fields": { - "credential": { - "name": "ssh", - "description": "machine creds", - "kind": "ssh", - "cloud": false - }, - "job_template": { - "name": "Hello World", - "description": "" - }, - "project": { - "name": "Examples", - "description": "Ansible example project", - "status": "successful" - }, - "inventory": { - "name": "Rackspace", - "description": "", - "has_active_failures": true, - "total_hosts": 20, - "hosts_with_active_failures": 20, - "total_groups": 3, - "groups_with_active_failures": 3, - "has_inventory_sources": true, - "total_inventory_sources": 1, - "inventory_sources_with_failures": 1 - } - }, - "created": "2014-03-07T23:28:06.999Z", - "modified": "2014-03-07T23:28:16.424Z", - "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, - "project": 1, - "playbook": "lamp_simple/site.yml", - "credential": 8, - "cloud_credential": null, - "forks": 0, - "limit": "", - "verbosity": 0, - "extra_vars": "{\n\t\"variable1\": \"some value\",\n\t\"variable2\": \"another value\"\n}", - "job_tags": "", - "launch_type": "manual", - "status": "failed", - "failed": true, - "result_traceback": "", - "passwords_needed_to_start": [], - "job_args": "[\"ssh-agent\", \"sh\", \"-c\", \"ssh-add /tmp/tmpoeaDyc && ansible-playbook -i /vagrant/ansible-commander/awx/plugins/inventory/awxrest.py -u vagrant -e '{\\\"variable1\\\": \\\"some value\\\", \\\"variable2\\\": \\\"another value\\\"}' lamp_simple/site.yml\"]", - "job_cwd": "/vagrant/ansible-commander/awx/projects/_1__examples", - "job_env": { - "CELERY_LOG_REDIRECT_LEVEL": "WARNING", - "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False", - "DJANGO_LIVE_TEST_SERVER_ADDRESS": "localhost:9013-9199", - "LESSOPEN": "|/usr/bin/lesspipe.sh %s", - "_MP_FORK_LOGFILE_": "", - "SSH_CLIENT": "10.0.2.2 61378 22", - "CVS_RSH": "ssh", - "LOGNAME": "vagrant", - "USER": "vagrant", - "HOME": "/home/vagrant", - "PATH": "/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin", - "REST_API_TOKEN": "**********************************", - "CALLBACK_CONSUMER_PORT": "tcp://127.0.0.1:5557", - "ANSIBLE_CALLBACK_PLUGINS": "/vagrant/ansible-commander/awx/plugins/callback", - "LANG": "en_US.UTF-8", - "HISTCONTROL": "ignoredups", - "TERM": "xterm", - "SHELL": "/bin/bash", - "TZ": "America/New_York", - "_MP_FORK_LOGFORMAT_": "[%(asctime)s: %(levelname)s/%(processName)s] %(message)s", - "SHLVL": "1", - "G_BROKEN_FILENAMES": "1", - "HISTSIZE": "1000", - "CELERY_LOG_FILE": "", - "DJANGO_PROJECT_DIR": "/vagrant/ansible-commander", - "ANSIBLE_HOST_KEY_CHECKING": "False", - "JOB_ID": "2", - "PYTHONPATH": "/vagrant/ansible-commander/awx/lib/site-packages:", - "CELERY_LOADER": "djcelery.loaders.DjangoLoader", - "_MP_FORK_LOGLEVEL_": "10", - "ANSIBLE_NOCOLOR": "1", - "JOB_CALLBACK_DEBUG": "1", - "REST_API_URL": "http://127.0.0.1:8013", - "_": "/usr/bin/nohup", - "SSH_CONNECTION": "10.0.2.2 61378 10.0.2.15 22", - "INVENTORY_HOSTVARS": "True", - "SSH_TTY": "/dev/pts/0", - "CELERY_LOG_LEVEL": "10", - "HOSTNAME": "vagrant-centos64.vagrantup.com", - "INVENTORY_ID": "4", - "PWD": "/home/vagrant", - "CELERY_LOG_REDIRECT": "1", - "DJANGO_SETTINGS_MODULE": "awx.settings.development", - "MAIL": "/var/spool/mail/vagrant", - "LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:" - } - }, - { - "id": 9, - "url": "/api/v1/jobs/2/", - "related": { - "job_host_summaries": "/api/v1/jobs/2/job_host_summaries/", - "activity_stream": "/api/v1/jobs/2/activity_stream/", - "job_events": "/api/v1/jobs/2/job_events/", - "job_template": "/api/v1/job_templates/3/", - "inventory": "/api/v1/inventories/4/", - "project": "/api/v1/projects/1/", - "credential": "/api/v1/credentials/8/", - "start": "/api/v1/jobs/2/start/", - "cancel": "/api/v1/jobs/2/cancel/" - }, - "summary_fields": { - "credential": { - "name": "ssh", - "description": "machine creds", - "kind": "ssh", - "cloud": false - }, - "job_template": { - "name": "Hello World", - "description": "" - }, - "project": { - "name": "Examples", - "description": "Ansible example project", - "status": "successful" - }, - "inventory": { - "name": "Rackspace", - "description": "", - "has_active_failures": true, - "total_hosts": 20, - "hosts_with_active_failures": 20, - "total_groups": 3, - "groups_with_active_failures": 3, - "has_inventory_sources": true, - "total_inventory_sources": 1, - "inventory_sources_with_failures": 1 - } - }, - "created": "2014-03-07T23:28:06.999Z", - "modified": "2014-03-07T23:28:16.424Z", - "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, - "project": 1, - "playbook": "lamp_simple/site.yml", - "credential": 8, - "cloud_credential": null, - "forks": 0, - "limit": "", - "verbosity": 0, - "extra_vars": "{\n\t\"variable1\": \"some value\",\n\t\"variable2\": \"another value\"\n}", - "job_tags": "", - "launch_type": "manual", - "status": "failed", - "failed": true, - "result_traceback": "", - "passwords_needed_to_start": [], - "job_args": "[\"ssh-agent\", \"sh\", \"-c\", \"ssh-add /tmp/tmpoeaDyc && ansible-playbook -i /vagrant/ansible-commander/awx/plugins/inventory/awxrest.py -u vagrant -e '{\\\"variable1\\\": \\\"some value\\\", \\\"variable2\\\": \\\"another value\\\"}' lamp_simple/site.yml\"]", - "job_cwd": "/vagrant/ansible-commander/awx/projects/_1__examples", - "job_env": { - "CELERY_LOG_REDIRECT_LEVEL": "WARNING", - "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False", - "DJANGO_LIVE_TEST_SERVER_ADDRESS": "localhost:9013-9199", - "LESSOPEN": "|/usr/bin/lesspipe.sh %s", - "_MP_FORK_LOGFILE_": "", - "SSH_CLIENT": "10.0.2.2 61378 22", - "CVS_RSH": "ssh", - "LOGNAME": "vagrant", - "USER": "vagrant", - "HOME": "/home/vagrant", - "PATH": "/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin", - "REST_API_TOKEN": "**********************************", - "CALLBACK_CONSUMER_PORT": "tcp://127.0.0.1:5557", - "ANSIBLE_CALLBACK_PLUGINS": "/vagrant/ansible-commander/awx/plugins/callback", - "LANG": "en_US.UTF-8", - "HISTCONTROL": "ignoredups", - "TERM": "xterm", - "SHELL": "/bin/bash", - "TZ": "America/New_York", - "_MP_FORK_LOGFORMAT_": "[%(asctime)s: %(levelname)s/%(processName)s] %(message)s", - "SHLVL": "1", - "G_BROKEN_FILENAMES": "1", - "HISTSIZE": "1000", - "CELERY_LOG_FILE": "", - "DJANGO_PROJECT_DIR": "/vagrant/ansible-commander", - "ANSIBLE_HOST_KEY_CHECKING": "False", - "JOB_ID": "2", - "PYTHONPATH": "/vagrant/ansible-commander/awx/lib/site-packages:", - "CELERY_LOADER": "djcelery.loaders.DjangoLoader", - "_MP_FORK_LOGLEVEL_": "10", - "ANSIBLE_NOCOLOR": "1", - "JOB_CALLBACK_DEBUG": "1", - "REST_API_URL": "http://127.0.0.1:8013", - "_": "/usr/bin/nohup", - "SSH_CONNECTION": "10.0.2.2 61378 10.0.2.15 22", - "INVENTORY_HOSTVARS": "True", - "SSH_TTY": "/dev/pts/0", - "CELERY_LOG_LEVEL": "10", - "HOSTNAME": "vagrant-centos64.vagrantup.com", - "INVENTORY_ID": "4", - "PWD": "/home/vagrant", - "CELERY_LOG_REDIRECT": "1", - "DJANGO_SETTINGS_MODULE": "awx.settings.development", - "MAIL": "/var/spool/mail/vagrant", - "LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:" - } - }, - { - "id": 10, - "url": "/api/v1/jobs/2/", - "related": { - "job_host_summaries": "/api/v1/jobs/2/job_host_summaries/", - "activity_stream": "/api/v1/jobs/2/activity_stream/", - "job_events": "/api/v1/jobs/2/job_events/", - "job_template": "/api/v1/job_templates/3/", - "inventory": "/api/v1/inventories/4/", - "project": "/api/v1/projects/1/", - "credential": "/api/v1/credentials/8/", - "start": "/api/v1/jobs/2/start/", - "cancel": "/api/v1/jobs/2/cancel/" - }, - "summary_fields": { - "credential": { - "name": "ssh", - "description": "machine creds", - "kind": "ssh", - "cloud": false - }, - "job_template": { - "name": "Hello World", - "description": "" - }, - "project": { - "name": "Examples", - "description": "Ansible example project", - "status": "successful" - }, - "inventory": { - "name": "Rackspace", - "description": "", - "has_active_failures": true, - "total_hosts": 20, - "hosts_with_active_failures": 20, - "total_groups": 3, - "groups_with_active_failures": 3, - "has_inventory_sources": true, - "total_inventory_sources": 1, - "inventory_sources_with_failures": 1 - } - }, - "created": "2014-03-07T23:28:06.999Z", - "modified": "2014-03-07T23:28:16.424Z", - "job_template": 3, - "job_type": "playbook_run", + "job_type": "run", + "job_explanation": "Completed successfully", + "type": "playbook_run", + "name": "Web server restart", "inventory": 4, "project": 1, "playbook": "lamp_simple/site.yml", diff --git a/awx/ui/static/sample/data/jobs/queued/data.json b/awx/ui/static/sample/data/jobs/queued/data.json index 2ff6970dcd..e58873a27a 100644 --- a/awx/ui/static/sample/data/jobs/queued/data.json +++ b/awx/ui/static/sample/data/jobs/queued/data.json @@ -49,7 +49,10 @@ "created": "2014-03-06T16:51:04.557Z", "modified": "2014-03-06T16:51:14.272Z", "job_template": 3, - "job_type": "playbook_run", + "job_type": "run", + "type": "playbook_run", + "name": "Hello World", + "job_explanation": "blah blah blah", "inventory": 4, "project": 1, "playbook": "lamp_simple/site.yml", @@ -161,7 +164,10 @@ "created": "2014-03-07T23:28:06.999Z", "modified": "2014-03-07T23:28:16.424Z", "job_template": 3, - "job_type": "playbook_run", + "job_type": "run", + "type": "inventory_sync", + "name": "Production", + "job_explanation": "blah blah blah", "inventory": 4, "project": 1, "playbook": "lamp_simple/site.yml", @@ -273,7 +279,10 @@ "created": "2014-03-07T23:28:06.999Z", "modified": "2014-03-07T23:28:16.424Z", "job_template": 3, - "job_type": "playbook_run", + "job_type": "run", + "type": "scm_sync", + "name": "Examples", + "job_explanation": "blah blah blah", "inventory": 4, "project": 1, "playbook": "lamp_simple/site.yml", diff --git a/awx/ui/static/sample/data/jobs/running/data.json b/awx/ui/static/sample/data/jobs/running/data.json index 4f07496bd8..557538daae 100644 --- a/awx/ui/static/sample/data/jobs/running/data.json +++ b/awx/ui/static/sample/data/jobs/running/data.json @@ -49,8 +49,11 @@ "created": "2014-03-07T23:28:06.999Z", "modified": "2014-03-07T23:28:16.424Z", "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, + "job_type": "run", + "inventory": 4, + "name": "QA", + "job_explanation": "blah blah blah", + "type": "inventory_sync", "project": 1, "playbook": "lamp_simple/site.yml", "credential": 8, @@ -161,9 +164,12 @@ "created": "2014-03-07T23:28:06.999Z", "modified": "2014-03-07T23:28:16.424Z", "job_template": 3, - "job_type": "playbook_run", + "job_type": "run", "inventory": 4, "project": 1, + "name": "Package update", + "job_explanation": "blah blah blah", + "type": "playbook_run", "playbook": "lamp_simple/site.yml", "credential": 8, "cloud_credential": null, @@ -273,231 +279,10 @@ "created": "2014-03-07T23:28:06.999Z", "modified": "2014-03-07T23:28:16.424Z", "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, - "project": 1, - "playbook": "lamp_simple/site.yml", - "credential": 8, - "cloud_credential": null, - "forks": 0, - "limit": "", - "verbosity": 0, - "extra_vars": "{\n\t\"variable1\": \"some value\",\n\t\"variable2\": \"another value\"\n}", - "job_tags": "", - "launch_type": "manual", - "status": "new", - "failed": false, - "result_traceback": "", - "passwords_needed_to_start": [], - "job_args": "[\"ssh-agent\", \"sh\", \"-c\", \"ssh-add /tmp/tmpoeaDyc && ansible-playbook -i /vagrant/ansible-commander/awx/plugins/inventory/awxrest.py -u vagrant -e '{\\\"variable1\\\": \\\"some value\\\", \\\"variable2\\\": \\\"another value\\\"}' lamp_simple/site.yml\"]", - "job_cwd": "/vagrant/ansible-commander/awx/projects/_1__examples", - "job_env": { - "CELERY_LOG_REDIRECT_LEVEL": "WARNING", - "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False", - "DJANGO_LIVE_TEST_SERVER_ADDRESS": "localhost:9013-9199", - "LESSOPEN": "|/usr/bin/lesspipe.sh %s", - "_MP_FORK_LOGFILE_": "", - "SSH_CLIENT": "10.0.2.2 61378 22", - "CVS_RSH": "ssh", - "LOGNAME": "vagrant", - "USER": "vagrant", - "HOME": "/home/vagrant", - "PATH": "/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin", - "REST_API_TOKEN": "**********************************", - "CALLBACK_CONSUMER_PORT": "tcp://127.0.0.1:5557", - "ANSIBLE_CALLBACK_PLUGINS": "/vagrant/ansible-commander/awx/plugins/callback", - "LANG": "en_US.UTF-8", - "HISTCONTROL": "ignoredups", - "TERM": "xterm", - "SHELL": "/bin/bash", - "TZ": "America/New_York", - "_MP_FORK_LOGFORMAT_": "[%(asctime)s: %(levelname)s/%(processName)s] %(message)s", - "SHLVL": "1", - "G_BROKEN_FILENAMES": "1", - "HISTSIZE": "1000", - "CELERY_LOG_FILE": "", - "DJANGO_PROJECT_DIR": "/vagrant/ansible-commander", - "ANSIBLE_HOST_KEY_CHECKING": "False", - "JOB_ID": "2", - "PYTHONPATH": "/vagrant/ansible-commander/awx/lib/site-packages:", - "CELERY_LOADER": "djcelery.loaders.DjangoLoader", - "_MP_FORK_LOGLEVEL_": "10", - "ANSIBLE_NOCOLOR": "1", - "JOB_CALLBACK_DEBUG": "1", - "REST_API_URL": "http://127.0.0.1:8013", - "_": "/usr/bin/nohup", - "SSH_CONNECTION": "10.0.2.2 61378 10.0.2.15 22", - "INVENTORY_HOSTVARS": "True", - "SSH_TTY": "/dev/pts/0", - "CELERY_LOG_LEVEL": "10", - "HOSTNAME": "vagrant-centos64.vagrantup.com", - "INVENTORY_ID": "4", - "PWD": "/home/vagrant", - "CELERY_LOG_REDIRECT": "1", - "DJANGO_SETTINGS_MODULE": "awx.settings.development", - "MAIL": "/var/spool/mail/vagrant", - "LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:" - } - }, - { - "id": 25, - "url": "/api/v1/jobs/2/", - "related": { - "job_host_summaries": "/api/v1/jobs/2/job_host_summaries/", - "activity_stream": "/api/v1/jobs/2/activity_stream/", - "job_events": "/api/v1/jobs/2/job_events/", - "job_template": "/api/v1/job_templates/3/", - "inventory": "/api/v1/inventories/4/", - "project": "/api/v1/projects/1/", - "credential": "/api/v1/credentials/8/", - "start": "/api/v1/jobs/2/start/", - "cancel": "/api/v1/jobs/2/cancel/" - }, - "summary_fields": { - "credential": { - "name": "ssh", - "description": "machine creds", - "kind": "ssh", - "cloud": false - }, - "job_template": { - "name": "Hello World", - "description": "" - }, - "project": { - "name": "Examples", - "description": "Ansible example project", - "status": "successful" - }, - "inventory": { - "name": "Rackspace", - "description": "", - "has_active_failures": true, - "total_hosts": 20, - "hosts_with_active_failures": 20, - "total_groups": 3, - "groups_with_active_failures": 3, - "has_inventory_sources": true, - "total_inventory_sources": 1, - "inventory_sources_with_failures": 1 - } - }, - "created": "2014-03-07T23:28:06.999Z", - "modified": "2014-03-07T23:28:16.424Z", - "job_template": 3, - "job_type": "playbook_run", - "inventory": 4, - "project": 1, - "playbook": "lamp_simple/site.yml", - "credential": 8, - "cloud_credential": null, - "forks": 0, - "limit": "", - "verbosity": 0, - "extra_vars": "{\n\t\"variable1\": \"some value\",\n\t\"variable2\": \"another value\"\n}", - "job_tags": "", - "launch_type": "manual", - "status": "running", - "failed": false, - "result_traceback": "", - "passwords_needed_to_start": [], - "job_args": "[\"ssh-agent\", \"sh\", \"-c\", \"ssh-add /tmp/tmpoeaDyc && ansible-playbook -i /vagrant/ansible-commander/awx/plugins/inventory/awxrest.py -u vagrant -e '{\\\"variable1\\\": \\\"some value\\\", \\\"variable2\\\": \\\"another value\\\"}' lamp_simple/site.yml\"]", - "job_cwd": "/vagrant/ansible-commander/awx/projects/_1__examples", - "job_env": { - "CELERY_LOG_REDIRECT_LEVEL": "WARNING", - "ANSIBLE_PARAMIKO_RECORD_HOST_KEYS": "False", - "DJANGO_LIVE_TEST_SERVER_ADDRESS": "localhost:9013-9199", - "LESSOPEN": "|/usr/bin/lesspipe.sh %s", - "_MP_FORK_LOGFILE_": "", - "SSH_CLIENT": "10.0.2.2 61378 22", - "CVS_RSH": "ssh", - "LOGNAME": "vagrant", - "USER": "vagrant", - "HOME": "/home/vagrant", - "PATH": "/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/home/vagrant/bin", - "REST_API_TOKEN": "**********************************", - "CALLBACK_CONSUMER_PORT": "tcp://127.0.0.1:5557", - "ANSIBLE_CALLBACK_PLUGINS": "/vagrant/ansible-commander/awx/plugins/callback", - "LANG": "en_US.UTF-8", - "HISTCONTROL": "ignoredups", - "TERM": "xterm", - "SHELL": "/bin/bash", - "TZ": "America/New_York", - "_MP_FORK_LOGFORMAT_": "[%(asctime)s: %(levelname)s/%(processName)s] %(message)s", - "SHLVL": "1", - "G_BROKEN_FILENAMES": "1", - "HISTSIZE": "1000", - "CELERY_LOG_FILE": "", - "DJANGO_PROJECT_DIR": "/vagrant/ansible-commander", - "ANSIBLE_HOST_KEY_CHECKING": "False", - "JOB_ID": "2", - "PYTHONPATH": "/vagrant/ansible-commander/awx/lib/site-packages:", - "CELERY_LOADER": "djcelery.loaders.DjangoLoader", - "_MP_FORK_LOGLEVEL_": "10", - "ANSIBLE_NOCOLOR": "1", - "JOB_CALLBACK_DEBUG": "1", - "REST_API_URL": "http://127.0.0.1:8013", - "_": "/usr/bin/nohup", - "SSH_CONNECTION": "10.0.2.2 61378 10.0.2.15 22", - "INVENTORY_HOSTVARS": "True", - "SSH_TTY": "/dev/pts/0", - "CELERY_LOG_LEVEL": "10", - "HOSTNAME": "vagrant-centos64.vagrantup.com", - "INVENTORY_ID": "4", - "PWD": "/home/vagrant", - "CELERY_LOG_REDIRECT": "1", - "DJANGO_SETTINGS_MODULE": "awx.settings.development", - "MAIL": "/var/spool/mail/vagrant", - "LS_COLORS": "rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lz=01;31:*.xz=01;31:*.bz2=01;31:*.tbz=01;31:*.tbz2=01;31:*.bz=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:" - } - }, - { - "id": 26, - "url": "/api/v1/jobs/2/", - "related": { - "job_host_summaries": "/api/v1/jobs/2/job_host_summaries/", - "activity_stream": "/api/v1/jobs/2/activity_stream/", - "job_events": "/api/v1/jobs/2/job_events/", - "job_template": "/api/v1/job_templates/3/", - "inventory": "/api/v1/inventories/4/", - "project": "/api/v1/projects/1/", - "credential": "/api/v1/credentials/8/", - "start": "/api/v1/jobs/2/start/", - "cancel": "/api/v1/jobs/2/cancel/" - }, - "summary_fields": { - "credential": { - "name": "ssh", - "description": "machine creds", - "kind": "ssh", - "cloud": false - }, - "job_template": { - "name": "Hello World", - "description": "" - }, - "project": { - "name": "Examples", - "description": "Ansible example project", - "status": "successful" - }, - "inventory": { - "name": "Rackspace", - "description": "", - "has_active_failures": true, - "total_hosts": 20, - "hosts_with_active_failures": 20, - "total_groups": 3, - "groups_with_active_failures": 3, - "has_inventory_sources": true, - "total_inventory_sources": 1, - "inventory_sources_with_failures": 1 - } - }, - "created": "2014-03-07T23:28:06.999Z", - "modified": "2014-03-07T23:28:16.424Z", - "job_template": 3, - "job_type": "playbook_run", + "job_type": "run", + "name": "Apache Project", + "job_explanation": "blah blah blah", + "type": "scm_sync", "inventory": 4, "project": 1, "playbook": "lamp_simple/site.yml",