diff --git a/awx/ui/client/src/helpers/Schedules.js b/awx/ui/client/src/helpers/Schedules.js index 0924170311..9b7566e678 100644 --- a/awx/ui/client/src/helpers/Schedules.js +++ b/awx/ui/client/src/helpers/Schedules.js @@ -214,19 +214,18 @@ export default return function(params) { var scope = params.scope, callback= params.callback, - base = $location.path().replace(/^\//, '').split('/')[0], + base = params.base || $location.path().replace(/^\//, '').split('/')[0], url = GetBasePath(base), scheduler; - if (!Empty($stateParams.template_id)) { url += $stateParams.template_id + '/schedules/'; } - else if (!Empty($stateParams.id)) { + else if (!Empty($stateParams.id) && base != 'system_job_templates') { url += $stateParams.id + '/schedules/'; } - else if (!Empty($stateParams.management_job)) { - url += $stateParams.management_job + '/schedules/'; - if(scope.management_job.id === 4){ + else if (base == 'system_job_templates') { + url += $stateParams.id + '/schedules/'; + if($stateParams.id == 4){ scope.isFactCleanup = true; scope.keep_unit_choices = [{ "label" : "Days", @@ -538,7 +537,7 @@ export default var scope = params.scope, parent_scope = params.parent_scope, iterator = (params.iterator) ? params.iterator : scope.iterator, - base = $location.path().replace(/^\//, '').split('/')[0]; + base = params.base || $location.path().replace(/^\//, '').split('/')[0]; scope.toggleSchedule = function(event, id) { try { diff --git a/awx/ui/client/src/management-jobs/card/card.controller.js b/awx/ui/client/src/management-jobs/card/card.controller.js index e9d5c4409c..b74926f652 100644 --- a/awx/ui/client/src/management-jobs/card/card.controller.js +++ b/awx/ui/client/src/management-jobs/card/card.controller.js @@ -238,10 +238,9 @@ export default } }; - $scope.configureSchedule = function() { - $state.transitionTo('managementJobsSchedule', { - management_job: this.job_type, - management_job_id: this.card.id + $scope.configureSchedule = function(id) { + $state.transitionTo('managementJobSchedules', { + id: id }); }; diff --git a/awx/ui/client/src/management-jobs/card/card.partial.html b/awx/ui/client/src/management-jobs/card/card.partial.html index 3b4cfec9ba..17332be2bc 100644 --- a/awx/ui/client/src/management-jobs/card/card.partial.html +++ b/awx/ui/client/src/management-jobs/card/card.partial.html @@ -11,7 +11,7 @@ diff --git a/awx/ui/client/src/management-jobs/main.js b/awx/ui/client/src/management-jobs/main.js index b374b84857..e881baa0fb 100644 --- a/awx/ui/client/src/management-jobs/main.js +++ b/awx/ui/client/src/management-jobs/main.js @@ -1,16 +1,16 @@ /************************************************* - * Copyright (c) 2015 Ansible, Inc. + * Copyright (c) 2016 Ansible, Inc. * * All Rights Reserved *************************************************/ import managementJobsCard from './card/main'; -import managementJobsSchedule from './schedule/main'; +import managementJobsScheduler from './scheduler/main'; import list from './management-jobs.list'; export default angular.module('managementJobs', [ managementJobsCard.name, - managementJobsSchedule.name + managementJobsScheduler.name ]) .factory('managementJobsListObject', list); diff --git a/awx/ui/client/src/management-jobs/schedule/main.js b/awx/ui/client/src/management-jobs/schedule/main.js deleted file mode 100644 index e71036c9d6..0000000000 --- a/awx/ui/client/src/management-jobs/schedule/main.js +++ /dev/null @@ -1,15 +0,0 @@ -/************************************************* - * Copyright (c) 2015 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -import route from './schedule.route'; -import controller from './schedule.controller'; - -export default - angular.module('managementJobsSchedule', []) - .controller('managementJobsScheduleController', controller) - .run(['$stateExtender', function($stateExtender) { - $stateExtender.addState(route); - }]); diff --git a/awx/ui/client/src/management-jobs/schedule/schedule.controller.js b/awx/ui/client/src/management-jobs/schedule/schedule.controller.js deleted file mode 100644 index c83b378674..0000000000 --- a/awx/ui/client/src/management-jobs/schedule/schedule.controller.js +++ /dev/null @@ -1,89 +0,0 @@ -/************************************************* - * Copyright (c) 2015 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -/** - * @ngdoc function - * @name controllers.function:Schedules - * @description This controller's for schedules -*/ - -export default [ - '$scope', '$location', '$stateParams', 'SchedulesList', 'Rest', - 'ProcessErrors', 'GetBasePath', 'Wait','LoadSchedulesScope', 'GetChoices', - 'management_job', '$rootScope', - function($scope, $location, $stateParams, SchedulesList, Rest, - ProcessErrors, GetBasePath, Wait, LoadSchedulesScope, GetChoices, - management_job, $rootScope) { - var base, id, url, parentObject; - $scope.management_job = management_job; - base = $location.path().replace(/^\//, '').split('/')[0]; - - // GetBasePath('management_job') must map to 'system_job_templates' - // to match the api syntax - $rootScope.defaultUrls.management_jobs = 'api/v1/system_job_templates/'; - - if ($scope.removePostRefresh) { - $scope.removePostRefresh(); - } - $scope.removePostRefresh = $scope.$on('PostRefresh', function() { - var list = $scope.schedules; - list.forEach(function(element, idx) { - list[idx].play_tip = (element.enabled) ? 'Schedule is Active.'+ - ' Click to temporarily stop.' : 'Schedule is temporarily '+ - 'stopped. Click to activate.'; - }); - }); - - if ($scope.removeParentLoaded) { - $scope.removeParentLoaded(); - } - $scope.removeParentLoaded = $scope.$on('ParentLoaded', function() { - url += "schedules/"; - SchedulesList.well = true; - LoadSchedulesScope({ - parent_scope: $scope, - scope: $scope, - list: SchedulesList, - id: 'management_jobs_schedule', - url: url, - pageSize: 20 - }); - }); - - if ($scope.removeChoicesReady) { - $scope.removeChocesReady(); - } - $scope.removeChoicesReady = $scope.$on('choicesReady', function() { - // Load the parent object - id = $stateParams.management_job_id; - url = GetBasePath('system_job_templates') + id + '/'; - Rest.setUrl(url); - Rest.get() - .success(function(data) { - parentObject = data; - $scope.$emit('ParentLoaded'); - }) - .error(function(data, status) { - ProcessErrors($scope, data, status, null, { hdr: 'Error!', - msg: 'Call to ' + url + ' failed. GET returned: ' + status }); - }); - }); - - $scope.refreshJobs = function() { - $scope.search(SchedulesList.iterator); - }; - - Wait('start'); - - GetChoices({ - scope: $scope, - url: GetBasePath('system_jobs'), - field: 'type', - variable: 'type_choices', - callback: 'choicesReady' - }); - } -]; diff --git a/awx/ui/client/src/management-jobs/schedule/schedule.partial.html b/awx/ui/client/src/management-jobs/schedule/schedule.partial.html deleted file mode 100644 index 43b01efc55..0000000000 --- a/awx/ui/client/src/management-jobs/schedule/schedule.partial.html +++ /dev/null @@ -1,6 +0,0 @@ -
-
-
- -
-
diff --git a/awx/ui/client/src/management-jobs/schedule/schedule.route.js b/awx/ui/client/src/management-jobs/schedule/schedule.route.js deleted file mode 100644 index 837d6dfb86..0000000000 --- a/awx/ui/client/src/management-jobs/schedule/schedule.route.js +++ /dev/null @@ -1,51 +0,0 @@ -/************************************************* - * Copyright (c) 2015 Ansible, Inc. - * - * All Rights Reserved - *************************************************/ - -import {templateUrl} from '../../shared/template-url/template-url.factory'; - -export default { - name: 'managementJobsSchedule', - route: '/management_jobs/:management_job_id/schedules', - templateUrl: templateUrl('management-jobs/schedule/schedule'), - controller: 'managementJobsScheduleController', - data: { - activityStream: true, - activityStreamTarget: 'schedule' - }, - params: {management_job: null}, - resolve: { - features: ['FeaturesService', function(FeaturesService) { - return FeaturesService.get(); - }], - management_job: - [ '$stateParams', - '$q', - 'Rest', - 'GetBasePath', - 'ProcessErrors', - function($stateParams, $q, rest, getBasePath, ProcessErrors) { - if ($stateParams.management_job) { - return $q.when($stateParams.management_job); - } - - var managementJobId = $stateParams.management_job_id; - - var url = getBasePath('system_job_templates') + managementJobId + '/'; - rest.setUrl(url); - return rest.get() - .then(function(data) { - return data.data; - }).catch(function (response) { - ProcessErrors(null, response.data, response.status, null, { - hdr: 'Error!', - msg: 'Failed to get inventory script info. GET returned status: ' + - response.status - }); - }); - } - ] - } -}; diff --git a/awx/ui/client/src/management-jobs/scheduler/main.js b/awx/ui/client/src/management-jobs/scheduler/main.js new file mode 100644 index 0000000000..49498debbd --- /dev/null +++ b/awx/ui/client/src/management-jobs/scheduler/main.js @@ -0,0 +1,52 @@ +/************************************************* + * Copyright (c) 2016 Ansible, Inc. + * + * All Rights Reserved + *************************************************/ + + +import {templateUrl} from '../../shared/template-url/template-url.factory'; +import controller from '../../scheduler/scheduler.controller'; +import addController from '../../scheduler/schedulerAdd.controller'; +import editController from '../../scheduler/schedulerEdit.controller'; + +export default + angular.module('managementJobScheduler', []) + .controller('managementJobController', controller) + .controller('managementJobAddController', addController) + .controller('managementJobEditController', editController) + .run(['$stateExtender', function($stateExtender){ + $stateExtender.addState({ + name: 'managementJobSchedules', + route: '/management_jobs/:id/schedules', + templateUrl: templateUrl('scheduler/scheduler'), + controller: 'managementJobController', + resolve: { + features: ['FeaturesService', function(FeaturesService){ + return FeaturesService.get(); + }] + } + }); + $stateExtender.addState({ + name: 'managementJobSchedules.add', + route: '/add', + templateUrl: templateUrl('management-jobs/scheduler/schedulerForm'), + controller: 'managementJobAddController', + resolve: { + features: ['FeaturesService', function(FeaturesService){ + return FeaturesService.get(); + }] + } + }); + $stateExtender.addState({ + name: 'managementJobSchedules.edit', + route: '/add', + templateUrl: templateUrl('management-jobs/scheduler/schedulerForm'), + controller: 'managementJobEditController', + resolve: { + features: ['FeaturesService', function(FeaturesService){ + return FeaturesService.get(); + }] + } + }); + }]); \ No newline at end of file diff --git a/awx/ui/client/src/management-jobs/scheduler/schedulerForm.partial.html b/awx/ui/client/src/management-jobs/scheduler/schedulerForm.partial.html new file mode 100644 index 0000000000..a838db96a5 --- /dev/null +++ b/awx/ui/client/src/management-jobs/scheduler/schedulerForm.partial.html @@ -0,0 +1,652 @@ +
+
+
{{ schedulerName || "Add Schedule"}}
+
{{ schedulerName || "Edit Schedule"}}
+
+ +
+
+
+ +
+ +
+ + +
+ A schedule name is required. +
+
+
+ +
+ + + + +
+
+
+
+
+ +
+ + + : + + + + : + + + +
+
+ The time must be in HH24:MM:SS format. +
+
+
+ + +
+
+ + +
+
+
+
+ Frequency Details
+
+
+ + + +
+ Please provide a value between 1 and 999. +
+
+
+
+ +
+ +
+ The day must be between 1 and 31. +
+
+
+
+ +
+
+ + +
+
+
+
+ * + +
+
+ + +
+
+ The day must be between 1 and 31. +
+
+
+
+ +
+
+ + + +
+
+
+ +
+
+ + + + + + + +
+
+
+ Please select one or more days. +
+
+
+ +
+ +
+
+
+ + +
+ Please provide a value between 1 and 999. +
+
+
+ +
+ + + + +
+
+ Please provide a valid date. +
+
+
+
+
+ +
+ Note: For facts collected older than the time period specified, save one fact scan (snapshot) per time window (frequency). For example, facts older than 30 days are purged, while one weekly fact scan is kept. + Caution: Setting both numerical variables to "0" will delete all facts.
+ +
+ + +
A value is required.
+
This is not a valid number.
+
+ +
+
+ +
+
+ +
Please enter the number of days you would like to keep this data.
+
Please enter a valid number.
+
Please enter a non-negative number.
+
Please enter a number smaller than 9999.
+
+
+ +
+
+ +
+
+ +
+
+ +
Please enter the number of days you would like to keep this data.
+
Please enter a valid number.
+
Please enter a non-negative number.
+
Please enter a number smaller than 9999.
+
+
+ +
+
+ +
+
+

+ The scheduler options are invalid or incomplete. +

+
+
+ +
+ {{ rrule_nlp_description }} +
+
+ +
+ + + +
+
+
    +
  • + {{ occurrence.utc }} +
  • +
+
    +
  • + {{ occurrence.local }} +
  • +
+
+ +
+ + +
+
+
diff --git a/awx/ui/client/src/scheduler/scheduler.controller.js b/awx/ui/client/src/scheduler/scheduler.controller.js index d53ea19e28..d1209b91da 100644 --- a/awx/ui/client/src/scheduler/scheduler.controller.js +++ b/awx/ui/client/src/scheduler/scheduler.controller.js @@ -21,9 +21,13 @@ export default [ ClearScope(); var base, e, id, url, parentObject; - base = $location.path().replace(/^\//, '').split('/')[0]; - + if (base == 'management_jobs') { + $scope.base = base = 'system_job_templates'; + } + if ($stateParams.job_type){ + $scope.job_type = $stateParams.job_type; + } if ($scope.removePostRefresh) { $scope.removePostRefresh(); } diff --git a/awx/ui/client/src/scheduler/schedulerAdd.controller.js b/awx/ui/client/src/scheduler/schedulerAdd.controller.js index 26be29c03a..a278af8a28 100644 --- a/awx/ui/client/src/scheduler/schedulerAdd.controller.js +++ b/awx/ui/client/src/scheduler/schedulerAdd.controller.js @@ -47,7 +47,8 @@ export default ['$compile', '$state', '$stateParams', 'AddSchedule', 'Wait', '$s AddSchedule({ scope: $scope, - callback: 'SchedulesRefresh' + callback: 'SchedulesRefresh', + base: $scope.base ? $scope.base : null }); var callSelect2 = function() { diff --git a/awx/ui/client/src/scheduler/schedulerEdit.controller.js b/awx/ui/client/src/scheduler/schedulerEdit.controller.js index fb8d8052b5..05e9d7eef3 100644 --- a/awx/ui/client/src/scheduler/schedulerEdit.controller.js +++ b/awx/ui/client/src/scheduler/schedulerEdit.controller.js @@ -51,7 +51,8 @@ export default ['$compile', '$state', '$stateParams', 'EditSchedule', 'Wait', '$ EditSchedule({ scope: $scope, id: parseInt($stateParams.schedule_id), - callback: 'SchedulesRefresh' + callback: 'SchedulesRefresh', + base: $scope.base ? $scope.base: null }); var callSelect2 = function() {