diff --git a/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.directive.js b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.directive.js
new file mode 100644
index 0000000000..a808289d43
--- /dev/null
+++ b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.directive.js
@@ -0,0 +1,106 @@
+export default ['templateUrl', function(templateUrl) {
+ return {
+ restrict: 'E',
+ scope: {
+ instanceGroups: '='
+ },
+ templateUrl: templateUrl('instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal'),
+
+ link: function(scope, element) {
+
+ $('#instance-groups-modal').on('hidden.bs.modal', function () {
+ $('#instance-groups-modal').off('hidden.bs.modal');
+ $(element).remove();
+ });
+ scope.showModal = function() {
+ $('#instance-groups-modal').modal('show');
+ };
+
+ scope.destroyModal = function() {
+ $('#instance-groups-modal').modal('hide');
+ };
+ },
+
+ controller: ['$scope', '$compile', 'QuerySet', 'GetBasePath','generateList', 'InstanceGroupList', function($scope, $compile, qs, GetBasePath, GenerateList, InstanceGroupList) {
+
+ function init() {
+
+ $scope.instance_group_queryset = {
+ order_by: 'name',
+ page_size: 5
+ };
+
+ $scope.instance_group_default_params = {
+ order_by: 'name',
+ page_size: 5
+ };
+
+ qs.search(GetBasePath('instance_groups'), $scope.instance_groups_queryset)
+ .then(res => {
+ $scope.instance_group_dataset = res.data;
+ $scope.instance_groups = $scope.instance_group_dataset.results;
+
+ let instanceGroupList = _.cloneDeep(InstanceGroupList);
+
+ instanceGroupList.listTitle = false;
+ instanceGroupList.well = false;
+ instanceGroupList.multiSelect = true;
+ instanceGroupList.multiSelectExtended = true;
+ delete instanceGroupList.fields.capacity;
+ delete instanceGroupList.fields.jobs_running;
+
+ let html = `${GenerateList.build({
+ list: instanceGroupList,
+ input_type: 'instance-groups-modal-body'
+ })}`;
+
+ $scope.list = instanceGroupList;
+ $('#instance-groups-modal-body').append($compile(html)($scope));
+
+ if ($scope.instanceGroups) {
+ $scope.instance_groups.map( (item) => {
+ isSelected(item);
+ });
+ }
+
+ $scope.showModal();
+ });
+
+ }
+
+ init();
+
+ function isSelected(item) {
+ if(_.find($scope.instanceGroups, {id: item.id})){
+ item.isSelected = true;
+ if (!$scope.igTags) {
+ $scope.igTags = [];
+ }
+ $scope.igTags.push(item);
+ }
+ return item;
+ }
+
+ $scope.$on("selectedOrDeselected", function(e, value) {
+ let item = value.value;
+ if (value.isSelected) {
+ if(!$scope.igTags) {
+ $scope.igTags = [];
+ }
+ $scope.igTags.push(item);
+ } else {
+ _.remove($scope.igTags, { id: item.id });
+ }
+ });
+
+ $scope.cancelForm = function() {
+ $scope.destroyModal();
+ };
+
+ $scope.saveForm = function() {
+ $scope.instanceGroups = $scope.igTags;
+ $scope.destroyModal();
+ };
+ }]
+ };
+}];
\ No newline at end of file
diff --git a/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.partial.html b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.partial.html
new file mode 100644
index 0000000000..82fe26b395
--- /dev/null
+++ b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-modal/instance-groups-modal.partial.html
@@ -0,0 +1,24 @@
+
diff --git a/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-multiselect.controller.js b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-multiselect.controller.js
new file mode 100644
index 0000000000..304ac7aa4e
--- /dev/null
+++ b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups-multiselect.controller.js
@@ -0,0 +1,10 @@
+export default ['$scope',
+ function($scope) {
+
+ $scope.instanceGroupsTags = [];
+
+ $scope.$watch('instanceGroups', function() {
+ $scope.instanceGroupsTags = _.map($scope.instanceGroups, (item) => item.name);
+ }, true);
+ }
+];
\ No newline at end of file
diff --git a/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.directive.js b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.directive.js
new file mode 100644
index 0000000000..2396a97ab5
--- /dev/null
+++ b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.directive.js
@@ -0,0 +1,18 @@
+import instanceGroupsMultiselectController from './instance-groups-multiselect.controller';
+export default ['templateUrl', '$compile',
+ function(templateUrl, $compile) {
+ return {
+ scope: {
+ instanceGroups: '='
+ },
+ restrict: 'E',
+ templateUrl: templateUrl('instance-groups/instance-groups-multiselect/instance-groups'),
+ controller: instanceGroupsMultiselectController,
+ link: function(scope) {
+ scope.openInstanceGroupsModal = function() {
+ $('#content-container').append($compile('')(scope));
+ };
+ }
+ };
+ }
+];
\ No newline at end of file
diff --git a/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.partial.html b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.partial.html
new file mode 100644
index 0000000000..27ffc7f50b
--- /dev/null
+++ b/awx/ui/client/src/instance-groups/instance-groups-multiselect/instance-groups.partial.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+ {{ tag }}
+
+
+
\ No newline at end of file
diff --git a/awx/ui/client/src/instance-groups/instance-groups.list.js b/awx/ui/client/src/instance-groups/instance-groups.list.js
index 0be89f9260..a6827a9291 100644
--- a/awx/ui/client/src/instance-groups/instance-groups.list.js
+++ b/awx/ui/client/src/instance-groups/instance-groups.list.js
@@ -3,6 +3,7 @@ export default ['i18n', function(i18n) {
name: 'instance_groups' ,
basePath: 'instance_groups',
iterator: 'instance_group',
+ editTitle: i18n._('INSTANCE GROUPS'),
listTitle: i18n._('INSTANCE GROUPS'),
index: false,
hover: false,
@@ -18,7 +19,7 @@ export default ['i18n', function(i18n) {
label: i18n._('Capacity'),
nosort: true,
},
- running_jobs: {
+ jobs_running: {
label: i18n._('Running Jobs'),
nosort: true,
},
diff --git a/awx/ui/client/src/instance-groups/main.js b/awx/ui/client/src/instance-groups/main.js
index 7747d36913..c73e7069b8 100644
--- a/awx/ui/client/src/instance-groups/main.js
+++ b/awx/ui/client/src/instance-groups/main.js
@@ -1,13 +1,17 @@
import InstanceGroupsList from './list/instance-groups-list.controller';
+import instanceGroupsMultiselect from './instance-groups-multiselect/instance-groups.directive';
+import instanceGroupsModal from './instance-groups-multiselect/instance-groups-modal/instance-groups-modal.directive';
import list from './instance-groups.list';
import service from './instance-groups.service';
import { N_ } from '../i18n';
export default
angular.module('instanceGroups', [])
- .factory('InstanceGroupList', list)
.service('InstanceGroupsService', service)
+ .factory('InstanceGroupList', list)
.controller('InstanceGroupsList', InstanceGroupsList)
+ .directive('instanceGroupsMultiselect', instanceGroupsMultiselect)
+ .directive('instanceGroupsModal', instanceGroupsModal)
.config(['$stateProvider', 'stateDefinitionsProvider',
function($stateProvider, stateDefinitionsProvider) {
let stateDefinitions = stateDefinitionsProvider.$get();
@@ -21,16 +25,11 @@ angular.module('instanceGroups', [])
controllers: {
list: 'InstanceGroupsList'
},
- data: {
- activityStream: true,
- activityStreamTarget: 'instanceGroup'
- },
ncyBreadcrumb: {
parent: 'setup',
label: N_('INSTANCE GROUPS')
}
})
});
-
}
]);
\ No newline at end of file
diff --git a/awx/ui/client/src/inventories/main.js b/awx/ui/client/src/inventories/main.js
index 0ab8f7a384..361d7620c8 100644
--- a/awx/ui/client/src/inventories/main.js
+++ b/awx/ui/client/src/inventories/main.js
@@ -115,6 +115,28 @@ angular.module('inventory', [
data: {
activityStream: true,
activityStreamTarget: 'inventory'
+ },
+ resolve: {
+ edit: {
+ InstanceGroupsData: ['$stateParams', 'Rest', 'GetBasePath', 'ProcessErrors',
+ function($stateParams, Rest, GetBasePath, ProcessErrors){
+ let path = `${GetBasePath('inventory')}${$stateParams.inventory_id}/instance_groups/`;
+ Rest.setUrl(path);
+ return Rest.get()
+ .then(({data}) => {
+ if (data.results.length > 0) {
+ return data.results;
+ }
+ })
+ .catch(({data, status}) => {
+ ProcessErrors(null, data, status, null, {
+ hdr: 'Error!',
+ msg: 'Failed to get instance groups. GET returned ' +
+ 'status: ' + status
+ });
+ });
+ }]
+ }
}
});
diff --git a/awx/ui/client/src/inventories/standard/add/inventory-add.controller.js b/awx/ui/client/src/inventories/standard/add/inventory-add.controller.js
index 200aa4c9ba..af1f2cae85 100644
--- a/awx/ui/client/src/inventories/standard/add/inventory-add.controller.js
+++ b/awx/ui/client/src/inventories/standard/add/inventory-add.controller.js
@@ -13,7 +13,7 @@
function InventoriesAdd($scope, $location,
GenerateForm, InventoryForm, rbacUiControlService, Rest, Alert, ProcessErrors,
ClearScope, GetBasePath, ParseTypeChange, Wait, ToJSON,
- $state, canAdd, CreateSelect2, InstanceGroupsService, InstanceGroupsData) {
+ $state, canAdd, CreateSelect2, InstanceGroupsService) {
$scope.canAdd = canAdd;
@@ -42,13 +42,6 @@ function InventoriesAdd($scope, $location,
});
}
- $scope.instanceGroupOptions = InstanceGroupsData;
- CreateSelect2({
- element: '#inventory_instance_groups',
- multiple: true,
- addNew: false
- });
-
// Save
$scope.formSave = function() {
Wait('start');
@@ -104,5 +97,5 @@ function InventoriesAdd($scope, $location,
export default ['$scope', '$location',
'GenerateForm', 'InventoryForm', 'rbacUiControlService', 'Rest', 'Alert',
'ProcessErrors', 'ClearScope', 'GetBasePath', 'ParseTypeChange',
- 'Wait', 'ToJSON', '$state','canAdd', 'CreateSelect2', 'InstanceGroupsService', 'InstanceGroupsData', InventoriesAdd
+ 'Wait', 'ToJSON', '$state','canAdd', 'CreateSelect2', 'InstanceGroupsService', InventoriesAdd
];
\ No newline at end of file
diff --git a/awx/ui/client/src/inventories/standard/edit/inventory-edit.controller.js b/awx/ui/client/src/inventories/standard/edit/inventory-edit.controller.js
index f510800a58..1a0cc2f3dc 100644
--- a/awx/ui/client/src/inventories/standard/edit/inventory-edit.controller.js
+++ b/awx/ui/client/src/inventories/standard/edit/inventory-edit.controller.js
@@ -35,36 +35,7 @@ function InventoriesEdit($scope, $location,
$scope.organization_name = inventoryData.summary_fields.organization.name;
$scope.inventory_variables = inventoryData.variables === null || inventoryData.variables === '' ? '---' : ParseVariableString(inventoryData.variables);
$scope.parseType = 'yaml';
-
- $scope.instanceGroupOptions = InstanceGroupsData;
- CreateSelect2({
- element: '#inventory_instance_groups',
- multiple: true,
- addNew: false
- });
-
- Rest.setUrl(instance_group_url);
- Rest.get()
- .then(({data}) => {
- if (data.results.length > 0) {
- var opts = data.results
- .map(i => ({id: i.id + "",
- name: i.name}));
- CreateSelect2({
- element:'#inventory_instance_groups',
- multiple: true,
- addNew: false,
- opts: opts
- });
- }
- })
- .catch(({data, status}) => {
- ProcessErrors($scope, data, status, form, {
- hdr: 'Error!',
- msg: 'Failed to get instance groups. GET returned ' +
- 'status: ' + status
- });
- });
+ $scope.instance_groups = InstanceGroupsData;
$rootScope.$on('$stateChangeSuccess', function(event, toState) {
if(toState.name === 'inventories.edit') {
diff --git a/awx/ui/client/src/inventories/standard/inventory.form.js b/awx/ui/client/src/inventories/standard/inventory.form.js
index fc9b92b48a..06e79d7239 100644
--- a/awx/ui/client/src/inventories/standard/inventory.form.js
+++ b/awx/ui/client/src/inventories/standard/inventory.form.js
@@ -81,13 +81,12 @@ function(i18n, InventoryCompletedJobsList) {
},
instance_groups: {
label: i18n._('Instance Groups'),
- type: 'select',
+ type: 'custom',
awPopOver: "" + i18n._("Select the Instance Groups for this Inventory to run on.") + "
",
dataTitle: i18n._('Instance Groups'),
dataPlacement: 'right',
dataContainer: 'body',
- multiSelect: true,
- ngOptions: 'group.name for group in instanceGroupOptions track by group.id',
+ control: '',
},
inventory_variables: {
realName: 'variables',
diff --git a/awx/ui/client/src/organizations/add/organizations-add.controller.js b/awx/ui/client/src/organizations/add/organizations-add.controller.js
index bf41511786..b8d2140374 100644
--- a/awx/ui/client/src/organizations/add/organizations-add.controller.js
+++ b/awx/ui/client/src/organizations/add/organizations-add.controller.js
@@ -6,9 +6,9 @@
export default ['$scope', '$rootScope', '$location', '$stateParams',
'OrganizationForm', 'GenerateForm', 'Rest', 'Alert',
- 'ProcessErrors', 'ClearScope', 'GetBasePath', 'Wait', 'CreateSelect2', '$state','InstanceGroupsService','InstanceGroupsData',
+ 'ProcessErrors', 'ClearScope', 'GetBasePath', 'Wait', 'CreateSelect2', '$state','InstanceGroupsService',
function($scope, $rootScope, $location, $stateParams, OrganizationForm,
- GenerateForm, Rest, Alert, ProcessErrors, ClearScope, GetBasePath, Wait, CreateSelect2, $state, InstanceGroupsService, InstanceGroupsData) {
+ GenerateForm, Rest, Alert, ProcessErrors, ClearScope, GetBasePath, Wait, CreateSelect2, $state, InstanceGroupsService) {
Rest.setUrl(GetBasePath('organizations'));
Rest.options()
@@ -33,13 +33,6 @@ export default ['$scope', '$rootScope', '$location', '$stateParams',
GenerateForm.applyDefaults(form, $scope);
}
- $scope.instanceGroupOptions = InstanceGroupsData;
- CreateSelect2({
- element: '#organization_instance_groups',
- multiple: true,
- addNew: false
- });
-
// Save
$scope.formSave = function() {
Wait('start');
diff --git a/awx/ui/client/src/organizations/edit/organizations-edit.controller.js b/awx/ui/client/src/organizations/edit/organizations-edit.controller.js
index d0054cc4b4..7c7b48e7d2 100644
--- a/awx/ui/client/src/organizations/edit/organizations-edit.controller.js
+++ b/awx/ui/client/src/organizations/edit/organizations-edit.controller.js
@@ -30,37 +30,7 @@ export default ['$scope', '$location', '$stateParams',
});
$scope.$emit("HideOrgListHeader");
- $scope.organization_id = id;
-
- $scope.instanceGroupOptions = InstanceGroupsData;
- CreateSelect2({
- element: '#organization_instance_groups',
- multiple: true,
- addNew: false
- });
-
- Rest.setUrl(instance_group_url);
- Rest.get()
- .then(({data}) => {
- if (data.results.length > 0) {
- let opts = data.results
- .map(i => ({id: i.id + "",
- name: i.name}));
- CreateSelect2({
- element: '#organization_instance_groups',
- multiple: true,
- addNew: false,
- opts: opts
- });
- }
- })
- .catch(({data, status}) => {
- ProcessErrors($scope, data, status, form, {
- hdr: 'Error!',
- msg: 'Failed to get instance groups. GET returned ' +
- 'status: ' + status
- });
- });
+ $scope.instance_groups = InstanceGroupsData;
}
diff --git a/awx/ui/client/src/organizations/main.js b/awx/ui/client/src/organizations/main.js
index d9f80edbe9..11b903dcf7 100644
--- a/awx/ui/client/src/organizations/main.js
+++ b/awx/ui/client/src/organizations/main.js
@@ -27,23 +27,7 @@ angular.module('Organizations', [
.config(['$stateProvider', 'stateDefinitionsProvider', '$stateExtenderProvider',
function($stateProvider, stateDefinitionsProvider, $stateExtenderProvider) {
let stateExtender = $stateExtenderProvider.$get(),
- stateDefinitions = stateDefinitionsProvider.$get(),
- organizationResolve = {
- InstanceGroupsData: ['Rest', 'GetBasePath', 'ProcessErrors', (Rest, GetBasePath, ProcessErrors) => {
- const url = GetBasePath('instance_groups');
- Rest.setUrl(url);
- return Rest.get()
- .then(({data}) => {
- return data.results.map((i) => ({name: i.name, id: i.id}));
- })
- .catch(({data, status}) => {
- ProcessErrors(null, data, status, null, {
- hdr: 'Error!',
- msg: 'Failed to get instance groups info. GET returned status: ' + status
- });
- });
- }]
- };
+ stateDefinitions = stateDefinitionsProvider.$get();
// lazily generate a tree of substates which will replace this node in ui-router's stateRegistry
// see: stateDefinition.factory for usage documentation
@@ -72,8 +56,26 @@ angular.module('Organizations', [
activityStreamTarget: 'organization'
},
resolve: {
- add: organizationResolve,
- edit: organizationResolve
+ edit: {
+ InstanceGroupsData: ['$stateParams', 'Rest', 'GetBasePath', 'ProcessErrors',
+ function($stateParams, Rest, GetBasePath, ProcessErrors){
+ let path = `${GetBasePath('organizations')}${$stateParams.organization_id}/instance_groups/`;
+ Rest.setUrl(path);
+ return Rest.get()
+ .then(({data}) => {
+ if (data.results.length > 0) {
+ return data.results;
+ }
+ })
+ .catch(({data, status}) => {
+ ProcessErrors(null, data, status, null, {
+ hdr: 'Error!',
+ msg: 'Failed to get instance groups. GET returned ' +
+ 'status: ' + status
+ });
+ });
+ }]
+ }
}
// concat manually-defined state definitions with generated defintions
}).then((generated) => {
diff --git a/awx/ui/client/src/organizations/organizations.form.js b/awx/ui/client/src/organizations/organizations.form.js
index 0d88f0c6ae..588523b677 100644
--- a/awx/ui/client/src/organizations/organizations.form.js
+++ b/awx/ui/client/src/organizations/organizations.form.js
@@ -36,13 +36,12 @@ export default ['NotificationsList', 'i18n',
},
instance_groups: {
label: i18n._('Instance Groups'),
- type: 'select',
+ type: 'custom',
awPopOver: "" + i18n._("Select the Instance Groups for this Organization to run on.") + "
",
+ dataTitle: i18n._('Instance Groups'),
dataContainer: 'body',
dataPlacement: 'right',
- dataTitle: i18n._('Instance Groups'),
- multiSelect: true,
- ngOptions: 'group.name for group in instanceGroupOptions track by group.id',
+ control: '',
}
},
diff --git a/awx/ui/client/src/templates/job-template.form.js b/awx/ui/client/src/templates/job-template.form.js
index 9aa50f0505..abf1f94ef6 100644
--- a/awx/ui/client/src/templates/job-template.form.js
+++ b/awx/ui/client/src/templates/job-template.form.js
@@ -245,13 +245,12 @@ function(NotificationsList, CompletedJobsList, i18n) {
},
instance_groups: {
label: i18n._('Instance Groups'),
- type: 'select',
+ type: 'custom',
awPopOver: "" + i18n._("Select the Instance Groups for this Job Template to run on.") + "
",
+ dataTitle: i18n._('Instance Groups'),
dataContainer: 'body',
dataPlacement: 'right',
- dataTitle: i18n._('Instance Groups'),
- multiSelect: true,
- ngOptions: 'group.name for group in instanceGroupOptions track by group.id',
+ control: '',
},
job_tags: {
label: i18n._('Job Tags'),
diff --git a/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js b/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js
index 35861eea98..5625bcb0d9 100644
--- a/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js
+++ b/awx/ui/client/src/templates/job_templates/add-job-template/job-template-add.controller.js
@@ -9,14 +9,13 @@
'$stateParams', 'JobTemplateForm', 'GenerateForm', 'Rest', 'Alert',
'ProcessErrors', 'ClearScope', 'GetBasePath', 'md5Setup', 'ParseTypeChange', 'Wait',
'Empty', 'ToJSON', 'CallbackHelpInit', 'GetChoices', '$state',
- 'CreateSelect2', '$q', 'i18n', 'Inventory', 'Project', 'InstanceGroupsService', 'InstanceGroupsData',
+ 'CreateSelect2', '$q', 'i18n', 'Inventory', 'Project', 'InstanceGroupsService',
function(
$filter, $scope,
$stateParams, JobTemplateForm, GenerateForm, Rest, Alert,
ProcessErrors, ClearScope, GetBasePath, md5Setup, ParseTypeChange, Wait,
Empty, ToJSON, CallbackHelpInit, GetChoices,
- $state, CreateSelect2, $q, i18n, Inventory, Project, InstanceGroupsService,
- InstanceGroupsData
+ $state, CreateSelect2, $q, i18n, Inventory, Project, InstanceGroupsService
) {
Rest.setUrl(GetBasePath('job_templates'));
@@ -48,13 +47,6 @@
$scope.mode = "add";
$scope.parseType = 'yaml';
- $scope.instanceGroupOptions = InstanceGroupsData;
- CreateSelect2({
- element: '#job_template_instance_groups',
- multiple: true,
- addNew: false
- });
-
md5Setup({
scope: $scope,
master: master,
@@ -244,6 +236,7 @@
$state.go('templates.editJobTemplate', {job_template_id: id}, {reload: true});
}
+
if ($scope.removeTemplateSaveSuccess) {
$scope.removeTemplateSaveSuccess();
}
diff --git a/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js b/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js
index a6faab1f0b..11f5a5e451 100644
--- a/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js
+++ b/awx/ui/client/src/templates/job_templates/edit-job-template/job-template-edit.controller.js
@@ -54,36 +54,7 @@ export default
$scope.mode = 'edit';
$scope.parseType = 'yaml';
$scope.showJobType = false;
-
- $scope.instanceGroupOptions = InstanceGroupsData;
- CreateSelect2({
- element: '#job_template_instance_groups',
- multiple: true,
- addNew: false
- });
-
- Rest.setUrl(instance_group_url);
- Rest.get()
- .then(({data}) => {
- if (data.results.length > 0) {
- let opts = data.results
- .map(i => ({id: i.id + "",
- name: i.name}));
- CreateSelect2({
- element: '#job_template_instance_groups',
- multiple: true,
- addNew: false,
- opts: opts
- });
- }
- })
- .catch(({data, status}) => {
- ProcessErrors($scope, data, status, form, {
- hdr: 'Error!',
- msg: 'Failed to get instance groups. GET returned ' +
- 'status: ' + status
- });
- });
+ $scope.instance_groups = InstanceGroupsData;
SurveyControllerInit({
scope: $scope,
diff --git a/awx/ui/client/src/templates/main.js b/awx/ui/client/src/templates/main.js
index f4c8da4db8..c2af4a85a0 100644
--- a/awx/ui/client/src/templates/main.js
+++ b/awx/ui/client/src/templates/main.js
@@ -46,24 +46,7 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplatesA
let stateTree, addJobTemplate, editJobTemplate, addWorkflow, editWorkflow,
workflowMaker, inventoryLookup, credentialLookup,
stateDefinitions = stateDefinitionsProvider.$get(),
- stateExtender = $stateExtenderProvider.$get(),
- instanceGroupsResolve = {
- InstanceGroupsData: ['Rest', 'GetBasePath', 'ProcessErrors', (Rest, GetBasePath, ProcessErrors) => {
- const url = GetBasePath('instance_groups');
- Rest.setUrl(url);
- return Rest.get()
- .then(({data}) => {
- return data.results.map((i) => ({name: i.name, id: i.id}));
- })
- .catch(({data, status}) => {
- ProcessErrors(null, data, status, null, {
- hdr: 'Error!',
- msg: 'Failed to get instance groups info. GET returned status: ' + status
- });
- });
- }]
- };
-
+ stateExtender = $stateExtenderProvider.$get();
function generateStateTree() {
@@ -102,8 +85,7 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplatesA
});
});
}
- }],
- InstanceGroupsData: instanceGroupsResolve.InstanceGroupsData
+ }]
}
}
});
@@ -125,7 +107,26 @@ angular.module('templates', [surveyMaker.name, templatesList.name, jobTemplatesA
activityStreamId: 'job_template_id'
},
resolve: {
- edit: instanceGroupsResolve
+ edit: {
+ InstanceGroupsData: ['$stateParams', 'Rest', 'GetBasePath', 'ProcessErrors',
+ function($stateParams, Rest, GetBasePath, ProcessErrors){
+ let path = `${GetBasePath('job_templates')}${$stateParams.job_template_id}/instance_groups/`;
+ Rest.setUrl(path);
+ return Rest.get()
+ .then(({data}) => {
+ if (data.results.length > 0) {
+ return data.results;
+ }
+ })
+ .catch(({data, status}) => {
+ ProcessErrors(null, data, status, null, {
+ hdr: 'Error!',
+ msg: 'Failed to get instance groups. GET returned ' +
+ 'status: ' + status
+ });
+ });
+ }]
+ }
}
});