diff --git a/awx/ui/client/src/helpers/Schedules.js b/awx/ui/client/src/helpers/Schedules.js index 9b7566e678..35f5023b06 100644 --- a/awx/ui/client/src/helpers/Schedules.js +++ b/awx/ui/client/src/helpers/Schedules.js @@ -173,8 +173,8 @@ export default } $state.go("^"); }); - scope.saveSchedule = function() { + schedule.extra_data = scope.serializedExtraVars; SchedulePost({ scope: scope, url: url, @@ -192,6 +192,7 @@ export default Rest.get() .success(function(data) { schedule = data; + scope.serializedExtraVars = schedule.extra_data; if(schedule.extra_data.hasOwnProperty('granularity')){ scope.isFactCleanup = true; } @@ -312,7 +313,6 @@ export default schedule = (params.schedule) ? params.schedule : {}, callback = params.callback, newSchedule, rrule, extra_vars; - if (scheduler.isValid()) { Wait('start'); newSchedule = scheduler.getValue(); @@ -326,14 +326,16 @@ export default "older_than": scope.scheduler_form.keep_amount.$viewValue + scope.scheduler_form.keep_unit.$viewValue.value, "granularity": scope.scheduler_form.granularity_keep_amount.$viewValue + scope.scheduler_form.granularity_keep_unit.$viewValue.value }; + schedule.extra_data = JSON.stringify(extra_vars); } else if (scope.cleanupJob) { extra_vars = { "days" : scope.scheduler_form.schedulerPurgeDays.$viewValue }; + schedule.extra_data = JSON.stringify(extra_vars); + } + else if (scope.serializedExtraVars){ + schedule.extra_data = scope.serializedExtraVars; } - schedule.extra_data = JSON.stringify(extra_vars); - - Rest.setUrl(url); if (mode === 'add') { Rest.post(schedule) diff --git a/awx/ui/client/src/lists/Schedules.js b/awx/ui/client/src/lists/Schedules.js index 2dfe3fc120..9159862976 100644 --- a/awx/ui/client/src/lists/Schedules.js +++ b/awx/ui/client/src/lists/Schedules.js @@ -52,7 +52,7 @@ export default filter: "longDate", searchable: false, columnClass: "List-staticColumn--schedulerTime hidden-xs" - } + }, }, actions: { diff --git a/awx/ui/client/src/scheduler/main.js b/awx/ui/client/src/scheduler/main.js index 46fa46d94e..5d322e828f 100644 --- a/awx/ui/client/src/scheduler/main.js +++ b/awx/ui/client/src/scheduler/main.js @@ -34,7 +34,15 @@ export default resolve: { features: ['FeaturesService', function(FeaturesService) { return FeaturesService.get(); - }] + }], + JobTemplateExtraVars: ['Rest', 'GetBasePath', 'ToJSON', '$stateParams', function(Rest, GetBasePath, ToJSON, $stateParams) { + var defaultUrl = GetBasePath('job_templates') + $stateParams.id + '/'; + Rest.setUrl(defaultUrl); + return Rest.get().then(function(res){ + // handle unescaped newlines + return JSON.parse(JSON.stringify(res.data.extra_vars)) + }); + }] } }); $stateExtender.addState({ diff --git a/awx/ui/client/src/scheduler/schedulerAdd.controller.js b/awx/ui/client/src/scheduler/schedulerAdd.controller.js index a278af8a28..3022092a6f 100644 --- a/awx/ui/client/src/scheduler/schedulerAdd.controller.js +++ b/awx/ui/client/src/scheduler/schedulerAdd.controller.js @@ -1,4 +1,4 @@ -export default ['$compile', '$state', '$stateParams', 'AddSchedule', 'Wait', '$scope', '$rootScope', 'CreateSelect2', function($compile, $state, $stateParams, AddSchedule, Wait, $scope, $rootScope, CreateSelect2) { +export default ['$compile', '$state', '$stateParams', 'AddSchedule', 'Wait', '$scope', '$rootScope', 'CreateSelect2', 'ParseTypeChange', 'JobTemplateExtraVars', function($compile, $state, $stateParams, AddSchedule, Wait, $scope, $rootScope, CreateSelect2, ParseTypeChange, JobTemplateExtraVars) { $scope.$on("ScheduleFormCreated", function(e, scope) { $scope.hideForm = false; $scope = angular.extend($scope, scope); @@ -41,10 +41,35 @@ export default ['$compile', '$state', '$stateParams', 'AddSchedule', 'Wait', '$s $scope.hideForm = true; + $scope.formCancel = function() { $state.go("^"); }; + $scope.parseType = 'yaml'; + $scope.extraVars = JobTemplateExtraVars === '' ? '---' : JobTemplateExtraVars; + ParseTypeChange({ + scope: $scope, + variable: 'extraVars', + parse_variable: 'parseType', + field_id: 'SchedulerForm-extraVars' + }); + + $scope.$watch('extraVars', function(){ + if ($scope.parseType === 'yaml'){ + try{ + $scope.serializedExtraVars = jsyaml.safeLoad($scope.extraVars); + } + catch(err){ return; } + } + else if ($scope.parseType === 'json'){ + try{ + $scope.serializedExtraVars = JSON.parse($scope.extraVars); + } + catch(err){ return; } + } + }); + AddSchedule({ scope: $scope, callback: 'SchedulesRefresh', diff --git a/awx/ui/client/src/scheduler/schedulerEdit.controller.js b/awx/ui/client/src/scheduler/schedulerEdit.controller.js index 05e9d7eef3..48b57151ec 100644 --- a/awx/ui/client/src/scheduler/schedulerEdit.controller.js +++ b/awx/ui/client/src/scheduler/schedulerEdit.controller.js @@ -1,4 +1,4 @@ -export default ['$compile', '$state', '$stateParams', 'EditSchedule', 'Wait', '$scope', '$rootScope', 'CreateSelect2', function($compile, $state, $stateParams, EditSchedule, Wait, $scope, $rootScope, CreateSelect2) { +export default ['$compile', '$state', '$stateParams', 'EditSchedule', 'Wait', '$scope', '$rootScope', 'CreateSelect2', 'ParseTypeChange', function($compile, $state, $stateParams, EditSchedule, Wait, $scope, $rootScope, CreateSelect2, ParseTypeChange) { $scope.$on("ScheduleFormCreated", function(e, scope) { $scope.hideForm = false; $scope = angular.extend($scope, scope); @@ -41,13 +41,49 @@ export default ['$compile', '$state', '$stateParams', 'EditSchedule', 'Wait', '$ }); $scope.isEdit = true; - $scope.hideForm = true; + $scope.parseType = 'yaml'; $scope.formCancel = function() { $state.go("^"); } + $scope.$on('ScheduleFound', function(){ + if ($scope.parseType === 'yaml'){ + try{ + $scope.extraVars = '---\n' + jsyaml.safeDump($scope.serializedExtraVars); + } + catch(err){ return; } + } + else if ($scope.parseType === 'json'){ + try{ + $scope.extraVars = JSON.stringify($scope.serializedExtraVars, null, ' '); + } + catch(err){ return; } + } + ParseTypeChange({ + scope: $scope, + variable: 'extraVars', + parse_variable: 'parseType', + field_id: 'SchedulerForm-extraVars' + }); + }); + + $scope.$watch('extraVars', function(){ + if ($scope.parseType === 'yaml'){ + try{ + $scope.serializedExtraVars = jsyaml.safeLoad($scope.extraVars); + } + catch(err){ return; } + } + else if ($scope.parseType === 'json'){ + try{ + $scope.serializedExtraVars = JSON.parse($scope.extraVars); + } + catch(err){ return; } + } + }); + EditSchedule({ scope: $scope, id: parseInt($stateParams.schedule_id), diff --git a/awx/ui/client/src/scheduler/schedulerForm.partial.html b/awx/ui/client/src/scheduler/schedulerForm.partial.html index b849c90e53..59a1afea20 100644 --- a/awx/ui/client/src/scheduler/schedulerForm.partial.html +++ b/awx/ui/client/src/scheduler/schedulerForm.partial.html @@ -632,8 +632,33 @@ {{ occurrence.local }} - + +
+ +
+ +
+
+