mirror of
https://github.com/ansible/awx.git
synced 2026-03-18 09:27:31 -02:30
Merge pull request #1765 from jaredevantabor/schedules-reorg
Schedules Re-org to related tabs
This commit is contained in:
@@ -1,5 +1,6 @@
|
|||||||
import JobsStrings from './jobs.strings';
|
import JobsStrings from './jobs.strings';
|
||||||
import jobsRoute from './routes/jobs.route';
|
import jobsRoute from './routes/jobs.route';
|
||||||
|
import { jobsSchedulesRoute, jobsSchedulesEditRoute } from '../../src/scheduler/schedules.route';
|
||||||
|
|
||||||
const MODULE_NAME = 'at.features.jobs';
|
const MODULE_NAME = 'at.features.jobs';
|
||||||
|
|
||||||
@@ -8,6 +9,8 @@ angular
|
|||||||
.service('JobsStrings', JobsStrings)
|
.service('JobsStrings', JobsStrings)
|
||||||
.run(['$stateExtender', ($stateExtender) => {
|
.run(['$stateExtender', ($stateExtender) => {
|
||||||
$stateExtender.addState(jobsRoute);
|
$stateExtender.addState(jobsRoute);
|
||||||
|
$stateExtender.addState(jobsSchedulesRoute);
|
||||||
|
$stateExtender.addState(jobsSchedulesEditRoute);
|
||||||
}]);
|
}]);
|
||||||
|
|
||||||
export default MODULE_NAME;
|
export default MODULE_NAME;
|
||||||
|
|||||||
@@ -1,13 +1,14 @@
|
|||||||
|
<div ui-view="scheduler"></div>
|
||||||
<div class="tab-pane" id="jobs-page">
|
<div class="tab-pane" id="jobs-page">
|
||||||
<at-panel ng-cloak id="htmlTemplate">
|
<at-panel ng-cloak id="htmlTemplate">
|
||||||
<div>
|
<div>
|
||||||
<div ng-hide="$state.is('jobs.schedules')">
|
<div ng-hide="$state.includes('jobs.schedules')">
|
||||||
<at-panel-heading hide-dismiss="true">
|
<at-panel-heading hide-dismiss="true">
|
||||||
<translate>JOBS</translate>
|
<translate>JOBS</translate>
|
||||||
</at-panel-heading>
|
</at-panel-heading>
|
||||||
<div ui-view="jobsList"></div>
|
<div ui-view="jobsList"></div>
|
||||||
</div>
|
</div>
|
||||||
<div ng-hide="!$state.is('jobs.schedules')">
|
<div ng-hide="!$state.includes('jobs.schedules')">
|
||||||
<at-panel-heading hide-dismiss="true">
|
<at-panel-heading hide-dismiss="true">
|
||||||
<translate>SCHEDULES</translate>
|
<translate>SCHEDULES</translate>
|
||||||
</at-panel-heading>
|
</at-panel-heading>
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
<div ui-view="scheduler"></div>
|
||||||
<div ui-view="form"></div>
|
<div ui-view="form"></div>
|
||||||
<at-panel ng-cloak id="htmlTemplate">
|
<at-panel ng-cloak id="htmlTemplate">
|
||||||
<div ng-if="$state.is('templates')">
|
<div ng-if="$state.is('templates')">
|
||||||
|
|||||||
@@ -98,9 +98,9 @@ function ListTemplatesController(
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (isJobTemplate(template)) {
|
if (isJobTemplate(template)) {
|
||||||
$state.go('jobTemplateSchedules', { id: template.id });
|
$state.go('templates.editJobTemplate.schedules', { job_template_id: template.id });
|
||||||
} else if (isWorkflowTemplate(template)) {
|
} else if (isWorkflowTemplate(template)) {
|
||||||
$state.go('workflowJobTemplateSchedules', { id: template.id });
|
$state.go('templates.editWorkflowJobTemplate.schedules', { workflow_job_template_id: template.id });
|
||||||
} else {
|
} else {
|
||||||
Alert(strings.get('error.UNKNOWN'), strings.get('alert.UNKNOWN_SCHEDULE'));
|
Alert(strings.get('error.UNKNOWN'), strings.get('alert.UNKNOWN_SCHEDULE'));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
<div class="tab-pane" id="inventories-panel">
|
<div class="tab-pane" id="inventories-panel">
|
||||||
<aw-limit-panels max-panels="2" panel-container="inventories-panel"></aw-limit-panels>
|
<aw-limit-panels max-panels="2" panel-container="inventories-panel"></aw-limit-panels>
|
||||||
<div ui-view="adhocForm"></div>
|
<div ui-view="adhocForm"></div>
|
||||||
|
<div ui-view="scheduler"></div>
|
||||||
<div ui-view="hostForm"></div>
|
<div ui-view="hostForm"></div>
|
||||||
<div ui-view="nestedGroupForm"></div>
|
<div ui-view="nestedGroupForm"></div>
|
||||||
<div ui-view="groupForm"></div>
|
<div ui-view="groupForm"></div>
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ export default ['$state', '$stateParams', '$scope', 'ParseVariableString',
|
|||||||
{verbosity: inventorySourceData.verbosity});
|
{verbosity: inventorySourceData.verbosity});
|
||||||
|
|
||||||
$scope.inventory_source_obj = inventorySourceData;
|
$scope.inventory_source_obj = inventorySourceData;
|
||||||
|
$scope.breadcrumb.inventory_source_name = inventorySourceData.name;
|
||||||
if (inventorySourceData.credential) {
|
if (inventorySourceData.credential) {
|
||||||
$scope.credential_name = inventorySourceData.summary_fields.credential.name;
|
$scope.credential_name = inventorySourceData.summary_fields.credential.name;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,11 +1,9 @@
|
|||||||
import { N_ } from '../../../../../i18n';
|
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "inventories.edit.inventory_sources.edit",
|
name: "inventories.edit.inventory_sources.edit",
|
||||||
url: "/edit/:inventory_source_id",
|
url: "/edit/:inventory_source_id",
|
||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
parent: "inventories.edit.inventory_sources",
|
parent: "inventories.edit.inventory_sources",
|
||||||
label: N_("INVENTORY SOURCES")
|
label: '{{breadcrumb.inventory_source_name}}'
|
||||||
},
|
},
|
||||||
views: {
|
views: {
|
||||||
'groupForm@inventories': {
|
'groupForm@inventories': {
|
||||||
|
|||||||
@@ -5,10 +5,11 @@ export default {
|
|||||||
name: 'inventories.edit.inventory_sources.edit.schedules.add',
|
name: 'inventories.edit.inventory_sources.edit.schedules.add',
|
||||||
url: '/add',
|
url: '/add',
|
||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
|
parent: 'inventories.edit.inventory_sources.edit.schedules',
|
||||||
label: N_("CREATE SCHEDULE")
|
label: N_("CREATE SCHEDULE")
|
||||||
},
|
},
|
||||||
views: {
|
views: {
|
||||||
'form': {
|
'scheduler@inventories': {
|
||||||
controller: 'schedulerAddController',
|
controller: 'schedulerAddController',
|
||||||
templateUrl: templateUrl("scheduler/schedulerForm")
|
templateUrl: templateUrl("scheduler/schedulerForm")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,15 +1,18 @@
|
|||||||
import {templateUrl} from '../../../../../../shared/template-url/template-url.factory';
|
import {templateUrl} from '../../../../../../shared/template-url/template-url.factory';
|
||||||
|
import editScheduleResolve from '../../../../../../scheduler/editSchedule.resolve';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'inventories.edit.inventory_sources.edit.schedules.edit',
|
name: 'inventories.edit.inventory_sources.edit.schedules.edit',
|
||||||
url: '/:schedule_id',
|
url: '/:schedule_id',
|
||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
label: "{{schedule_obj.name}}"
|
parent: 'inventories.edit.inventory_sources.edit.schedules',
|
||||||
|
label: "{{breadcrumb.schedule_name}}"
|
||||||
},
|
},
|
||||||
views: {
|
views: {
|
||||||
'form': {
|
'scheduler@inventories': {
|
||||||
templateUrl: templateUrl("scheduler/schedulerForm"),
|
templateUrl: templateUrl("scheduler/schedulerForm"),
|
||||||
controller: 'schedulerEditController',
|
controller: 'schedulerEditController',
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
resolve: editScheduleResolve()
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,21 +1,35 @@
|
|||||||
import { N_ } from '../../../../../../i18n';
|
import { N_ } from '../../../../../../i18n';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
|
searchPrefix: 'schedule',
|
||||||
name: 'inventories.edit.inventory_sources.edit.schedules',
|
name: 'inventories.edit.inventory_sources.edit.schedules',
|
||||||
url: '/schedules',
|
url: '/schedules',
|
||||||
searchPrefix: 'schedule',
|
|
||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
|
parent: 'inventories.edit.inventory_sources.edit',
|
||||||
label: N_('SCHEDULES')
|
label: N_('SCHEDULES')
|
||||||
},
|
},
|
||||||
|
views: {
|
||||||
|
'related': {
|
||||||
|
templateProvider: function(SchedulesList, generateList){
|
||||||
|
SchedulesList.title = false;
|
||||||
|
let html = generateList.build({
|
||||||
|
list: SchedulesList,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'schedulerListController'
|
||||||
|
}
|
||||||
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath', 'inventorySourceData',
|
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath', 'inventorySource',
|
||||||
function(list, qs, $stateParams, GetBasePath, inventorySourceData) {
|
function(list, qs, $stateParams, GetBasePath, inventorySource) {
|
||||||
let path = `${inventorySourceData.related.schedules}`;
|
let path = `${inventorySource.get().related.schedules}`;
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
ParentObject: ['inventorySourceData', function(inventorySourceData) {
|
ParentObject: ['inventorySource', function(inventorySource) {
|
||||||
return inventorySourceData;
|
return inventorySource.get();
|
||||||
}],
|
}],
|
||||||
UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q',
|
UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q',
|
||||||
function(Rest, GetBasePath, $stateParams, $q) {
|
function(Rest, GetBasePath, $stateParams, $q) {
|
||||||
@@ -29,32 +43,12 @@ export default {
|
|||||||
});
|
});
|
||||||
return val.promise;
|
return val.promise;
|
||||||
}],
|
}],
|
||||||
ScheduleList: ['SchedulesList', 'inventorySourceData',
|
ScheduleList: ['SchedulesList', 'inventorySource',
|
||||||
(SchedulesList, inventorySourceData) => {
|
(SchedulesList, inventorySource) => {
|
||||||
let list = _.cloneDeep(SchedulesList);
|
let list = _.cloneDeep(SchedulesList);
|
||||||
list.basePath = `${inventorySourceData.related.schedules}`;
|
list.basePath = `${inventorySource.get().related.schedules}`;
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
|
||||||
views: {
|
|
||||||
// clear form template when views render in this substate
|
|
||||||
'form': {
|
|
||||||
templateProvider: () => ''
|
|
||||||
},
|
|
||||||
// target the un-named ui-view @ root level
|
|
||||||
'@': {
|
|
||||||
templateProvider: function(ScheduleList, generateList, ParentObject, $filter) {
|
|
||||||
// include name of parent resource in listTitle
|
|
||||||
ScheduleList.listTitle = `${$filter('sanitize')(ParentObject.name)}<div class='List-titleLockup'></div>` + N_('SCHEDULES');
|
|
||||||
let html = generateList.build({
|
|
||||||
list: ScheduleList,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
html = generateList.wrapPanel(html);
|
|
||||||
return "<div class='InventoryManage-container'>" + generateList.insertFormView() + html + "</div>";
|
|
||||||
},
|
|
||||||
controller: 'schedulerListController'
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -222,7 +222,7 @@
|
|||||||
$scope.scheduleSource = function(id) {
|
$scope.scheduleSource = function(id) {
|
||||||
// Add this inv source's id to the array of inv source id's so that it gets
|
// Add this inv source's id to the array of inv source id's so that it gets
|
||||||
// added to the breadcrumb trail
|
// added to the breadcrumb trail
|
||||||
$state.go('inventories.edit.inventory_sources.edit.schedules', {inventory_source_id: id}, {reload: true});
|
$state.go('inventories.edit.inventory_sources.edit.schedules',{inventory_source_id: id});
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.syncAllSources = function() {
|
$scope.syncAllSources = function() {
|
||||||
|
|||||||
@@ -411,8 +411,14 @@ return {
|
|||||||
},
|
},
|
||||||
|
|
||||||
related: {
|
related: {
|
||||||
notifications: notifications_object
|
notifications: notifications_object,
|
||||||
|
schedules: {
|
||||||
|
title: i18n._('Schedules'),
|
||||||
|
skipGenerator: true,
|
||||||
|
ngClick: "$state.go('inventories.edit.inventory_sources.edit.schedules')"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}];
|
}];
|
||||||
|
|||||||
@@ -74,27 +74,7 @@ export default ['$scope', '$rootScope',
|
|||||||
};
|
};
|
||||||
|
|
||||||
$scope.scheduleJob = function(id) {
|
$scope.scheduleJob = function(id) {
|
||||||
$state.go('jobTemplateSchedules', { id: id });
|
$state.go('templates.editJobTemplate.schedules', { id: id });
|
||||||
};
|
};
|
||||||
|
|
||||||
// $scope.copyTemplate = function(id) {
|
|
||||||
// Wait('start');
|
|
||||||
// TemplateCopyService.get(id)
|
|
||||||
// .then((data) => {
|
|
||||||
// TemplateCopyService.set(data.results)
|
|
||||||
// .then((results) => {
|
|
||||||
// Wait('stop');
|
|
||||||
// if(results.type && results.type === 'job_template') {
|
|
||||||
// $state.go('templates.editJobTemplate', {job_template_id: results.id}, {reload: true});
|
|
||||||
// }
|
|
||||||
// });
|
|
||||||
// })
|
|
||||||
// .catch(({data, status}) => {
|
|
||||||
// ProcessErrors($rootScope, data, status, null, {hdr: 'Error!',
|
|
||||||
// msg: 'Call failed. Return status: '+ status});
|
|
||||||
// });
|
|
||||||
//
|
|
||||||
// };
|
|
||||||
|
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -301,7 +301,7 @@ export default ['$scope', '$rootScope', '$log', '$stateParams', 'Rest', 'Alert',
|
|||||||
$scope.editSchedules = function(id) {
|
$scope.editSchedules = function(id) {
|
||||||
var project = Find({ list: $scope.projects, key: 'id', val: id });
|
var project = Find({ list: $scope.projects, key: 'id', val: id });
|
||||||
if (!(project.scm_type === "Manual" || Empty(project.scm_type)) && !(project.status === 'updating' || project.status === 'running' || project.status === 'pending')) {
|
if (!(project.scm_type === "Manual" || Empty(project.scm_type)) && !(project.status === 'updating' || project.status === 'running' || project.status === 'pending')) {
|
||||||
$state.go('projectSchedules', { id: id });
|
$state.go('projects.edit.schedules', { project_id: id });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -156,6 +156,7 @@ export default ['$scope', '$rootScope', '$stateParams', 'ProjectsForm', 'Rest',
|
|||||||
|
|
||||||
$scope.project_obj = data;
|
$scope.project_obj = data;
|
||||||
$scope.name = data.name;
|
$scope.name = data.name;
|
||||||
|
$scope.breadcrumb.project_name = data.name;
|
||||||
$scope.$emit('projectLoaded');
|
$scope.$emit('projectLoaded');
|
||||||
Wait('stop');
|
Wait('stop');
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -332,7 +332,7 @@ export default ['$scope', '$rootScope', '$log', 'Rest', 'Alert',
|
|||||||
$scope.editSchedules = function(id) {
|
$scope.editSchedules = function(id) {
|
||||||
var project = Find({ list: $scope.projects, key: 'id', val: id });
|
var project = Find({ list: $scope.projects, key: 'id', val: id });
|
||||||
if (!(project.scm_type === "Manual" || Empty(project.scm_type)) && !(project.status === 'updating' || project.status === 'running' || project.status === 'pending')) {
|
if (!(project.scm_type === "Manual" || Empty(project.scm_type)) && !(project.status === 'updating' || project.status === 'running' || project.status === 'pending')) {
|
||||||
$state.go('projectSchedules', { id: id });
|
$state.go('projects.edit.schedules', { project_id: id });
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,11 @@ import { N_ } from '../i18n';
|
|||||||
import GetProjectPath from './factories/get-project-path.factory';
|
import GetProjectPath from './factories/get-project-path.factory';
|
||||||
import GetProjectIcon from './factories/get-project-icon.factory';
|
import GetProjectIcon from './factories/get-project-icon.factory';
|
||||||
import GetProjectToolTip from './factories/get-project-tool-tip.factory';
|
import GetProjectToolTip from './factories/get-project-tool-tip.factory';
|
||||||
|
import {
|
||||||
|
projectsSchedulesListRoute,
|
||||||
|
projectsSchedulesAddRoute,
|
||||||
|
projectsSchedulesEditRoute
|
||||||
|
} from '../scheduler/schedules.route';
|
||||||
|
|
||||||
import ProjectsTemplatesRoute from '~features/templates/routes/projectsTemplatesList.route';
|
import ProjectsTemplatesRoute from '~features/templates/routes/projectsTemplatesList.route';
|
||||||
import ProjectsStrings from './projects.strings';
|
import ProjectsStrings from './projects.strings';
|
||||||
@@ -66,6 +71,7 @@ angular.module('Projects', [])
|
|||||||
let projectTree = stateDefinitions.generateTree({
|
let projectTree = stateDefinitions.generateTree({
|
||||||
parent: 'projects', // top-most node in the generated tree (will replace this state definition)
|
parent: 'projects', // top-most node in the generated tree (will replace this state definition)
|
||||||
modes: ['add', 'edit'],
|
modes: ['add', 'edit'],
|
||||||
|
generateSchedulerView: true,
|
||||||
list: 'ProjectList',
|
list: 'ProjectList',
|
||||||
form: 'ProjectsForm',
|
form: 'ProjectsForm',
|
||||||
controllers: {
|
controllers: {
|
||||||
@@ -85,6 +91,9 @@ angular.module('Projects', [])
|
|||||||
ncyBreadcrumb: {
|
ncyBreadcrumb: {
|
||||||
label: N_('PROJECTS')
|
label: N_('PROJECTS')
|
||||||
},
|
},
|
||||||
|
breadcrumbs: {
|
||||||
|
edit: '{{breadcrumb.project_name}}'
|
||||||
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
add: projectResolve,
|
add: projectResolve,
|
||||||
edit: projectResolve
|
edit: projectResolve
|
||||||
@@ -99,6 +108,9 @@ angular.module('Projects', [])
|
|||||||
return result.concat(definition.states);
|
return result.concat(definition.states);
|
||||||
}, [
|
}, [
|
||||||
stateExtender.buildDefinition(ProjectsTemplatesRoute),
|
stateExtender.buildDefinition(ProjectsTemplatesRoute),
|
||||||
|
stateExtender.buildDefinition(projectsSchedulesListRoute),
|
||||||
|
stateExtender.buildDefinition(projectsSchedulesAddRoute),
|
||||||
|
stateExtender.buildDefinition(projectsSchedulesEditRoute)
|
||||||
])
|
])
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -285,6 +285,11 @@ export default ['i18n', 'NotificationsList', 'TemplateList',
|
|||||||
templates: {
|
templates: {
|
||||||
include: "TemplateList",
|
include: "TemplateList",
|
||||||
},
|
},
|
||||||
|
schedules: {
|
||||||
|
title: i18n._('Schedules'),
|
||||||
|
skipGenerator: true,
|
||||||
|
ngClick: "$state.go('projects.edit.schedules')"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -3,7 +3,6 @@ function editScheduleResolve () {
|
|||||||
scheduleResolve: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors',
|
scheduleResolve: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors',
|
||||||
(Rest, $stateParams, GetBasePath, ProcessErrors) => {
|
(Rest, $stateParams, GetBasePath, ProcessErrors) => {
|
||||||
var path = `${GetBasePath('schedules')}${parseInt($stateParams.schedule_id)}/`;
|
var path = `${GetBasePath('schedules')}${parseInt($stateParams.schedule_id)}/`;
|
||||||
// const path = GetBasePath('schedules') + parseInt($stateParams.schedule_id) + '/');
|
|
||||||
Rest.setUrl(path);
|
Rest.setUrl(path);
|
||||||
return Rest.get()
|
return Rest.get()
|
||||||
.then(function(data) {
|
.then(function(data) {
|
||||||
|
|||||||
@@ -7,16 +7,13 @@
|
|||||||
import listController from './schedulerList.controller';
|
import listController from './schedulerList.controller';
|
||||||
import addController from './schedulerAdd.controller';
|
import addController from './schedulerAdd.controller';
|
||||||
import editController from './schedulerEdit.controller';
|
import editController from './schedulerEdit.controller';
|
||||||
import {templateUrl} from '../shared/template-url/template-url.factory';
|
|
||||||
import schedulerDatePicker from './schedulerDatePicker.directive';
|
import schedulerDatePicker from './schedulerDatePicker.directive';
|
||||||
import { N_ } from '../i18n';
|
|
||||||
import DeleteSchedule from './factories/delete-schedule.factory';
|
import DeleteSchedule from './factories/delete-schedule.factory';
|
||||||
import RRuleToAPI from './factories/r-rule-to-api.factory';
|
import RRuleToAPI from './factories/r-rule-to-api.factory';
|
||||||
import SchedulePost from './factories/schedule-post.factory';
|
import SchedulePost from './factories/schedule-post.factory';
|
||||||
import ToggleSchedule from './factories/toggle-schedule.factory';
|
import ToggleSchedule from './factories/toggle-schedule.factory';
|
||||||
import SchedulesList from './schedules.list';
|
import SchedulesList from './schedules.list';
|
||||||
import ScheduledJobsList from './scheduled-jobs.list';
|
import ScheduledJobsList from './scheduled-jobs.list';
|
||||||
import editScheduleResolve from './editSchedule.resolve';
|
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('scheduler', [])
|
angular.module('scheduler', [])
|
||||||
@@ -29,341 +26,4 @@ export default
|
|||||||
.factory('ToggleSchedule', ToggleSchedule)
|
.factory('ToggleSchedule', ToggleSchedule)
|
||||||
.factory('SchedulesList', SchedulesList)
|
.factory('SchedulesList', SchedulesList)
|
||||||
.factory('ScheduledJobsList', ScheduledJobsList)
|
.factory('ScheduledJobsList', ScheduledJobsList)
|
||||||
.directive('schedulerDatePicker', schedulerDatePicker)
|
.directive('schedulerDatePicker', schedulerDatePicker);
|
||||||
.run(['$stateExtender', function($stateExtender) {
|
|
||||||
// Inventory sync schedule states registered in: awx/ui/client/src/inventories/manage/groups/main.js
|
|
||||||
// Scheduled jobs states registered in awx/uiclient/src/job-detail/main.js
|
|
||||||
|
|
||||||
// job templates
|
|
||||||
$stateExtender.addState({
|
|
||||||
searchPrefix: 'schedule',
|
|
||||||
name: 'jobTemplateSchedules',
|
|
||||||
route: '/templates/job_template/:id/schedules',
|
|
||||||
data: {
|
|
||||||
activityStream: true,
|
|
||||||
activityStreamTarget: 'job_template',
|
|
||||||
activityStreamId: 'id'
|
|
||||||
},
|
|
||||||
// ncyBreadcrumb: {
|
|
||||||
// parent: 'templates.editJobTemplate({job_template_id: parentObject.id})',
|
|
||||||
// label: N_('SCHEDULES')
|
|
||||||
// },
|
|
||||||
resolve: {
|
|
||||||
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath',
|
|
||||||
function(list, qs, $stateParams, GetBasePath) {
|
|
||||||
let path = `${GetBasePath('job_templates')}${$stateParams.id}/schedules`;
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
ParentObject: ['$stateParams', 'Rest', 'GetBasePath', function($stateParams, Rest, GetBasePath){
|
|
||||||
let path = `${GetBasePath('job_templates')}${$stateParams.id}`;
|
|
||||||
Rest.setUrl(path);
|
|
||||||
return Rest.get(path).then(response => response.data);
|
|
||||||
}],
|
|
||||||
UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q',
|
|
||||||
function(Rest, GetBasePath, $stateParams, $q) {
|
|
||||||
Rest.setUrl(GetBasePath('unified_jobs'));
|
|
||||||
var val = $q.defer();
|
|
||||||
Rest.options()
|
|
||||||
.then(function(data) {
|
|
||||||
val.resolve(data.data);
|
|
||||||
}, function(data) {
|
|
||||||
val.reject(data);
|
|
||||||
});
|
|
||||||
return val.promise;
|
|
||||||
}],
|
|
||||||
ScheduleList: ['SchedulesList', 'GetBasePath', '$stateParams',
|
|
||||||
(SchedulesList, GetBasePath, $stateParams) => {
|
|
||||||
let list = _.cloneDeep(SchedulesList);
|
|
||||||
list.basePath = GetBasePath('job_templates') + $stateParams.id + '/schedules/';
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'@': {
|
|
||||||
templateProvider: function(ScheduleList, generateList, ParentObject, $filter){
|
|
||||||
// include name of parent resource in listTitle
|
|
||||||
ScheduleList.listTitle = `${$filter('sanitize')(ParentObject.name)}<div class='List-titleLockup'></div>` + N_('SCHEDULES');
|
|
||||||
let html = generateList.build({
|
|
||||||
list: ScheduleList,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
html = generateList.wrapPanel(html);
|
|
||||||
return generateList.insertFormView() + html;
|
|
||||||
},
|
|
||||||
controller: 'schedulerListController'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$stateExtender.addState({
|
|
||||||
name: 'jobTemplateSchedules.add',
|
|
||||||
route: '/add',
|
|
||||||
views: {
|
|
||||||
'form': {
|
|
||||||
controller: 'schedulerAddController',
|
|
||||||
templateUrl: templateUrl("scheduler/schedulerForm"),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: 'jobTemplateSchedules',
|
|
||||||
label: N_('CREATE SCHEDULE')
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$stateExtender.addState({
|
|
||||||
name: 'jobTemplateSchedules.edit',
|
|
||||||
route: '/:schedule_id',
|
|
||||||
views: {
|
|
||||||
'form': {
|
|
||||||
controller: 'schedulerEditController',
|
|
||||||
templateUrl: templateUrl("scheduler/schedulerForm"),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: 'jobTemplateSchedules',
|
|
||||||
label: '{{schedule_obj.name}}'
|
|
||||||
},
|
|
||||||
resolve: editScheduleResolve()
|
|
||||||
});
|
|
||||||
|
|
||||||
// workflows
|
|
||||||
$stateExtender.addState({
|
|
||||||
searchPrefix: 'schedule',
|
|
||||||
name: 'workflowJobTemplateSchedules',
|
|
||||||
route: '/templates/workflow_job_template/:id/schedules',
|
|
||||||
data: {
|
|
||||||
activityStream: true,
|
|
||||||
activityStreamTarget: 'job_template',
|
|
||||||
activityStreamId: 'id'
|
|
||||||
},
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: 'templates.editWorkflowJobTemplate({workflow_job_template_id: parentObject.id})',
|
|
||||||
label: N_('SCHEDULES')
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath',
|
|
||||||
function(list, qs, $stateParams, GetBasePath) {
|
|
||||||
let path = `${GetBasePath('workflow_job_templates')}${$stateParams.id}/schedules`;
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
ParentObject: ['$stateParams', 'Rest', 'GetBasePath', function($stateParams, Rest, GetBasePath){
|
|
||||||
let path = `${GetBasePath('workflow_job_templates')}${$stateParams.id}`;
|
|
||||||
Rest.setUrl(path);
|
|
||||||
return Rest.get(path).then(response => response.data);
|
|
||||||
}],
|
|
||||||
UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q',
|
|
||||||
function(Rest, GetBasePath, $stateParams, $q) {
|
|
||||||
Rest.setUrl(GetBasePath('unified_jobs'));
|
|
||||||
var val = $q.defer();
|
|
||||||
Rest.options()
|
|
||||||
.then(function(data) {
|
|
||||||
val.resolve(data.data);
|
|
||||||
}, function(data) {
|
|
||||||
val.reject(data);
|
|
||||||
});
|
|
||||||
return val.promise;
|
|
||||||
}],
|
|
||||||
ScheduleList: ['SchedulesList', 'GetBasePath', '$stateParams',
|
|
||||||
(SchedulesList, GetBasePath, $stateParams) => {
|
|
||||||
let list = _.cloneDeep(SchedulesList);
|
|
||||||
list.basePath = GetBasePath('workflow_job_templates') + $stateParams.id + '/schedules/';
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'@': {
|
|
||||||
templateProvider: function(ScheduleList, generateList, ParentObject, $filter){
|
|
||||||
// include name of parent resource in listTitle
|
|
||||||
ScheduleList.listTitle = `${$filter('sanitize')(ParentObject.name)}<div class='List-titleLockup'></div>` + N_('SCHEDULES');
|
|
||||||
let html = generateList.build({
|
|
||||||
list: ScheduleList,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
html = generateList.wrapPanel(html);
|
|
||||||
return generateList.insertFormView() + html;
|
|
||||||
},
|
|
||||||
controller: 'schedulerListController'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$stateExtender.addState({
|
|
||||||
name: 'workflowJobTemplateSchedules.add',
|
|
||||||
route: '/add',
|
|
||||||
views: {
|
|
||||||
'form': {
|
|
||||||
controller: 'schedulerAddController',
|
|
||||||
templateUrl: templateUrl("scheduler/schedulerForm"),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: 'workflowJobTemplateSchedules',
|
|
||||||
label: N_('CREATE SCHEDULE')
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$stateExtender.addState({
|
|
||||||
name: 'workflowJobTemplateSchedules.edit',
|
|
||||||
route: '/:schedule_id',
|
|
||||||
views: {
|
|
||||||
'form': {
|
|
||||||
controller: 'schedulerEditController',
|
|
||||||
templateUrl: templateUrl("scheduler/schedulerForm"),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: 'workflowJobTemplateSchedules',
|
|
||||||
label: '{{schedule_obj.name}}'
|
|
||||||
},
|
|
||||||
resolve: editScheduleResolve()
|
|
||||||
});
|
|
||||||
// projects
|
|
||||||
$stateExtender.addState({
|
|
||||||
searchPrefix: 'schedule',
|
|
||||||
name: 'projectSchedules',
|
|
||||||
route: '/projects/:id/schedules',
|
|
||||||
data: {
|
|
||||||
activityStream: true,
|
|
||||||
activityStreamTarget: 'project',
|
|
||||||
activityStreamId: 'id'
|
|
||||||
},
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: 'projects.edit({project_id: parentObject.id})',
|
|
||||||
label: N_('SCHEDULES')
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath',
|
|
||||||
function(list, qs, $stateParams, GetBasePath) {
|
|
||||||
let path = `${GetBasePath('projects')}${$stateParams.id}/schedules`;
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
ParentObject: ['$stateParams', 'Rest', 'GetBasePath', function($stateParams, Rest, GetBasePath){
|
|
||||||
let path = `${GetBasePath('projects')}${$stateParams.id}`;
|
|
||||||
Rest.setUrl(path);
|
|
||||||
return Rest.get(path).then(response => response.data);
|
|
||||||
}],
|
|
||||||
UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q',
|
|
||||||
function(Rest, GetBasePath, $stateParams, $q) {
|
|
||||||
Rest.setUrl(GetBasePath('unified_jobs'));
|
|
||||||
var val = $q.defer();
|
|
||||||
Rest.options()
|
|
||||||
.then(function(data) {
|
|
||||||
val.resolve(data.data);
|
|
||||||
}, function(data) {
|
|
||||||
val.reject(data);
|
|
||||||
});
|
|
||||||
return val.promise;
|
|
||||||
}],
|
|
||||||
ScheduleList: ['SchedulesList', 'GetBasePath', '$stateParams',
|
|
||||||
(SchedulesList, GetBasePath, $stateParams) => {
|
|
||||||
let list = _.cloneDeep(SchedulesList);
|
|
||||||
list.basePath = GetBasePath('projects') + $stateParams.id + '/schedules/';
|
|
||||||
return list;
|
|
||||||
}
|
|
||||||
]
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'@': {
|
|
||||||
templateProvider: function(ScheduleList, generateList, ParentObject, $filter){
|
|
||||||
// include name of parent resource in listTitle
|
|
||||||
ScheduleList.listTitle = `${$filter('sanitize')(ParentObject.name)}<div class='List-titleLockup'></div>` + N_('SCHEDULES');
|
|
||||||
let html = generateList.build({
|
|
||||||
list: ScheduleList,
|
|
||||||
mode: 'edit'
|
|
||||||
});
|
|
||||||
html = generateList.wrapPanel(html);
|
|
||||||
return generateList.insertFormView() + html;
|
|
||||||
},
|
|
||||||
controller: 'schedulerListController'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
$stateExtender.addState({
|
|
||||||
name: 'projectSchedules.add',
|
|
||||||
route: '/add',
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
label: N_('CREATE SCHEDULE')
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'form': {
|
|
||||||
controller: 'schedulerAddController',
|
|
||||||
templateUrl: templateUrl("scheduler/schedulerForm"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
$stateExtender.addState({
|
|
||||||
name: 'projectSchedules.edit',
|
|
||||||
route: '/:schedule_id',
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
label: '{{schedule_obj.name}}'
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'form': {
|
|
||||||
controller: 'schedulerEditController',
|
|
||||||
templateUrl: templateUrl("scheduler/schedulerForm"),
|
|
||||||
}
|
|
||||||
},
|
|
||||||
resolve: editScheduleResolve()
|
|
||||||
});
|
|
||||||
// upcoming scheduled jobs
|
|
||||||
$stateExtender.addState({
|
|
||||||
searchPrefix: 'schedule',
|
|
||||||
name: 'jobs.schedules',
|
|
||||||
route: '/schedules',
|
|
||||||
params: {
|
|
||||||
schedule_search: {
|
|
||||||
value: {
|
|
||||||
next_run__isnull: 'false',
|
|
||||||
order_by: 'unified_job_template__polymorphic_ctype__model'
|
|
||||||
},
|
|
||||||
dynamic: true
|
|
||||||
}
|
|
||||||
},
|
|
||||||
data: {
|
|
||||||
activityStream: false,
|
|
||||||
},
|
|
||||||
ncyBreadcrumb: {
|
|
||||||
parent: 'jobs',
|
|
||||||
label: N_('SCHEDULED')
|
|
||||||
},
|
|
||||||
resolve: {
|
|
||||||
ScheduleList: ['ScheduledJobsList', function(list){
|
|
||||||
return list;
|
|
||||||
}],
|
|
||||||
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath',
|
|
||||||
function(list, qs, $stateParams, GetBasePath) {
|
|
||||||
let path = GetBasePath('schedules');
|
|
||||||
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
|
||||||
}
|
|
||||||
],
|
|
||||||
ParentObject: ['GetBasePath', (GetBasePath) =>{return {endpoint:GetBasePath('schedules')}; }],
|
|
||||||
UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q',
|
|
||||||
function(Rest, GetBasePath, $stateParams, $q) {
|
|
||||||
Rest.setUrl(GetBasePath('unified_jobs'));
|
|
||||||
var val = $q.defer();
|
|
||||||
Rest.options()
|
|
||||||
.then(function(data) {
|
|
||||||
val.resolve(data.data);
|
|
||||||
}, function(data) {
|
|
||||||
val.reject(data);
|
|
||||||
});
|
|
||||||
return val.promise;
|
|
||||||
}]
|
|
||||||
},
|
|
||||||
views: {
|
|
||||||
'schedulesList@jobs': {
|
|
||||||
templateProvider: function(ScheduleList, generateList){
|
|
||||||
let html = generateList.build({
|
|
||||||
list: ScheduleList,
|
|
||||||
mode: 'edit',
|
|
||||||
title: false
|
|
||||||
});
|
|
||||||
return html;
|
|
||||||
},
|
|
||||||
controller: 'schedulerListController'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}]);
|
|
||||||
|
|||||||
@@ -8,12 +8,12 @@ export default ['$filter', '$state', '$stateParams', '$http', 'Wait',
|
|||||||
'$scope', '$rootScope', 'CreateSelect2', 'ParseTypeChange', 'GetBasePath',
|
'$scope', '$rootScope', 'CreateSelect2', 'ParseTypeChange', 'GetBasePath',
|
||||||
'Rest', 'ParentObject', 'JobTemplateModel', '$q', 'Empty', 'SchedulePost',
|
'Rest', 'ParentObject', 'JobTemplateModel', '$q', 'Empty', 'SchedulePost',
|
||||||
'ProcessErrors', 'SchedulerInit', '$location', 'PromptService', 'RRuleToAPI', 'moment',
|
'ProcessErrors', 'SchedulerInit', '$location', 'PromptService', 'RRuleToAPI', 'moment',
|
||||||
'WorkflowJobTemplateModel', 'TemplatesStrings',
|
'WorkflowJobTemplateModel', 'TemplatesStrings', 'rbacUiControlService',
|
||||||
function($filter, $state, $stateParams, $http, Wait,
|
function($filter, $state, $stateParams, $http, Wait,
|
||||||
$scope, $rootScope, CreateSelect2, ParseTypeChange, GetBasePath,
|
$scope, $rootScope, CreateSelect2, ParseTypeChange, GetBasePath,
|
||||||
Rest, ParentObject, JobTemplate, $q, Empty, SchedulePost,
|
Rest, ParentObject, JobTemplate, $q, Empty, SchedulePost,
|
||||||
ProcessErrors, SchedulerInit, $location, PromptService, RRuleToAPI, moment,
|
ProcessErrors, SchedulerInit, $location, PromptService, RRuleToAPI, moment,
|
||||||
WorkflowJobTemplate, TemplatesStrings
|
WorkflowJobTemplate, TemplatesStrings, rbacUiControlService
|
||||||
) {
|
) {
|
||||||
|
|
||||||
var base = $scope.base || $location.path().replace(/^\//, '').split('/')[0],
|
var base = $scope.base || $location.path().replace(/^\//, '').split('/')[0],
|
||||||
@@ -21,7 +21,15 @@ export default ['$filter', '$state', '$stateParams', '$http', 'Wait',
|
|||||||
job_type;
|
job_type;
|
||||||
|
|
||||||
var schedule_url = ParentObject.related.schedules || `${ParentObject.related.inventory_source}schedules`;
|
var schedule_url = ParentObject.related.schedules || `${ParentObject.related.inventory_source}schedules`;
|
||||||
|
if (ParentObject){
|
||||||
|
$scope.parentObject = ParentObject;
|
||||||
|
let scheduleEndpoint = ParentObject.endpoint|| ParentObject.related.schedules || `${ParentObject.related.inventory_source}schedules`;
|
||||||
|
$scope.canAdd = false;
|
||||||
|
rbacUiControlService.canAdd(scheduleEndpoint)
|
||||||
|
.then(function(params) {
|
||||||
|
$scope.canAdd = params.canAdd;
|
||||||
|
});
|
||||||
|
}
|
||||||
let processSchedulerEndDt = function(){
|
let processSchedulerEndDt = function(){
|
||||||
// set the schedulerEndDt to be equal to schedulerStartDt + 1 day @ midnight
|
// set the schedulerEndDt to be equal to schedulerStartDt + 1 day @ midnight
|
||||||
var dt = new Date($scope.schedulerUTCTime);
|
var dt = new Date($scope.schedulerUTCTime);
|
||||||
@@ -90,7 +98,7 @@ export default ['$filter', '$state', '$stateParams', '$http', 'Wait',
|
|||||||
$scope.hideForm = true;
|
$scope.hideForm = true;
|
||||||
|
|
||||||
// extra_data field is not manifested in the UI when scheduling a Management Job
|
// extra_data field is not manifested in the UI when scheduling a Management Job
|
||||||
if ($state.current.name === 'jobTemplateSchedules.add'){
|
if ($state.current.name === 'templates.editJobTemplate.schedules.add'){
|
||||||
$scope.parseType = 'yaml';
|
$scope.parseType = 'yaml';
|
||||||
|
|
||||||
let jobTemplate = new JobTemplate();
|
let jobTemplate = new JobTemplate();
|
||||||
@@ -206,7 +214,7 @@ export default ['$filter', '$state', '$stateParams', '$http', 'Wait',
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if ($state.current.name === 'workflowJobTemplateSchedules.add'){
|
} else if ($state.current.name === 'templates.editWorkflowJobTemplate.schedules.add'){
|
||||||
let workflowJobTemplate = new WorkflowJobTemplate();
|
let workflowJobTemplate = new WorkflowJobTemplate();
|
||||||
|
|
||||||
$q.all([workflowJobTemplate.optionsLaunch(ParentObject.id), workflowJobTemplate.getLaunch(ParentObject.id)])
|
$q.all([workflowJobTemplate.optionsLaunch(ParentObject.id), workflowJobTemplate.getLaunch(ParentObject.id)])
|
||||||
@@ -276,8 +284,8 @@ export default ['$filter', '$state', '$stateParams', '$http', 'Wait',
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($state.current.name === 'workflowJobTemplateSchedules.add' ||
|
if ($state.current.name === 'templates.editWorkflowJobTemplate.schedules.add' ||
|
||||||
$state.current.name === 'projectSchedules.add' ||
|
$state.current.name === 'projects.edit.schedules.add' ||
|
||||||
$state.current.name === 'inventories.edit.inventory_sources.edit.schedules.add'
|
$state.current.name === 'inventories.edit.inventory_sources.edit.schedules.add'
|
||||||
){
|
){
|
||||||
$scope.noVars = true;
|
$scope.noVars = true;
|
||||||
|
|||||||
@@ -223,13 +223,16 @@ function($filter, $state, $stateParams, Wait, $scope, moment,
|
|||||||
$scope.showRRuleDetail = false;
|
$scope.showRRuleDetail = false;
|
||||||
scheduler.setRRule(schedule.rrule);
|
scheduler.setRRule(schedule.rrule);
|
||||||
scheduler.setName(schedule.name);
|
scheduler.setName(schedule.name);
|
||||||
|
$rootScope.breadcrumb.schedule_name = $scope.schedulerName;
|
||||||
|
$rootScope.breadcrumb[`${$scope.parentObject.type}_name`] = $scope.parentObject.name;
|
||||||
|
$scope.noVars = true;
|
||||||
scheduler.scope.timeZones = timezonesResolve;
|
scheduler.scope.timeZones = timezonesResolve;
|
||||||
scheduler.scope.schedulerTimeZone = scheduleResolve.timezone;
|
scheduler.scope.schedulerTimeZone = scheduleResolve.timezone;
|
||||||
if ($scope.cleanupJob){
|
if ($scope.cleanupJob){
|
||||||
$scope.schedulerPurgeDays = Number(schedule.extra_data.days);
|
$scope.schedulerPurgeDays = Number(schedule.extra_data.days);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($state.current.name === 'jobTemplateSchedules.edit'){
|
if ($state.current.name === 'templates.editJobTemplate.schedules.edit' || $scope.parentObject.type === 'job_template'){
|
||||||
|
|
||||||
let jobTemplate = new JobTemplate();
|
let jobTemplate = new JobTemplate();
|
||||||
|
|
||||||
@@ -295,7 +298,19 @@ function($filter, $state, $stateParams, Wait, $scope, moment,
|
|||||||
|
|
||||||
prompts.credentials.value = defaultCredsWithoutOverrides.concat(scheduleCredentials);
|
prompts.credentials.value = defaultCredsWithoutOverrides.concat(scheduleCredentials);
|
||||||
|
|
||||||
if (!launchConf.ask_variables_on_launch) {
|
if (launchConf.ask_variables_on_launch) {
|
||||||
|
// the extra vars codemirror is ONLY shown if the
|
||||||
|
// schedule is for a JT and the JT has
|
||||||
|
// ask_variables_on_launch = true.
|
||||||
|
$scope.extraVars = ParentObject.extra_vars === '' ? '---' : ParentObject.extra_vars;
|
||||||
|
$scope.noVars = false;
|
||||||
|
ParseTypeChange({
|
||||||
|
scope: $scope,
|
||||||
|
variable: 'extraVars',
|
||||||
|
parse_variable: 'parseType',
|
||||||
|
field_id: 'SchedulerForm-extraVars'
|
||||||
|
});
|
||||||
|
} else {
|
||||||
$scope.noVars = true;
|
$scope.noVars = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -378,7 +393,7 @@ function($filter, $state, $stateParams, Wait, $scope, moment,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
} else if ($state.current.name === 'workflowJobTemplateSchedules.edit') {
|
} else if ($state.current.name === 'templates.editWorkflowJobTemplate.schedules.edit' || $scope.parentObject.type === 'workflow_job_template') {
|
||||||
let workflowJobTemplate = new WorkflowJobTemplate();
|
let workflowJobTemplate = new WorkflowJobTemplate();
|
||||||
|
|
||||||
$q.all([workflowJobTemplate.optionsLaunch(ParentObject.id), workflowJobTemplate.getLaunch(ParentObject.id)])
|
$q.all([workflowJobTemplate.optionsLaunch(ParentObject.id), workflowJobTemplate.getLaunch(ParentObject.id)])
|
||||||
@@ -447,26 +462,10 @@ function($filter, $state, $stateParams, Wait, $scope, moment,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
|
||||||
|
|
||||||
// extra_data field is not manifested in the UI when scheduling a Management Job
|
|
||||||
if ($state.current.name !== 'managementJobsList.schedule.add' && $state.current.name !== 'managementJobsList.schedule.edit'){
|
|
||||||
if ($state.current.name === 'projectSchedules.edit' ||
|
|
||||||
$state.current.name === 'inventories.edit.inventory_sources.edit.schedules.edit' ||
|
|
||||||
$state.current.name === 'workflowJobTemplateSchedules.add'
|
|
||||||
){
|
|
||||||
$scope.noVars = true;
|
|
||||||
} else {
|
|
||||||
ParseTypeChange({
|
|
||||||
scope: $scope,
|
|
||||||
variable: 'extraVars',
|
|
||||||
parse_variable: 'parseType',
|
|
||||||
field_id: 'SchedulerForm-extraVars',
|
|
||||||
readOnly: !$scope.schedule_obj.summary_fields.user_capabilities.edit
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init();
|
init();
|
||||||
|
|
||||||
callSelect2();
|
callSelect2();
|
||||||
|
|||||||
@@ -137,14 +137,14 @@ export default [
|
|||||||
if($state.current.name.endsWith('.edit')) {
|
if($state.current.name.endsWith('.edit')) {
|
||||||
$state.go('^.add');
|
$state.go('^.add');
|
||||||
}
|
}
|
||||||
else if(!$state.current.name.endsWith('.add')) {
|
if(!$state.current.name.endsWith('.add')) {
|
||||||
$state.go('.add');
|
$state.go('.add');
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.editSchedule = function(schedule) {
|
$scope.editSchedule = function(schedule) {
|
||||||
if ($state.is('jobs.schedules')){
|
if ($state.is('jobs.schedules')){
|
||||||
routeToScheduleForm(schedule, 'edit');
|
$state.go('jobs.schedules.edit', {schedule_id: schedule.id});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if($state.current.name.endsWith('.add')) {
|
if($state.current.name.endsWith('.add')) {
|
||||||
@@ -157,75 +157,6 @@ export default [
|
|||||||
$state.go('.edit', { schedule_id: schedule.id });
|
$state.go('.edit', { schedule_id: schedule.id });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function buildStateMap(schedule){
|
|
||||||
|
|
||||||
let deferred = $q.defer();
|
|
||||||
|
|
||||||
switch(schedule.summary_fields.unified_job_template.unified_job_type){
|
|
||||||
case 'job':
|
|
||||||
deferred.resolve({
|
|
||||||
name: 'jobTemplateSchedules.edit',
|
|
||||||
params: {
|
|
||||||
id: schedule.unified_job_template,
|
|
||||||
schedule_id: schedule.id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'workflow_job':
|
|
||||||
deferred.resolve({
|
|
||||||
name: 'workflowJobTemplateSchedules.edit',
|
|
||||||
params: {
|
|
||||||
id: schedule.unified_job_template,
|
|
||||||
schedule_id: schedule.id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'inventory_update':
|
|
||||||
Rest.setUrl(schedule.related.unified_job_template);
|
|
||||||
Rest.get().then( (res) => {
|
|
||||||
deferred.resolve({
|
|
||||||
name: 'inventories.edit.inventory_sources.edit.schedules.edit',
|
|
||||||
params: {
|
|
||||||
inventory_source_id: res.data.id,
|
|
||||||
inventory_id: res.data.inventory,
|
|
||||||
schedule_id: schedule.id,
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'project_update':
|
|
||||||
deferred.resolve({
|
|
||||||
name: 'projectSchedules.edit',
|
|
||||||
params: {
|
|
||||||
id: schedule.unified_job_template,
|
|
||||||
schedule_id: schedule.id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'system_job':
|
|
||||||
deferred.resolve({
|
|
||||||
name: 'managementJobsList.schedule.edit',
|
|
||||||
params: {
|
|
||||||
id: schedule.unified_job_template,
|
|
||||||
schedule_id: schedule.id
|
|
||||||
}
|
|
||||||
});
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return deferred.promise;
|
|
||||||
}
|
|
||||||
|
|
||||||
function routeToScheduleForm(schedule){
|
|
||||||
buildStateMap(schedule).then((state) =>{
|
|
||||||
$state.go(state.name, state.params);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
$scope.toggleSchedule = function(event, id) {
|
$scope.toggleSchedule = function(event, id) {
|
||||||
|
|||||||
369
awx/ui/client/src/scheduler/schedules.route.js
Normal file
369
awx/ui/client/src/scheduler/schedules.route.js
Normal file
@@ -0,0 +1,369 @@
|
|||||||
|
import { N_ } from '../i18n';
|
||||||
|
import {templateUrl} from '../shared/template-url/template-url.factory';
|
||||||
|
import editScheduleResolve from './editSchedule.resolve';
|
||||||
|
|
||||||
|
const jobTemplatesSchedulesListRoute = {
|
||||||
|
searchPrefix: 'schedule',
|
||||||
|
name: 'templates.editJobTemplate.schedules',
|
||||||
|
route: '/schedules',
|
||||||
|
data: {
|
||||||
|
activityStream: true,
|
||||||
|
activityStreamTarget: 'job_template',
|
||||||
|
activityStreamId: 'id'
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_('SCHEDULES')
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath',
|
||||||
|
function(list, qs, $stateParams, GetBasePath) {
|
||||||
|
let path = `${GetBasePath('job_templates')}${$stateParams.job_template_id}/schedules`;
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
ParentObject: ['$stateParams', 'Rest', 'GetBasePath', function($stateParams, Rest, GetBasePath){
|
||||||
|
let path = `${GetBasePath('job_templates')}${$stateParams.job_template_id}`;
|
||||||
|
Rest.setUrl(path);
|
||||||
|
return Rest.get(path).then(response => response.data);
|
||||||
|
}],
|
||||||
|
UnifiedJobsOptions: ['Rest', 'GetBasePath', '$q',
|
||||||
|
function(Rest, GetBasePath, $q) {
|
||||||
|
Rest.setUrl(GetBasePath('unified_jobs'));
|
||||||
|
var val = $q.defer();
|
||||||
|
Rest.options()
|
||||||
|
.then(function(data) {
|
||||||
|
val.resolve(data.data);
|
||||||
|
}, function(data) {
|
||||||
|
val.reject(data);
|
||||||
|
});
|
||||||
|
return val.promise;
|
||||||
|
}],
|
||||||
|
ScheduleList: ['SchedulesList', 'GetBasePath', '$stateParams',
|
||||||
|
(SchedulesList, GetBasePath, $stateParams) => {
|
||||||
|
let list = _.cloneDeep(SchedulesList);
|
||||||
|
list.basePath = GetBasePath('job_templates') + $stateParams.job_template_id + '/schedules/';
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
related: {
|
||||||
|
templateProvider: function(ScheduleList, generateList){
|
||||||
|
ScheduleList.title = false;
|
||||||
|
let html = generateList.build({
|
||||||
|
list: ScheduleList,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'schedulerListController'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const jobTemplatesSchedulesAddRoute = {
|
||||||
|
name: 'templates.editJobTemplate.schedules.add',
|
||||||
|
route: '/add',
|
||||||
|
views: {
|
||||||
|
'scheduler@templates': {
|
||||||
|
controller: 'schedulerAddController',
|
||||||
|
templateUrl: templateUrl("scheduler/schedulerForm"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_('CREATE SCHEDULE')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const jobTemplatesSchedulesEditRoute = {
|
||||||
|
name: 'templates.editJobTemplate.schedules.edit',
|
||||||
|
route: '/:schedule_id',
|
||||||
|
views: {
|
||||||
|
'scheduler@templates': {
|
||||||
|
controller: 'schedulerEditController',
|
||||||
|
templateUrl: templateUrl("scheduler/schedulerForm"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: "{{breadcrumb.schedule_name}}"
|
||||||
|
},
|
||||||
|
resolve: editScheduleResolve()
|
||||||
|
};
|
||||||
|
|
||||||
|
// workflows
|
||||||
|
const workflowSchedulesRoute = {
|
||||||
|
searchPrefix: 'schedule',
|
||||||
|
name: 'templates.editWorkflowJobTemplate.schedules',
|
||||||
|
route: '/schedules',
|
||||||
|
data: {
|
||||||
|
activityStream: true,
|
||||||
|
activityStreamTarget: 'job_template',
|
||||||
|
activityStreamId: 'id'
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_('SCHEDULES')
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath',
|
||||||
|
function(list, qs, $stateParams, GetBasePath) {
|
||||||
|
let path = `${GetBasePath('workflow_job_templates')}${$stateParams.workflow_job_template_id}/schedules`;
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
ParentObject: ['$stateParams', 'Rest', 'GetBasePath', function($stateParams, Rest, GetBasePath){
|
||||||
|
let path = `${GetBasePath('workflow_job_templates')}${$stateParams.workflow_job_template_id}`;
|
||||||
|
Rest.setUrl(path);
|
||||||
|
return Rest.get(path).then(response => response.data);
|
||||||
|
}],
|
||||||
|
UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q',
|
||||||
|
function(Rest, GetBasePath, $stateParams, $q) {
|
||||||
|
Rest.setUrl(GetBasePath('unified_jobs'));
|
||||||
|
var val = $q.defer();
|
||||||
|
Rest.options()
|
||||||
|
.then(function(data) {
|
||||||
|
val.resolve(data.data);
|
||||||
|
}, function(data) {
|
||||||
|
val.reject(data);
|
||||||
|
});
|
||||||
|
return val.promise;
|
||||||
|
}],
|
||||||
|
ScheduleList: ['SchedulesList', 'GetBasePath', '$stateParams',
|
||||||
|
(SchedulesList, GetBasePath, $stateParams) => {
|
||||||
|
let list = _.cloneDeep(SchedulesList);
|
||||||
|
list.basePath = GetBasePath('workflow_job_templates') + $stateParams.workflow_job_template_id + '/schedules/';
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
related: {
|
||||||
|
templateProvider: function(ScheduleList, generateList){
|
||||||
|
ScheduleList.title = false;
|
||||||
|
let html = generateList.build({
|
||||||
|
list: ScheduleList,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'schedulerListController'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const workflowSchedulesAddRoute = {
|
||||||
|
name: 'templates.editWorkflowJobTemplate.schedules.add',
|
||||||
|
route: '/add',
|
||||||
|
views: {
|
||||||
|
'scheduler@templates': {
|
||||||
|
controller: 'schedulerAddController',
|
||||||
|
templateUrl: templateUrl("scheduler/schedulerForm"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_('CREATE SCHEDULE')
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const workflowSchedulesEditRoute = {
|
||||||
|
name: 'templates.editWorkflowJobTemplate.schedules.edit',
|
||||||
|
route: '/:schedule_id',
|
||||||
|
views: {
|
||||||
|
'scheduler@templates': {
|
||||||
|
controller: 'schedulerEditController',
|
||||||
|
templateUrl: templateUrl("scheduler/schedulerForm"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: '{{breadcrumb.schedule_name}}'
|
||||||
|
},
|
||||||
|
resolve: editScheduleResolve()
|
||||||
|
};
|
||||||
|
|
||||||
|
const projectsSchedulesListRoute = {
|
||||||
|
searchPrefix: 'schedule',
|
||||||
|
name: 'projects.edit.schedules',
|
||||||
|
route: '/schedules',
|
||||||
|
data: {
|
||||||
|
activityStream: true,
|
||||||
|
activityStreamTarget: 'project',
|
||||||
|
activityStreamId: 'id'
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_('SCHEDULES')
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath',
|
||||||
|
function(list, qs, $stateParams, GetBasePath) {
|
||||||
|
let path = `${GetBasePath('projects')}${$stateParams.project_id}/schedules`;
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
ParentObject: ['$stateParams', 'Rest', 'GetBasePath', function($stateParams, Rest, GetBasePath){
|
||||||
|
let path = `${GetBasePath('projects')}${$stateParams.project_id}`;
|
||||||
|
Rest.setUrl(path);
|
||||||
|
return Rest.get(path).then(response => response.data);
|
||||||
|
}],
|
||||||
|
UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q',
|
||||||
|
function(Rest, GetBasePath, $stateParams, $q) {
|
||||||
|
Rest.setUrl(GetBasePath('unified_jobs'));
|
||||||
|
var val = $q.defer();
|
||||||
|
Rest.options()
|
||||||
|
.then(function(data) {
|
||||||
|
val.resolve(data.data);
|
||||||
|
}, function(data) {
|
||||||
|
val.reject(data);
|
||||||
|
});
|
||||||
|
return val.promise;
|
||||||
|
}],
|
||||||
|
ScheduleList: ['SchedulesList', 'GetBasePath', '$stateParams',
|
||||||
|
(SchedulesList, GetBasePath, $stateParams) => {
|
||||||
|
let list = _.cloneDeep(SchedulesList);
|
||||||
|
list.basePath = GetBasePath('projects') + $stateParams.project_id + '/schedules/';
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
related: {
|
||||||
|
templateProvider: function(ScheduleList, generateList){
|
||||||
|
ScheduleList.title = false;
|
||||||
|
let html = generateList.build({
|
||||||
|
list: ScheduleList,
|
||||||
|
mode: 'edit'
|
||||||
|
});
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'schedulerListController'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const projectsSchedulesAddRoute = {
|
||||||
|
name: 'projects.edit.schedules.add',
|
||||||
|
route: '/add',
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: N_('CREATE SCHEDULE')
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'scheduler@projects': {
|
||||||
|
controller: 'schedulerAddController',
|
||||||
|
templateUrl: templateUrl("scheduler/schedulerForm"),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
const projectsSchedulesEditRoute = {
|
||||||
|
name: 'projects.edit.schedules.edit',
|
||||||
|
route: '/:schedule_id',
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
label: "{{breadcrumb.schedule_name}}"
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'scheduler@projects': {
|
||||||
|
controller: 'schedulerEditController',
|
||||||
|
templateUrl: templateUrl("scheduler/schedulerForm"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: editScheduleResolve()
|
||||||
|
};
|
||||||
|
|
||||||
|
const jobsSchedulesRoute = {
|
||||||
|
searchPrefix: 'schedule',
|
||||||
|
name: 'jobs.schedules',
|
||||||
|
route: '/schedules',
|
||||||
|
params: {
|
||||||
|
schedule_search: {
|
||||||
|
value: {
|
||||||
|
next_run__isnull: 'false',
|
||||||
|
order_by: 'unified_job_template__polymorphic_ctype__model'
|
||||||
|
},
|
||||||
|
dynamic: true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
data: {
|
||||||
|
activityStream: false,
|
||||||
|
},
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: 'jobs',
|
||||||
|
label: N_('SCHEDULES')
|
||||||
|
},
|
||||||
|
resolve: {
|
||||||
|
ScheduleList: ['ScheduledJobsList', function(list){
|
||||||
|
return list;
|
||||||
|
}],
|
||||||
|
Dataset: ['ScheduleList', 'QuerySet', '$stateParams', 'GetBasePath',
|
||||||
|
function(list, qs, $stateParams, GetBasePath) {
|
||||||
|
let path = GetBasePath('schedules');
|
||||||
|
return qs.search(path, $stateParams[`${list.iterator}_search`]);
|
||||||
|
}
|
||||||
|
],
|
||||||
|
ParentObject: ['GetBasePath', (GetBasePath) =>{return {endpoint:GetBasePath('schedules')}; }],
|
||||||
|
UnifiedJobsOptions: ['Rest', 'GetBasePath', '$stateParams', '$q',
|
||||||
|
function(Rest, GetBasePath, $stateParams, $q) {
|
||||||
|
Rest.setUrl(GetBasePath('unified_jobs'));
|
||||||
|
var val = $q.defer();
|
||||||
|
Rest.options()
|
||||||
|
.then(function(data) {
|
||||||
|
val.resolve(data.data);
|
||||||
|
}, function(data) {
|
||||||
|
val.reject(data);
|
||||||
|
});
|
||||||
|
return val.promise;
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'schedulesList@jobs': {
|
||||||
|
templateProvider: function(ScheduleList, generateList){
|
||||||
|
let html = generateList.build({
|
||||||
|
list: ScheduleList,
|
||||||
|
mode: 'edit',
|
||||||
|
title: false
|
||||||
|
});
|
||||||
|
return html;
|
||||||
|
},
|
||||||
|
controller: 'schedulerListController'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// the /#/jobs/schedules/:schedule_id state needs to know about the type of
|
||||||
|
// resource is being scheduled.
|
||||||
|
const parentResolve = {
|
||||||
|
ParentObject: ['$stateParams', 'Rest', 'GetBasePath', 'scheduleResolve',
|
||||||
|
function($stateParams, Rest, GetBasePath, scheduleResolve){
|
||||||
|
let path = scheduleResolve.related.unified_job_template;
|
||||||
|
Rest.setUrl(path);
|
||||||
|
return Rest.get(path).then(response => response.data);
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
const jobsSchedulesEditRoute = {
|
||||||
|
name: 'jobs.schedules.edit',
|
||||||
|
route: '/:schedule_id',
|
||||||
|
ncyBreadcrumb: {
|
||||||
|
parent: 'jobs.schedules',
|
||||||
|
label: "{{breadcrumb.schedule_name}}"
|
||||||
|
},
|
||||||
|
views: {
|
||||||
|
'scheduler@jobs': {
|
||||||
|
controller: 'schedulerEditController',
|
||||||
|
templateUrl: templateUrl("scheduler/schedulerForm"),
|
||||||
|
}
|
||||||
|
},
|
||||||
|
resolve: _.merge(editScheduleResolve(), parentResolve)
|
||||||
|
};
|
||||||
|
|
||||||
|
export {
|
||||||
|
jobTemplatesSchedulesListRoute,
|
||||||
|
jobTemplatesSchedulesAddRoute,
|
||||||
|
jobTemplatesSchedulesEditRoute,
|
||||||
|
workflowSchedulesRoute,
|
||||||
|
workflowSchedulesAddRoute,
|
||||||
|
workflowSchedulesEditRoute,
|
||||||
|
projectsSchedulesListRoute,
|
||||||
|
projectsSchedulesAddRoute,
|
||||||
|
projectsSchedulesEditRoute,
|
||||||
|
jobsSchedulesRoute,
|
||||||
|
jobsSchedulesEditRoute
|
||||||
|
};
|
||||||
@@ -594,6 +594,10 @@ export default ['$compile', 'Attr', 'Icon',
|
|||||||
|
|
||||||
insertFormView: function(){
|
insertFormView: function(){
|
||||||
return `<div ui-view="form"></div>`;
|
return `<div ui-view="form"></div>`;
|
||||||
|
},
|
||||||
|
|
||||||
|
insertSchedulerView: function(){
|
||||||
|
return `<div ui-view="scheduler"></div>`;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -86,7 +86,11 @@ function($injector, $stateExtender, $log, i18n) {
|
|||||||
});
|
});
|
||||||
html = generateList.wrapPanel(html);
|
html = generateList.wrapPanel(html);
|
||||||
// generateList.formView() inserts a ui-view="form" inside the list view's hierarchy
|
// generateList.formView() inserts a ui-view="form" inside the list view's hierarchy
|
||||||
return generateList.insertFormView() + html;
|
html = generateList.insertFormView() + html;
|
||||||
|
if(params.generateSchedulerView){
|
||||||
|
html = generateList.insertSchedulerView() + html;
|
||||||
|
}
|
||||||
|
return html;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -278,6 +278,7 @@ export default
|
|||||||
$scope.removeLoadJobs = $scope.$on('LoadJobs', function() {
|
$scope.removeLoadJobs = $scope.$on('LoadJobs', function() {
|
||||||
$scope.job_template_obj = jobTemplateData;
|
$scope.job_template_obj = jobTemplateData;
|
||||||
$scope.name = jobTemplateData.name;
|
$scope.name = jobTemplateData.name;
|
||||||
|
$scope.breadcrumb.job_template_name = jobTemplateData.name;
|
||||||
var fld, i;
|
var fld, i;
|
||||||
for (fld in form.fields) {
|
for (fld in form.fields) {
|
||||||
if (fld !== 'extra_vars' && fld !== 'survey' && fld !== 'forks' && jobTemplateData[fld] !== null && jobTemplateData[fld] !== undefined) {
|
if (fld !== 'extra_vars' && fld !== 'survey' && fld !== 'forks' && jobTemplateData[fld] !== null && jobTemplateData[fld] !== undefined) {
|
||||||
|
|||||||
@@ -438,6 +438,11 @@ function(NotificationsList, i18n) {
|
|||||||
title: i18n._('Completed Jobs'),
|
title: i18n._('Completed Jobs'),
|
||||||
skipGenerator: true,
|
skipGenerator: true,
|
||||||
ngClick: "$state.go('templates.editJobTemplate.completed_jobs')"
|
ngClick: "$state.go('templates.editJobTemplate.completed_jobs')"
|
||||||
|
},
|
||||||
|
"schedules": {
|
||||||
|
title: i18n._('Schedules'),
|
||||||
|
skipGenerator: true,
|
||||||
|
ngClick: "$state.go('templates.editJobTemplate.schedules')"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -21,6 +21,14 @@ import TemplateList from './templates.list';
|
|||||||
import listRoute from '~features/templates/routes/templatesList.route.js';
|
import listRoute from '~features/templates/routes/templatesList.route.js';
|
||||||
import templateCompletedJobsRoute from '~features/jobs/routes/templateCompletedJobs.route.js';
|
import templateCompletedJobsRoute from '~features/jobs/routes/templateCompletedJobs.route.js';
|
||||||
import workflowJobTemplateCompletedJobsRoute from '~features/jobs/routes/workflowJobTemplateCompletedJobs.route.js';
|
import workflowJobTemplateCompletedJobsRoute from '~features/jobs/routes/workflowJobTemplateCompletedJobs.route.js';
|
||||||
|
import {
|
||||||
|
jobTemplatesSchedulesListRoute,
|
||||||
|
jobTemplatesSchedulesAddRoute,
|
||||||
|
jobTemplatesSchedulesEditRoute,
|
||||||
|
workflowSchedulesRoute,
|
||||||
|
workflowSchedulesAddRoute,
|
||||||
|
workflowSchedulesEditRoute
|
||||||
|
} from '../scheduler/schedules.route';
|
||||||
|
|
||||||
export default
|
export default
|
||||||
angular.module('templates', [surveyMaker.name, jobTemplates.name, labels.name, prompt.name, workflowAdd.name, workflowEdit.name,
|
angular.module('templates', [surveyMaker.name, jobTemplates.name, labels.name, prompt.name, workflowAdd.name, workflowEdit.name,
|
||||||
@@ -156,6 +164,9 @@ angular.module('templates', [surveyMaker.name, jobTemplates.name, labels.name, p
|
|||||||
activityStreamTarget: 'job_template',
|
activityStreamTarget: 'job_template',
|
||||||
activityStreamId: 'job_template_id'
|
activityStreamId: 'job_template_id'
|
||||||
},
|
},
|
||||||
|
breadcrumbs: {
|
||||||
|
edit: '{{breadcrumb.job_template_name}}'
|
||||||
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
edit: {
|
edit: {
|
||||||
jobTemplateData: ['$stateParams', 'TemplatesService', 'ProcessErrors',
|
jobTemplateData: ['$stateParams', 'TemplatesService', 'ProcessErrors',
|
||||||
@@ -338,6 +349,9 @@ angular.module('templates', [surveyMaker.name, jobTemplates.name, labels.name, p
|
|||||||
activityStreamTarget: 'workflow_job_template',
|
activityStreamTarget: 'workflow_job_template',
|
||||||
activityStreamId: 'workflow_job_template_id'
|
activityStreamId: 'workflow_job_template_id'
|
||||||
},
|
},
|
||||||
|
breadcrumbs: {
|
||||||
|
edit: '{{breadcrumb.workflow_job_template_name}}'
|
||||||
|
},
|
||||||
resolve: {
|
resolve: {
|
||||||
edit: {
|
edit: {
|
||||||
availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService',
|
availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService',
|
||||||
@@ -748,7 +762,13 @@ angular.module('templates', [surveyMaker.name, jobTemplates.name, labels.name, p
|
|||||||
stateExtender.buildDefinition(listRoute),
|
stateExtender.buildDefinition(listRoute),
|
||||||
stateExtender.buildDefinition(templateCompletedJobsRoute),
|
stateExtender.buildDefinition(templateCompletedJobsRoute),
|
||||||
stateExtender.buildDefinition(workflowJobTemplateCompletedJobsRoute),
|
stateExtender.buildDefinition(workflowJobTemplateCompletedJobsRoute),
|
||||||
stateExtender.buildDefinition(workflowMaker)
|
stateExtender.buildDefinition(workflowMaker),
|
||||||
|
stateExtender.buildDefinition(jobTemplatesSchedulesListRoute),
|
||||||
|
stateExtender.buildDefinition(jobTemplatesSchedulesAddRoute),
|
||||||
|
stateExtender.buildDefinition(jobTemplatesSchedulesEditRoute),
|
||||||
|
stateExtender.buildDefinition(workflowSchedulesRoute),
|
||||||
|
stateExtender.buildDefinition(workflowSchedulesAddRoute),
|
||||||
|
stateExtender.buildDefinition(workflowSchedulesEditRoute)
|
||||||
])
|
])
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -181,6 +181,11 @@ export default ['NotificationsList', 'i18n', function(NotificationsList, i18n) {
|
|||||||
title: i18n._('Completed Jobs'),
|
title: i18n._('Completed Jobs'),
|
||||||
skipGenerator: true,
|
skipGenerator: true,
|
||||||
ngClick: "$state.go('templates.editWorkflowJobTemplate.completed_jobs')"
|
ngClick: "$state.go('templates.editWorkflowJobTemplate.completed_jobs')"
|
||||||
|
},
|
||||||
|
"schedules": {
|
||||||
|
title: i18n._('Schedules'),
|
||||||
|
skipGenerator: true,
|
||||||
|
ngClick: "$state.go('templates.editWorkflowJobTemplate.schedules')"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -264,6 +264,7 @@ export default [
|
|||||||
$scope.workflow_job_template_obj = workflowJobTemplateData;
|
$scope.workflow_job_template_obj = workflowJobTemplateData;
|
||||||
$scope.name = workflowJobTemplateData.name;
|
$scope.name = workflowJobTemplateData.name;
|
||||||
$scope.can_edit = workflowJobTemplateData.summary_fields.user_capabilities.edit;
|
$scope.can_edit = workflowJobTemplateData.summary_fields.user_capabilities.edit;
|
||||||
|
$scope.breadcrumb.workflow_job_template_name = $scope.name;
|
||||||
let fld, i;
|
let fld, i;
|
||||||
for (fld in form.fields) {
|
for (fld in form.fields) {
|
||||||
if (fld !== 'variables' && fld !== 'survey' && workflowJobTemplateData[fld] !== null && workflowJobTemplateData[fld] !== undefined) {
|
if (fld !== 'variables' && fld !== 'survey' && workflowJobTemplateData[fld] !== null && workflowJobTemplateData[fld] !== undefined) {
|
||||||
|
|||||||
Reference in New Issue
Block a user