diff --git a/awx/ui/client/src/templates/main.js b/awx/ui/client/src/templates/main.js index 11282a3d29..1737771029 100644 --- a/awx/ui/client/src/templates/main.js +++ b/awx/ui/client/src/templates/main.js @@ -303,6 +303,23 @@ angular.module('templates', [surveyMaker.name, jobTemplates.name, labels.name, p }, resolve: { add: { + Inventory: ['$stateParams', 'Rest', 'GetBasePath', 'ProcessErrors', + function($stateParams, Rest, GetBasePath, ProcessErrors){ + if($stateParams.inventory_id){ + let path = `${GetBasePath('inventory')}${$stateParams.inventory_id}`; + Rest.setUrl(path); + 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 info. GET returned status: ' + + response.status + }); + }); + } + }], availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService', function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) { return TemplatesService.getAllLabelOptions() @@ -354,6 +371,23 @@ angular.module('templates', [surveyMaker.name, jobTemplates.name, labels.name, p }, resolve: { edit: { + Inventory: ['$stateParams', 'Rest', 'GetBasePath', 'ProcessErrors', + function($stateParams, Rest, GetBasePath, ProcessErrors){ + if($stateParams.inventory_id){ + let path = `${GetBasePath('inventory')}${$stateParams.inventory_id}`; + Rest.setUrl(path); + 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 info. GET returned status: ' + + response.status + }); + }); + } + }], availableLabels: ['Rest', '$stateParams', 'GetBasePath', 'ProcessErrors', 'TemplatesService', function(Rest, $stateParams, GetBasePath, ProcessErrors, TemplatesService) { return TemplatesService.getAllLabelOptions() diff --git a/awx/ui/client/src/templates/workflows.form.js b/awx/ui/client/src/templates/workflows.form.js index 50a3ee867c..017fcb06ba 100644 --- a/awx/ui/client/src/templates/workflows.form.js +++ b/awx/ui/client/src/templates/workflows.form.js @@ -68,6 +68,21 @@ export default ['NotificationsList', 'i18n', function(NotificationsList, i18n) { ngDisabled: '!(workflow_job_template_obj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate) || !canEditOrg', awLookupWhen: '(workflow_job_template_obj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate) && canEditOrg' }, + inventory: { + label: i18n._('Inventory'), + type: 'lookup', + basePath: 'inventory', + list: 'InventoryList', + sourceModel: 'inventory', + sourceField: 'name', + autopopulateLookup: false, + column: 1, + awPopOver: "

" + i18n._("Select an inventory for the workflow. This inventory is applied to all job templates nodes that prompt for an inventory.") + "

", + dataTitle: i18n._('Inventory'), + dataPlacement: 'right', + dataContainer: "body", + ngDisabled: '!(workflow_job_template_obj.summary_fields.user_capabilities.edit || canAddWorkflowJobTemplate) || !canEditInventory', + }, labels: { label: i18n._('Labels'), type: 'select', diff --git a/awx/ui/client/src/templates/workflows/add-workflow/workflow-add.controller.js b/awx/ui/client/src/templates/workflows/add-workflow/workflow-add.controller.js index 84bfa0186d..e99a89a048 100644 --- a/awx/ui/client/src/templates/workflows/add-workflow/workflow-add.controller.js +++ b/awx/ui/client/src/templates/workflows/add-workflow/workflow-add.controller.js @@ -8,11 +8,11 @@ export default [ '$scope', 'WorkflowForm', 'GenerateForm', 'Alert', 'ProcessErrors', 'Wait', '$state', 'CreateSelect2', 'TemplatesService', 'ToJSON', 'ParseTypeChange', '$q', 'Rest', 'GetBasePath', 'availableLabels', 'i18n', - 'resolvedModels', + 'resolvedModels', 'Inventory', function($scope, WorkflowForm, GenerateForm, Alert, ProcessErrors, Wait, $state, CreateSelect2, TemplatesService, ToJSON, ParseTypeChange, $q, Rest, GetBasePath, availableLabels, i18n, - resolvedModels) { + resolvedModels, Inventory) { // Inject dynamic view let form = WorkflowForm(), @@ -23,6 +23,7 @@ export default [ $scope.canAddWorkflowJobTemplate = workflowTemplate.options('actions.POST'); $scope.canEditOrg = true; + $scope.canEditInventory = true; $scope.parseType = 'yaml'; $scope.can_edit = true; // apply form definition's default field values @@ -50,6 +51,12 @@ export default [ $scope.workflowEditorTooltip = i18n._("Please save before defining the workflow graph."); $scope.surveyTooltip = i18n._('Please save before adding a survey to this workflow.'); + + if (Inventory){ + $scope.inventory = Inventory.id; + $scope.inventory_name = Inventory.name; + } + $scope.formSave = function () { let fld, data = {}; diff --git a/awx/ui/client/src/templates/workflows/edit-workflow/workflow-edit.controller.js b/awx/ui/client/src/templates/workflows/edit-workflow/workflow-edit.controller.js index dc6a35d402..9d6db73ac0 100644 --- a/awx/ui/client/src/templates/workflows/edit-workflow/workflow-edit.controller.js +++ b/awx/ui/client/src/templates/workflows/edit-workflow/workflow-edit.controller.js @@ -10,12 +10,12 @@ export default [ 'Wait', 'Empty', 'ToJSON', 'initSurvey', '$state', 'CreateSelect2', 'ParseVariableString', 'TemplatesService', 'Rest', 'ToggleNotification', 'OrgAdminLookup', 'availableLabels', 'selectedLabels', 'workflowJobTemplateData', 'i18n', - 'workflowLaunch', '$transitions', 'WorkflowJobTemplateModel', + 'workflowLaunch', '$transitions', 'WorkflowJobTemplateModel', 'Inventory', function($scope, $stateParams, WorkflowForm, GenerateForm, Alert, ProcessErrors, GetBasePath, $q, ParseTypeChange, Wait, Empty, ToJSON, SurveyControllerInit, $state, CreateSelect2, ParseVariableString, TemplatesService, Rest, ToggleNotification, OrgAdminLookup, availableLabels, selectedLabels, workflowJobTemplateData, i18n, - workflowLaunch, $transitions, WorkflowJobTemplate + workflowLaunch, $transitions, WorkflowJobTemplate, Inventory, ) { $scope.missingTemplates = _.has(workflowLaunch, 'node_templates_missing') && workflowLaunch.node_templates_missing.length > 0 ? true : false; @@ -54,6 +54,11 @@ export default [ $scope.parseType = 'yaml'; $scope.includeWorkflowMaker = false; + if (Inventory){ + $scope.inventory = Inventory.id; + $scope.inventory_name = Inventory.name; + } + $scope.openWorkflowMaker = function() { $state.go('.workflowMaker'); }; @@ -312,6 +317,16 @@ export default [ $scope.canEditOrg = true; } + if(workflowJobTemplateData.inventory) { + OrgAdminLookup.checkForRoleLevelAdminAccess(workflowJobTemplateData.inventory, 'workflow_admin_role') + .then(function(canEditInventory){ + $scope.canEditInventory = canEditInventory; + }); + } + else { + $scope.canEditInventory = true; + } + $scope.url = workflowJobTemplateData.url; $scope.survey_enabled = workflowJobTemplateData.survey_enabled;