diff --git a/awx/ui/static/js/controllers/Home.js b/awx/ui/static/js/controllers/Home.js index 576f6c0660..be3c741807 100644 --- a/awx/ui/static/js/controllers/Home.js +++ b/awx/ui/static/js/controllers/Home.js @@ -108,7 +108,7 @@ function HomeGroups ($location, $routeParams, HomeGroupList, GenerateList, Proce var base = $location.path().replace(/^\//,'').split('/')[0]; if (scope.removePostRefresh) { - scope.removePostRefresh(); + scope.removePostRefresh(); } scope.removePostRefresh = scope.$on('PostRefresh', function() { var msg, update_status, last_update; diff --git a/awx/ui/static/js/controllers/Inventories.js b/awx/ui/static/js/controllers/Inventories.js index 6861e94ddb..676ec99f66 100644 --- a/awx/ui/static/js/controllers/Inventories.js +++ b/awx/ui/static/js/controllers/Inventories.js @@ -76,34 +76,25 @@ function InventoriesList ($scope, $rootScope, $location, $log, $routeParams, Res for (var i=0; i < scope.inventories.length; i++) { // Set values for Failed Hosts column - scope.inventories[i].failed_hosts = scope.inventories[i].hosts_with_active_failures + ' / ' + scope.inventories[i].total_hosts; + //scope.inventories[i].failed_hosts = scope.inventories[i].hosts_with_active_failures + ' / ' + scope.inventories[i].total_hosts; + if (scope.inventories[i].hosts_with_active_failures > 0) { - scope.inventories[i].failed_hosts_tip = "Contains " + scope.inventories[i].hosts_with_active_failures + - [ (scope.inventories[i].hosts_with_active_failures == 1) ? ' host' : ' hosts' ] + ' with job failures. Click to view the offending ' + - [ (scope.inventories[i].hosts_with_active_failures == 1) ? ' host' : ' hosts' ] + '.'; - scope.inventories[i].failed_hosts_link = '/#/inventories/' + scope.inventories[i].id + '/hosts?has_active_failures=true'; + scope.inventories[i].failed_hosts_tip = scope.inventories[i].hosts_with_active_failures + + ( (scope.inventories[i].hosts_with_active_failures == 1) ? ' host' : ' hosts' ) + ' with job failures. Click to view details.'; + scope.inventories[i].failed_hosts_link = '/#/inventories/' + scope.inventories[i].id + '/'; scope.inventories[i].failed_hosts_class = 'true'; } else { if (scope.inventories[i].total_hosts == 0) { // no hosts - scope.inventories[i].failed_hosts_tip = "There are no hosts in this inventory. It's a sad empty shell. Click to view the hosts page " + - "and add a host."; - scope.inventories[i].failed_hosts_link = '/#/inventories/' + scope.inventories[i].id + '/hosts'; + scope.inventories[i].failed_hosts_tip = "No hosts defined. Click to add."; + scope.inventories[i].failed_hosts_link = '/#/inventories/' + scope.inventories[i].id + '/'; scope.inventories[i].failed_hosts_class = 'na'; } - else if (scope.inventories[i].total_hosts == 1) { - // on host with 0 failures - scope.inventories[i].failed_hosts_tip = "The 1 host found in this inventory is happy! There are no job failures." + - " Click to view the host."; - scope.inventories[i].failed_hosts_link = '/#/inventories/' + scope.inventories[i].id + '/hosts'; - scope.inventories[i].failed_hosts_class = 'false'; - } else { // many hosts with 0 failures - scope.inventories[i].failed_hosts_tip = "All " + scope.inventories[i].total_hosts + " hosts are happy! There are no" + - " job failures. Click to view the hosts."; - scope.inventories[i].failed_hosts_link = '/#/inventories/' + scope.inventories[i].id + '/hosts'; + scope.inventories[i].failed_hosts_tip = "No job failures. Click to view details."; + scope.inventories[i].failed_hosts_link = '/#/inventories/' + scope.inventories[i].id + '/'; scope.inventories[i].failed_hosts_class = 'false'; } } @@ -111,33 +102,25 @@ function InventoriesList ($scope, $rootScope, $location, $log, $routeParams, Res // Set values for Status column scope.inventories[i].status = scope.inventories[i].inventory_sources_with_failures + ' / ' + scope.inventories[i].total_inventory_sources; if (scope.inventories[i].inventory_sources_with_failures > 0) { - scope.inventories[i].status_tip = "Contains " + scope.inventories[i].inventory_sources_with_failures + - [ (scope.inventories[i].inventory_sources_with_failures == 1) ? ' group' : ' groups' ] + ' with inventory update failures. ' + - 'Click to view the ' + - [ (scope.inventories[i].inventory_sources_with_failures == 1) ? ' offending group.' : ' groups.' ]; - scope.inventories[i].status_link = '/#/inventories/' + scope.inventories[i].id + '/groups?status=failed'; + scope.inventories[i].status_tip = scope.inventories[i].inventory_sources_with_failures + ' cloud ' + + ( (scope.inventories[i].inventory_sources_with_failures == 1) ? 'source' : 'sources' ) + + ' with failures. Click to view details.'; + scope.inventories[i].status_link = '/#/inventories/' + scope.inventories[i].id + '/'; scope.inventories[i].status_class = 'failed'; } else { if (scope.inventories[i].total_inventory_sources == 0) { // no groups are reporting a source - scope.inventories[i].status_tip = "Does not have an external inventory source. Click to view groups and " + - "and add an inventory source."; - scope.inventories[i].status_link = '/#/inventories/' + scope.inventories[i].id + '/groups'; + scope.inventories[i].status_tip = "Not synced with a cloud source. Click to edit."; + scope.inventories[i].status_link = '/#/inventories/' + scope.inventories[i].id + '/'; scope.inventories[i].status_class = 'na'; } - else if (scope.inventories[i].total_inventory_sources == 1) { - // on host with 0 failures - scope.inventories[i].status_tip = "The 1 group with an inventory source is happy!. No updates have failed." + - " Click to view the group."; - scope.inventories[i].status_link = '/#/inventories/' + scope.inventories[i].id + '/groups?has_external_source=true'; - scope.inventories[i].status_class = 'successful'; - } else { // many hosts with 0 failures - scope.inventories[i].status_tip = scope.inventories[i].total_inventory_sources + " groups external inventory sources are happy! " + - " No updates have failed. Click to view the groups."; - scope.inventories[i].status_link = '/#/inventories/' + scope.inventories[i].id + '/groups?has_external_source=true'; + scope.inventories[i].status_tip = 'Contains ' + scope.inventories[i].total_inventory_sources + + ' cloud ' + ( (scope.inventories[i].total_inventory_sources > 0) ? 'sources' : 'source' ) + + ' and no failures. Click to view details.'; + scope.inventories[i].status_link = '/#/inventories/' + scope.inventories[i].id + '/'; scope.inventories[i].status_class = 'successful'; } } diff --git a/awx/ui/static/js/helpers/Groups.js b/awx/ui/static/js/helpers/Groups.js index 9fc6fd2f22..eea5d78d4c 100644 --- a/awx/ui/static/js/helpers/Groups.js +++ b/awx/ui/static/js/helpers/Groups.js @@ -91,7 +91,7 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', ' var tree_id = params.tree_id; var group_id = params.group_id; var found = false; - var group = Find({ list: scope.group, key: 'id', val: tree_id }); + var group = Find({ list: scope.groups, key: 'id', val: tree_id }); scope.showHosts(tree_id, group_id, false); @@ -274,8 +274,8 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', ' Rest.post() .success( function(data, status, headers, config) { Wait('stop'); - Alert('Inventory Sync Cancelled', 'Your request to cancel the update was submitted to the task maanger. ' + - 'Click the to check the sync status.', 'alert-info'); + Alert('Inventory Sync Cancelled', 'Your request to cancel the sync process was submitted to the task manger. ' + + 'Click the button to monitor the status.', 'alert-info'); }) .error( function(data, status, headers, config) { Wait('stop'); @@ -299,8 +299,8 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', ' } else { Wait('stop'); - Alert('Cancel Inventory Sync', 'Either you do not have access or the sync process completed. ' + - 'Click the to view the latest status.', 'alert-info'); + Alert('Cancel Inventory Sync', 'Either you do not have access or the sync process completed.
' + + 'Click the button to view the latest status.', 'alert-info'); } }) .error( function(data, status, headers, config) { @@ -1080,8 +1080,8 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', ' if (last_update == undefined || last_update == null || last_update == ''){ Wait('stop'); - Alert('Missing Configuration', 'The selected group is not configured for inventory updates. ' + - 'You must first edit the group, provide Source settings, and then run an update.', 'alert-info'); + Alert('Missing Configuration', 'The selected group is not configured for inventory sync. ' + + 'Edit the group and provide Source information.', 'alert-info'); } else { // Retrieve detail record and prepopulate the form @@ -1110,12 +1110,12 @@ angular.module('GroupsHelper', [ 'RestServices', 'Utilities', 'ListGenerator', ' scope.formModalActionLabel = 'OK'; scope.formModalCancelShow = false; scope.formModalInfo = false; - scope.formModalHeader = group_name + ' - Inventory Update'; - $('#form-modal .btn-success').removeClass('btn-success').addClass('btn-none'); - $('#form-modal').addClass('skinny-modal'); + scope.formModalHeader = group_name + ' - Inventory Sync'; + if (!scope.$$phase) { scope.$digest(); } + }) .error( function(data, status, headers, config) { Wait('stop'); diff --git a/awx/ui/static/js/helpers/JobSubmission.js b/awx/ui/static/js/helpers/JobSubmission.js index b9fb511de9..3b3cc06002 100644 --- a/awx/ui/static/js/helpers/JobSubmission.js +++ b/awx/ui/static/js/helpers/JobSubmission.js @@ -421,7 +421,7 @@ angular.module('JobSubmissionHelper', [ 'RestServices', 'Utilities', 'Credential } scope.removeHostReloadComplete = scope.$on('HostReloadComplete', function(e) { Wait('stop'); - Alert('Update Started', 'The request to start the inventory update process was submitted. Monitor progress of the update process ' + + Alert('Update Started', 'Your request to start the inventory sync process was submitted. Monitor progress ' + 'by clicking the button.', 'alert-info'); scope.removeHostReloadComplete(); }); diff --git a/awx/ui/static/js/lists/CloudCredentials.js b/awx/ui/static/js/lists/CloudCredentials.js index ff22048a67..30fd2a6fed 100644 --- a/awx/ui/static/js/lists/CloudCredentials.js +++ b/awx/ui/static/js/lists/CloudCredentials.js @@ -59,7 +59,7 @@ angular.module('CloudCredentialsListDefinition', []) icon: 'fa-edit', label: 'Edit', "class": 'btn-sm', - awToolTip: 'View/Edit credential', + awToolTip: 'Edit credential', dataPlacement: 'top' }, diff --git a/awx/ui/static/js/lists/Credentials.js b/awx/ui/static/js/lists/Credentials.js index e99a3b46d8..791af2d854 100644 --- a/awx/ui/static/js/lists/Credentials.js +++ b/awx/ui/static/js/lists/Credentials.js @@ -73,7 +73,7 @@ angular.module('CredentialsListDefinition', []) icon: 'fa-edit', label: 'Edit', "class": 'btn-sm', - awToolTip: 'View/Edit credential', + awToolTip: 'Edit credential', dataPlacement: 'top' }, diff --git a/awx/ui/static/js/lists/Groups.js b/awx/ui/static/js/lists/Groups.js index b5c19f97ac..0e39b416e5 100644 --- a/awx/ui/static/js/lists/Groups.js +++ b/awx/ui/static/js/lists/Groups.js @@ -44,7 +44,7 @@ angular.module('GroupListDefinition', []) ngClick: "editGroup(\{\{ group.id \}\})", icon: 'icon-edit', "class": 'btn-xs', - awToolTip: 'View/Edit group', + awToolTip: 'Edit group', dataPlacement: 'top' }, @@ -57,4 +57,4 @@ angular.module('GroupListDefinition', []) dataPlacement: 'top' } } - }); \ No newline at end of file + }); diff --git a/awx/ui/static/js/lists/Hosts.js b/awx/ui/static/js/lists/Hosts.js index e2e61c0b11..bf08976202 100644 --- a/awx/ui/static/js/lists/Hosts.js +++ b/awx/ui/static/js/lists/Hosts.js @@ -44,7 +44,7 @@ angular.module('HostListDefinition', []) ngClick: "editHost(\{\{ host.id \}\})", icon: 'icon-edit', "class": 'btn-xs', - awToolTip: 'View/Edit host', + awToolTip: 'Edit host', dataPlacement: 'top' }, diff --git a/awx/ui/static/js/lists/Inventories.js b/awx/ui/static/js/lists/Inventories.js index a428bed891..115f96c5b6 100644 --- a/awx/ui/static/js/lists/Inventories.js +++ b/awx/ui/static/js/lists/Inventories.js @@ -31,8 +31,8 @@ angular.module('InventoriesListDefinition', []) sourceField: 'name', excludeModal: true }, - failed_hosts: { - label: 'Failed Hosts', + /*failed_hosts: { + label: 'Failures', ngHref: "\{\{ inventory.failed_hosts_link \}\}", badgeIcon: "\{\{ 'fa icon-failures-' + inventory.failed_hosts_class \}\}", badgeNgHref: "\{\{ inventory.failed_hosts_link \}\}", @@ -48,7 +48,7 @@ angular.module('InventoriesListDefinition', []) status: { label: 'Status', ngHref: "\{\{ inventory.status_link \}\}", - badgeIcon: "\{\{ 'fa icon-cloud-' + inventory.status_class \}\}", + badgeIcon: "\{\{ 'fa fa-cloud icon-cloud-' + inventory.status_class \}\}", badgeNgHref: "\{\{ inventory.status_link \}\}", badgePlacement: 'left', badgeTipPlacement: 'top', @@ -58,24 +58,25 @@ angular.module('InventoriesListDefinition', []) searchable: false, excludeModal: true, sortField: "inventory_sources_with_failures" - }, + },*/ has_inventory_sources: { - label: 'Has external sources?', + label: 'Cloud sourced', searchSingleValue: true, searchType: 'boolean', searchValue: 'true', searchOnly: true }, has_active_failures: { - label: 'Has failed hosts?', + label: 'Failed hosts', searchSingleValue: true, searchType: 'boolean', searchValue: 'true', searchOnly: true }, inventory_sources_with_failures: { - label: 'Has inventory update failures?', - searchType: 'gtzero', + label: 'Sync failures', + searchType: 'gtzero', + searchValue: 'true', searchOnly: true } }, @@ -96,22 +97,33 @@ angular.module('InventoriesListDefinition', []) }, fieldActions: { + status: { + //label: 'Status', + ngHref: "\{\{ inventory.status_link \}\}", + iconClass: "\{\{ 'fa fa-cloud icon-cloud-' + inventory.status_class \}\}", + awToolTip: "\{\{ inventory.status_tip \}\}", + dataPlacement: "top" + }, + failed_hosts: { + //label: 'Failures', + ngHref: "\{\{ inventory.failed_hosts_link \}\}", + iconClass: "\{\{ 'fa icon-failures-' + inventory.failed_hosts_class \}\}", + awToolTip: "\{\{ inventory.failed_hosts_tip \}\}", + dataPlacement: "top", + }, edit: { label: 'Edit', ngClick: "editInventory(\{\{ inventory.id \}\})", - icon: 'icon-edit', - "class": 'btn-xs btn-default', awToolTip: 'Edit inventory', dataPlacement: 'top' }, "delete": { label: 'Delete', ngClick: "deleteInventory(\{\{ inventory.id \}\},'\{\{ inventory.name \}\}')", - icon: 'icon-trash', - "class": 'btn-xs btn-danger', awToolTip: 'Delete inventory', dataPlacement: 'top' - }, + } + /*, dropdown: { type: 'DropDown', label: 'Jobs', @@ -122,5 +134,6 @@ angular.module('InventoriesListDefinition', []) { ngClick: "viewFailedJobs(\{\{ inventory.id \}\})", label: 'Failed' } ] } + */ } }); diff --git a/awx/ui/static/js/lists/Organizations.js b/awx/ui/static/js/lists/Organizations.js index 5595414826..6d637b5e22 100644 --- a/awx/ui/static/js/lists/Organizations.js +++ b/awx/ui/static/js/lists/Organizations.js @@ -47,7 +47,7 @@ angular.module('OrganizationListDefinition', []) ngClick: "editOrganization(\{\{ organization.id \}\})", icon: 'icon-edit', "class": 'btn-xs btn-default', - awToolTip: 'View/Edit organization', + awToolTip: 'Edit organization', dataPlacement: 'top' }, diff --git a/awx/ui/static/js/lists/Permissions.js b/awx/ui/static/js/lists/Permissions.js index b62ab793da..a29c1f3680 100644 --- a/awx/ui/static/js/lists/Permissions.js +++ b/awx/ui/static/js/lists/Permissions.js @@ -62,7 +62,7 @@ angular.module('PermissionListDefinition', []) ngClick: "editPermission(\{\{ permission.id \}\})", icon: 'icon-edit', "class": 'btn-xs btn-default', - awToolTip: 'View/Edit permission', + awToolTip: 'Edit permission', dataPlacement: 'top' }, diff --git a/awx/ui/static/js/lists/Projects.js b/awx/ui/static/js/lists/Projects.js index 937a4c4028..276fb77a6e 100644 --- a/awx/ui/static/js/lists/Projects.js +++ b/awx/ui/static/js/lists/Projects.js @@ -95,7 +95,7 @@ angular.module('ProjectsListDefinition', []) ngClick: "editProject(\{\{ project.id \}\})", icon: 'icon-edit', "class": 'btn-xs btn-default', - awToolTip: 'View/edit project properties', + awToolTip: 'Edit project properties', dataPlacement: 'top' }, scm_update: { diff --git a/awx/ui/static/js/lists/Teams.js b/awx/ui/static/js/lists/Teams.js index ea03fef146..acc886ecfd 100644 --- a/awx/ui/static/js/lists/Teams.js +++ b/awx/ui/static/js/lists/Teams.js @@ -54,7 +54,7 @@ angular.module('TeamsListDefinition', []) ngClick: "editTeam(\{\{ team.id \}\})", icon: 'icon-edit', "class": 'btn-xs btn-default', - awToolTip: 'View/Edit team', + awToolTip: 'Edit team', dataPlacement: 'top' }, diff --git a/awx/ui/static/js/lists/Users.js b/awx/ui/static/js/lists/Users.js index b22638ed5b..7faee8a101 100644 --- a/awx/ui/static/js/lists/Users.js +++ b/awx/ui/static/js/lists/Users.js @@ -56,7 +56,7 @@ angular.module('UserListDefinition', []) ngClick: "editUser(\{\{ user.id \}\})", icon: 'icon-edit', "class": 'btn-xs btn-default', - awToolTip: 'View/Edit user', + awToolTip: 'Edit user', dataPlacement: 'top' }, diff --git a/awx/ui/static/less/ansible-ui.less b/awx/ui/static/less/ansible-ui.less index 6c166bf2e9..7f6f4865b0 100644 --- a/awx/ui/static/less/ansible-ui.less +++ b/awx/ui/static/less/ansible-ui.less @@ -106,11 +106,11 @@ a:focus { .actions { a { font-size: 14px; - margin-left: 15px; + margin-right: 15px; } - a:first-child { + /*a:first-child { margin-left: 0; - } + }*/ a:hover { cursor: pointer; } @@ -843,12 +843,12 @@ input[type="checkbox"].checkbox-no-label { content: "\f111"; } - .icon-failures-none, + /*.icon-failures-none, .icon-failures-na, .icon-failures-true, .icon-failures-false { font-size: 12px; - } + }*/ .badge { padding: 2px 3px 3px 4px; diff --git a/awx/ui/static/lib/ansible/InventoryTree.js b/awx/ui/static/lib/ansible/InventoryTree.js index f5c5f96588..75c28cac04 100644 --- a/awx/ui/static/lib/ansible/InventoryTree.js +++ b/awx/ui/static/lib/ansible/InventoryTree.js @@ -190,8 +190,8 @@ angular.module('InventoryTree', ['Utilities', 'RestServices', 'GroupsHelper', 'P // Start our tree object with All Hosts var children = []; var sorted = SortNodes(tree_data); - for (var j=0; j < sorted[j].length; i++) { - push(sorted[j].id); + for (var j=0; j < sorted.length; j++) { + children.push(sorted[j].id); } var all_hosts = { name: 'All Hosts', id: 1, group_id: null, parent: 0, description: '', show: true, ngicon: null, diff --git a/awx/ui/static/lib/ansible/list-generator.js b/awx/ui/static/lib/ansible/list-generator.js index 5b81707664..b02fe22129 100644 --- a/awx/ui/static/lib/ansible/list-generator.js +++ b/awx/ui/static/lib/ansible/list-generator.js @@ -346,6 +346,7 @@ angular.module('ListGenerator', ['GeneratorHelpers']) var fAction = list.fieldActions[action]; html += "