From c238a85581abbb4699c3c1ea45f3f50c69e5f115 Mon Sep 17 00:00:00 2001 From: chouseknecht Date: Tue, 21 May 2013 12:57:15 -0400 Subject: [PATCH] Added variable data fied to Host detail page. Save/edit work -made changes in the Hosts controller for this. Still need to validate text blob is valid JSON. --- lib/ui/static/js/app.js | 9 +++++ lib/ui/static/js/controllers/Hosts.js | 52 +++++++++++++++++++++++-- lib/ui/static/js/controllers/Jobs.js | 29 +++++++------- lib/ui/static/js/forms/Hosts.js | 17 ++++---- lib/ui/static/js/helpers/JobTemplate.js | 2 +- lib/ui/static/js/helpers/Lookup.js | 7 +++- 6 files changed, 87 insertions(+), 29 deletions(-) diff --git a/lib/ui/static/js/app.js b/lib/ui/static/js/app.js index a781080b77..7c19a8ab6e 100644 --- a/lib/ui/static/js/app.js +++ b/lib/ui/static/js/app.js @@ -197,6 +197,15 @@ angular.module('ansible', [ Authorization.restoreUserInfo(); //user must have hit browser refresh } } + // Make the correct tab active + var base = ($location.path().replace(/^\//,'').split('/')[0]); + if (base == '') { + $('.nav-tabs a[href="#' + 'organizations' + '"]').tab('show'); + } + else { + base.replace(/\_/g,' '); + $('.nav-tabs a[href="#' + base + '"]').tab('show'); + } }); if (! Authorization.isTokenValid() ) { diff --git a/lib/ui/static/js/controllers/Hosts.js b/lib/ui/static/js/controllers/Hosts.js index 12c1d7432f..4a711e84d0 100644 --- a/lib/ui/static/js/controllers/Hosts.js +++ b/lib/ui/static/js/controllers/Hosts.js @@ -168,18 +168,33 @@ function HostsAdd ($scope, $rootScope, $compile, $location, $log, $routeParams, Rest.setUrl(defaultUrl); var data = {} for (var fld in form.fields) { - data[fld] = scope[fld]; + if (fld != 'varaibles') { + data[fld] = scope[fld]; + } } if ($routeParams.inventory_id) { data['inventory'] = $routeParams.inventory_id; } Rest.post(data) .success( function(data, status, headers, config) { - ReturnToCaller(1); + if (scope.variables) { + Rest.setUrl(GetBasePath('hosts') + data.id + '/variable_data/'); + Rest.post({data: scope.variables}) + .success( function(data, status, headers, config) { + ReturnToCaller(1); + }) + .error( function(data, status, headers, config) { + ProcessErrors(scope, data, status, form, + { hdr: 'Error!', msg: 'Failed to add host varaibles. POST returned status: ' + status }); + }); + } + else { + ReturnToCaller(1); + } }) .error( function(data, status, headers, config) { ProcessErrors(scope, data, status, form, - { hdr: 'Error!', msg: 'Failed to add new host. Post returned status: ' + status }); + { hdr: 'Error!', msg: 'Failed to add new host. POST returned status: ' + status }); }); }; @@ -217,6 +232,21 @@ function HostsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, for (var set in relatedSets) { scope.search(relatedSets[set].iterator); } + if (scope.variable_url) { + Rest.setUrl(scope.variable_url); + Rest.get() + .success( function(data, status, headers, config) { + scope.variables = data.data; + }) + .error( function(data, status, headers, config) { + scope.variables = null; + ProcessErrors(scope, data, status, form, + { hdr: 'Error!', msg: 'Failed to retrieve host variables. GET returned status: ' + status }); + }); + } + else { + scope.variables = null; + } }); // Retrieve detail record and prepopulate the form @@ -236,6 +266,7 @@ function HostsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, relatedSets[set] = { url: related[set], iterator: form.related[set].iterator }; } } + scope.variable_url = data.related.variable_data; // Initialize related search functions. Doing it here to make sure relatedSets object is populated. RelatedSearchInit({ scope: scope, form: form, relatedSets: relatedSets }); RelatedPaginateInit({ scope: scope, relatedSets: relatedSets }); @@ -255,7 +286,20 @@ function HostsEdit ($scope, $rootScope, $compile, $location, $log, $routeParams, } Rest.put(data) .success( function(data, status, headers, config) { - (base == 'hosts') ? ReturnToCaller() : ReturnToCaller(1); + if (scope.variables) { + Rest.setUrl(GetBasePath('hosts') + data.id + '/variable_data/'); + Rest.put({data: scope.variables}) + .success( function(data, status, headers, config) { + (base == 'hosts') ? ReturnToCaller() : ReturnToCaller(1); + }) + .error( function(data, status, headers, config) { + ProcessErrors(scope, data, status, form, + { hdr: 'Error!', msg: 'Failed to update host varaibles. PUT returned status: ' + status }); + }); + } + else { + (base == 'hosts') ? ReturnToCaller() : ReturnToCaller(1); + } }) .error( function(data, status, headers, config) { ProcessErrors(scope, data, status, form, diff --git a/lib/ui/static/js/controllers/Jobs.js b/lib/ui/static/js/controllers/Jobs.js index 838533e3f5..80da531323 100644 --- a/lib/ui/static/js/controllers/Jobs.js +++ b/lib/ui/static/js/controllers/Jobs.js @@ -357,23 +357,26 @@ function JobEvents ($scope, $rootScope, $compile, $location, $log, $routeParams, scope.PostRefreshRemove(); } scope.PostRefreshRemove = scope.$on('PostRefresh', function() { - var results = scope[form.items.event.set][0]; - // Disable Next/Prev buttons when we rich the end/beginning of array - scope[form.items.event.iterator + 'NextUrlDisable'] = (scope[form.items.event.iterator + 'NextUrl']) ? "" : "disabled"; - scope[form.items.event.iterator + 'PrevUrlDisable'] = (scope[form.items.event.iterator + 'PrevUrl']) ? "" : "disabled"; + + // Disable Next/Prev buttons when we reach the end/beginning of array + scope[form.items.event.iterator + 'NextUrlDisable'] = (scope[form.items.event.iterator + 'NextUrl'] !== null) ? "" : "disabled"; + scope[form.items.event.iterator + 'PrevUrlDisable'] = (scope[form.items.event.iterator + 'PrevUrl'] !== null) ? "" : "disabled"; // Set the scope input field values - for (var fld in form.items.event.fields) { - if (fld == 'event_data') { - scope.event_data = JSON.stringify(results[fld]); - } - else { - if (results[fld]) { - scope[fld] = results[fld]; + if (scope[form.items.event.set] && scope[form.items.event.set].length > 0) { + var results = scope[form.items.event.set][0]; + for (var fld in form.items.event.fields) { + if (fld == 'event_data') { + scope.event_data = JSON.stringify(results[fld]); + } + else { + if (results[fld]) { + scope[fld] = results[fld]; + } } } - } - scope['event_status'] = (results.failed) ? 'failed' : 'success'; + scope['event_status'] = (results.failed) ? 'failed' : 'success'; + } }); // Retrieve detail record and prepopulate the form diff --git a/lib/ui/static/js/forms/Hosts.js b/lib/ui/static/js/forms/Hosts.js index 40acbe5b7d..c53b735827 100644 --- a/lib/ui/static/js/forms/Hosts.js +++ b/lib/ui/static/js/forms/Hosts.js @@ -32,16 +32,15 @@ angular.module('HostFormDefinition', []) type: 'hidden', includeOnEdit: true, includeOnAdd: true + }, + variables: { + label: 'Variables', + type: 'textarea', + addRequired: false, + editRequird: false, + rows: 10, + class: 'span12' } - // inventory: { - // label: 'Inventory', - // type: 'lookup', - // sourceModel: 'inventory', - // sourceField: 'name', - // addRequired: true, - // editRequired: true, - // ngClick: 'lookUpInventory()' - // } }, buttons: { //for now always generates