diff options
author | Yusaku Sako <yusaku@apache.org> | 2012-12-09 13:32:45 +0000 |
---|---|---|
committer | Yusaku Sako <yusaku@apache.org> | 2012-12-09 13:32:45 +0000 |
commit | 6e0b836d9eba9502454f0f3cb6271c236cd6cf3e (patch) | |
tree | cb34ed128208839d5f75860d53129027b85c348c /ambari-web | |
parent | 465917e291b5a4133741bd6b1db9aa12a3af06a0 (diff) |
AMBARI-1059. Refactor cluster management. (yusaku)
git-svn-id: https://svn.apache.org/repos/asf/incubator/ambari/branches/AMBARI-666@1418944 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'ambari-web')
-rw-r--r-- | ambari-web/app/assets/data/wizard/bootstrap/bootstrap.json | 5 | ||||
-rw-r--r-- | ambari-web/app/assets/data/wizard/bootstrap/poll_1.json | 16 | ||||
-rw-r--r-- | ambari-web/app/assets/data/wizard/bootstrap/poll_2.json | 16 | ||||
-rw-r--r-- | ambari-web/app/controllers/wizard/step2_controller.js | 10 | ||||
-rw-r--r-- | ambari-web/app/controllers/wizard/step3_controller.js | 80 | ||||
-rw-r--r-- | ambari-web/app/initialize.js | 1 | ||||
-rw-r--r-- | ambari-web/app/messages.js | 3 | ||||
-rw-r--r-- | ambari-web/app/models/hosts.js | 44 | ||||
-rw-r--r-- | ambari-web/app/styles/application.less | 3 | ||||
-rw-r--r-- | ambari-web/app/templates/wizard/step3.hbs | 16 | ||||
-rw-r--r-- | ambari-web/app/templates/wizard/step3_host_log_popup.hbs (renamed from ambari-web/app/templates/wizard/step3HostLogPopup.hbs) | 7 | ||||
-rw-r--r-- | ambari-web/app/views/wizard/step3_view.js | 2 |
12 files changed, 160 insertions, 43 deletions
diff --git a/ambari-web/app/assets/data/wizard/bootstrap/bootstrap.json b/ambari-web/app/assets/data/wizard/bootstrap/bootstrap.json new file mode 100644 index 0000000000..2703955e49 --- /dev/null +++ b/ambari-web/app/assets/data/wizard/bootstrap/bootstrap.json @@ -0,0 +1,5 @@ +{ + "status": "OK", + "log": "Running Bootstrap now", + "requestId": "1" +}
\ No newline at end of file diff --git a/ambari-web/app/assets/data/wizard/bootstrap/poll_1.json b/ambari-web/app/assets/data/wizard/bootstrap/poll_1.json new file mode 100644 index 0000000000..ac9bbbbf84 --- /dev/null +++ b/ambari-web/app/assets/data/wizard/bootstrap/poll_1.json @@ -0,0 +1,16 @@ +{ + "status": "RUNNING", + "hostsStatus": [ + { + "status": "RUNNING", + "hostName": "dev001", + "log": "STDOUT\n\nSTDERR\nWarning: Permanently added 'dev001,10.0.2.15' (RSA) to the list of known hosts.\n" + }, + { + "status": "RUNNING", + "hostName": "dev002", + "log": "STDOUT\n\nSTDERR\nWarning: Permanently added 'dev002,10.0.2.16' (RSA) to the list of known hosts.\n" + } + ], + "log": "" +} diff --git a/ambari-web/app/assets/data/wizard/bootstrap/poll_2.json b/ambari-web/app/assets/data/wizard/bootstrap/poll_2.json new file mode 100644 index 0000000000..7208d5670d --- /dev/null +++ b/ambari-web/app/assets/data/wizard/bootstrap/poll_2.json @@ -0,0 +1,16 @@ +{ + "status": "SUCCESS", + "hostsStatus": [ + { + "status": "FAILED", + "hostName": "dev001", + "log": "STDOUT\n\nSTDERR\nWarning: Permanently added 'dev001,10.0.2.15' (RSA) to the list of known hosts.\r\n/etc/yum.repos.d/ambari.repo: No such file or directory\nSTDOUT\n\nSTDERR\nPermission denied, please try again.\r\nConnection closed by UNKNOWN\r\nlost connection\nSTDOUT\n\nSTDERR\npython: can't open file '/tmp/setupAgent.py': [Errno 2] No such file or directory\n" + }, + { + "status": "DONE", + "hostName": "dev002", + "log": "STDOUT\n\nSTDERR\nWarning: Permanently added 'dev002,10.0.2.16' (RSA) to the list of known hosts.\r\n/etc/yum.repos.d/ambari.repo: No such file or directory\nSTDOUT\n\nSTDERR\nPermission denied, please try again.\r\nConnection closed by UNKNOWN\r\nlost connection\nSTDOUT\n\nSTDERR\npython: can't open file '/tmp/setupAgent.py': [Errno 2] No such file or directory\n" + } + ], + "log": "\n\nINFO:root:BootStrapping hosts ['dev001','dev002'] using /root/dev/ambari/ambari-server/src/main/python with sshKey File /tmp/bootstrap/1/sshKey using tmp dir /tmp/bootstrap/1 ambari: localhost\nINFO:root:Running scp command scp -o ConnectTimeout=3 -o StrictHostKeyChecking=no -i /tmp/bootstrap/1/sshKey /etc/yum.repos.d/ambari.repo root@dev001:/etc/yum.repos.d\nINFO:root:scp /etc/yum.repos.d/ambari.repo done for host dev001, exitcode=1\nINFO:root:Parallel scp returns for repo file\nINFO:root:Running scp command scp -o ConnectTimeout=3 -o StrictHostKeyChecking=no -i /tmp/bootstrap/1/sshKey /root/dev/ambari/ambari-server/src/main/python/setupAgent.py root@dev001:/tmp\nINFO:root:scp /root/dev/ambari/ambari-server/src/main/python/setupAgent.py done for host dev001, exitcode=1\nINFO:root:Parallel scp returns for agent script\nINFO:root:Running setup agent...\nINFO:root:Running ssh command ssh -o ConnectTimeOut=3 -o StrictHostKeyChecking=no -i /tmp/bootstrap/1/sshKey root@dev001 python /tmp/setupAgent.py tmp localhost\nINFO:root:Setup agent done for host dev001, exitcode=2\nINFO:root:Parallel ssh returns for setup agent\n" +}
\ No newline at end of file diff --git a/ambari-web/app/controllers/wizard/step2_controller.js b/ambari-web/app/controllers/wizard/step2_controller.js index b849ffefa0..9e83a58394 100644 --- a/ambari-web/app/controllers/wizard/step2_controller.js +++ b/ambari-web/app/controllers/wizard/step2_controller.js @@ -140,15 +140,17 @@ App.WizardStep2Controller = Em.Controller.extend({ var bootStrapData = JSON.stringify({'verbose': true, 'sshKey': this.get('sshKey'), hosts: this.get('hostNameArr')}); - // TODO: skipping bootstrap for now - if (true) { + if (App.skipBootstrap) { App.router.send('next'); return true; } + var method = App.testMode ? 'GET' : 'POST'; + var url = App.testMode ? '/data/wizard/bootstrap/bootstrap.json' : '/api/bootstrap'; + $.ajax({ - type: 'POST', - url: '/api/bootstrap', + type: method, + url: url, data: bootStrapData, timeout: 10000, contentType: 'application/json', diff --git a/ambari-web/app/controllers/wizard/step3_controller.js b/ambari-web/app/controllers/wizard/step3_controller.js index 89f65f22d5..d43c16d4b9 100644 --- a/ambari-web/app/controllers/wizard/step3_controller.js +++ b/ambari-web/app/controllers/wizard/step3_controller.js @@ -42,8 +42,16 @@ App.WizardStep3Controller = Em.Controller.extend({ navigateStep: function () { this.loadStep(); - if (App.db.getBootStatus() === false) { - this.startBootstrap(); + if (App.db.getInstallType().installType !== 'manual') { + if (App.db.getBootStatus() === false) { + this.startBootstrap(); + } + } else { + // TODO: assume manually bootstrapped hosts are all successful for now + this.get('hosts').forEach(function (_host) { + _host.set('bootStatus', 'DONE'); + _host.set('bootLog', 'Success'); + }); } }, @@ -55,7 +63,7 @@ App.WizardStep3Controller = Em.Controller.extend({ console.log("TRACE: Loading step3: Confirm Hosts"); this.clearStep(); var hosts = this.loadHosts(); - // hosts.setEach('bootStatus', 'pending'); + // hosts.setEach('bootStatus', 'RUNNING'); this.renderHosts(hosts); }, @@ -88,30 +96,27 @@ App.WizardStep3Controller = Em.Controller.extend({ }, /** - * Parses and updates the content, and governs the possibility - * of the next doBootstrap (polling) call. - * Returns true if polling should stop (no hosts are in "pending" state); false otherwise + * Parses and updates the content based on bootstrap API response. + * Returns true if polling should continue (some hosts are in "RUNNING" state); false otherwise */ - parseHostInfo: function (hostsFromServer, hostsFromContent) { - var result = true; // default value as true implies - hostsFromServer.forEach(function (_hostFromServer) { - var host = hostsFromContent.findProperty('name', _hostFromServer.name); + parseHostInfo: function (hostsStatusFromServer) { + hostsStatusFromServer.forEach(function (_hostStatus) { + var host = this.get('bootHosts').findProperty('name', _hostStatus.hostName); if (host !== null && host !== undefined) { // check if hostname extracted from REST API data matches any hostname in content - host.set('bootStatus', _hostFromServer.status); - host.set('cpu', _hostFromServer.cpu); - host.set('memory', _hostFromServer.memory); + host.set('bootStatus', _hostStatus.status); + host.set('bootLog', _hostStatus.log); } - }); - // if the data rendered by REST API has no hosts or no hosts are in "pending" state, polling will stop - return this.hosts.length == 0 || !this.hosts.someProperty('bootStatus', 'pending'); + }, this); + // if the data rendered by REST API has hosts in "RUNNING" state, polling will continue + return this.get('bootHosts').length != 0 && this.get('bootHosts').someProperty('bootStatus', 'RUNNING'); }, /* Returns the current set of visible hosts on view (All, Succeeded, Failed) */ visibleHosts: function () { if (this.get('category') === 'Success') { - return (this.hosts.filterProperty('bootStatus', 'success')); + return (this.hosts.filterProperty('bootStatus', 'DONE')); } else if (this.get('category') === 'Error') { - return (this.hosts.filterProperty('bootStatus', 'error')); + return (this.hosts.filterProperty('bootStatus', 'FAILED')); } else { // if (this.get('category') === 'All Hosts') return this.hosts; } @@ -179,27 +184,42 @@ App.WizardStep3Controller = Em.Controller.extend({ } }, + numPolls: 0, + startBootstrap: function () { //this.set('isSubmitDisabled', true); //TODO: uncomment after actual hookup + this.numPolls = 0; this.set('bootHosts', this.get('hosts')); this.doBootstrap(); }, doBootstrap: function () { + this.numPolls++; var self = this; - var url = '/api/bootstrap'; + var url = App.testMode ? '/data/wizard/bootstrap/poll_' + this.numPolls + '.json' : '/api/bootstrap/1'; $.ajax({ type: 'GET', url: url, timeout: 5000, success: function (data) { - console.log("TRACE: In success function for the GET bootstrap call"); - var result = self.parseHostInfo(data, this.get('bootHosts')); - window.setTimeout(self.doBootstrap, 3000); + if (data.hostsStatus !== null) { + // in case of bootstrapping just one server, the server returns an object rather than an array... + if (!(data.hostsStatus instanceof Array)) { + data.hostsStatus = [ data.hostsStatus ]; + } + console.log("TRACE: In success function for the GET bootstrap call"); + var result = self.parseHostInfo(data.hostsStatus); + if (result) { + window.setTimeout(function () { self.doBootstrap() }, 3000); + return; + } + } + console.log('Bootstrap failed'); + self.stopBootstrap(); }, error: function () { - console.log("ERROR"); + console.log('Bootstrap failed'); self.stopBootstrap(); }, @@ -210,6 +230,7 @@ App.WizardStep3Controller = Em.Controller.extend({ stopBootstrap: function () { //TODO: uncomment following line after the hook up with the API call + console.log('stopBootstrap() called'); // this.set('isSubmitDisabled',false); }, @@ -220,14 +241,21 @@ App.WizardStep3Controller = Em.Controller.extend({ } }, - hostLogPopup: function (event) { + hostLogPopup: function (event, context) { + var host = event.context; + App.ModalPopup.show({ - header: Em.I18n.t('installer.step3.hostLog.popup.header'), + + header: Em.I18n.t('installer.step3.hostLog.popup.header').format(host.get('name')), + secondary: null, + onPrimary: function () { this.hide(); }, + bodyClass: Ember.View.extend({ - templateName: require('templates/wizard/step3HostLogPopup') + templateName: require('templates/wizard/step3_host_log_popup'), + host: host }) }); }, diff --git a/ambari-web/app/initialize.js b/ambari-web/app/initialize.js index c0f787c990..6882e8eff1 100644 --- a/ambari-web/app/initialize.js +++ b/ambari-web/app/initialize.js @@ -20,6 +20,7 @@ window.App = require('app'); App.testMode = false; +App.skipBootstrap = false; require('messages'); require('utils/data_table'); diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js index f6e378fec9..c5230c5ede 100644 --- a/ambari-web/app/messages.js +++ b/ambari-web/app/messages.js @@ -88,8 +88,7 @@ Em.I18n.translations = { 'installer.step3.header':'Confirm Hosts', 'installer.step3.body':'Here are the results of the host discovery process.<br>' + 'Please verify and remove the ones that you do not want to be part of the cluster.', - 'installer.step3.hostLog.popup.header':'Log file for the host', - 'installer.step3.hostLog.popup.body':'Placeholder for the log file', + 'installer.step3.hostLog.popup.header':'Bootstrap log for {0}', 'installer.step3.hosts.remove.popup.header':'Remove Hosts', 'installer.step3.hosts.remove.popup.body':'Are you sure you want to remove the selected host(s)?', 'installer.step3.hosts.retry.popup.header':'Retry Host Discovery', diff --git a/ambari-web/app/models/hosts.js b/ambari-web/app/models/hosts.js index da2abf342d..9a493d96a3 100644 --- a/ambari-web/app/models/hosts.js +++ b/ambari-web/app/models/hosts.js @@ -21,12 +21,50 @@ var App = require('app'); App.HostInfo = Ember.Object.extend({ elementId: 'host', name: '', - bootStatus: 'pending', cpu: '2', memory: '2', message: 'Information', barColor: 'progress-info', isChecked: true, - horizonData: - [{"cpu":"61","date":"2012-09-05T11:03:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"36","status":"LIVE","rackName":"Rack-0","io":"23"},{"cpu":"1","date":"2012-09-05T11:06:00+03:00","id":"0","memory":"46","name":"Node-0.0","network":"54","status":"LIVE","rackName":"Rack-0","io":"96"},{"cpu":"36","date":"2012-09-05T11:09:00+03:00","id":"0","memory":"65","name":"Node-0.0","network":"42","status":"LIVE","rackName":"Rack-0","io":"49"},{"cpu":"50","date":"2012-09-05T11:12:00+03:00","id":"0","memory":"46","name":"Node-0.0","network":"76","status":"LIVE","rackName":"Rack-0","io":"67"},{"cpu":"79","date":"2012-09-05T11:15:00+03:00","id":"0","memory":"91","name":"Node-0.0","network":"14","status":"LIVE","rackName":"Rack-0","io":"47"},{"cpu":"65","date":"2012-09-05T11:18:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"90","status":"LIVE","rackName":"Rack-0","io":"74"},{"cpu":"42","date":"2012-09-05T11:21:00+03:00","id":"0","memory":"96","name":"Node-0.0","network":"29","status":"LIVE","rackName":"Rack-0","io":"6"},{"cpu":"76","date":"2012-09-05T11:24:00+03:00","id":"0","memory":"28","name":"Node-0.0","network":"52","status":"LIVE","rackName":"Rack-0","io":"1"},{"cpu":"24","date":"2012-09-05T11:27:00+03:00","id":"0","memory":"66","name":"Node-0.0","network":"75","status":"LIVE","rackName":"Rack-0","io":"31"},{"cpu":"71","date":"2012-09-05T11:30:00+03:00","id":"0","memory":"8","name":"Node-0.0","network":"1","status":"LIVE","rackName":"Rack-0","io":"36"},{"cpu":"3","date":"2012-09-05T11:33:00+03:00","id":"0","memory":"57","name":"Node-0.0","network":"12","status":"LIVE","rackName":"Rack-0","io":"71"},{"cpu":"85","date":"2012-09-05T11:36:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"76","status":"LIVE","rackName":"Rack-0","io":"54"},{"cpu":"49","date":"2012-09-05T11:39:00+03:00","id":"0","memory":"8","name":"Node-0.0","network":"28","status":"LIVE","rackName":"Rack-0","io":"60"},{"cpu":"46","date":"2012-09-05T11:42:00+03:00","id":"0","memory":"75","name":"Node-0.0","network":"7","status":"LIVE","rackName":"Rack-0","io":"86"},{"cpu":"61","date":"2012-09-05T11:45:00+03:00","id":"0","memory":"11","name":"Node-0.0","network":"65","status":"LIVE","rackName":"Rack-0","io":"65"},{"cpu":"5","date":"2012-09-05T11:48:00+03:00","id":"0","memory":"24","name":"Node-0.0","network":"14","status":"LIVE","rackName":"Rack-0","io":"62"},{"cpu":"30","date":"2012-09-05T11:51:00+03:00","id":"0","memory":"40","name":"Node-0.0","network":"52","status":"LIVE","rackName":"Rack-0","io":"98"},{"cpu":"5","date":"2012-09-05T11:54:00+03:00","id":"0","memory":"38","name":"Node-0.0","network":"17","status":"LIVE","rackName":"Rack-0","io":"27"},{"cpu":"22","date":"2012-09-05T11:57:00+03:00","id":"0","memory":"80","name":"Node-0.0","network":"62","status":"LIVE","rackName":"Rack-0","io":"38"}] + + bootLog: null, + + bootStatus: 'RUNNING', + + bootStatusForDisplay: function() { + switch (this.get('bootStatus')) { + case 'DONE': + return 'Success'; + case 'FAILED': + return 'Failed'; + case 'RUNNING': + return 'Running'; + } + }.property('bootStatus'), + + bootBarColor: function() { + switch (this.get('bootStatus')) { + case 'DONE': + return 'progress-success'; + case 'FAILED': + return 'progress-danger'; + case 'RUNNING': + default: + return 'progress-info'; + } + }.property('bootStatus'), + + isBootDone: function() { + switch (this.get('bootStatus')) { + case 'DONE': + case 'FAILED': + return true; + case 'RUNNING': + default: + return false; + } + + }.property('bootStatus') + /* horizonData: + [{"cpu":"61","date":"2012-09-05T11:03:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"36","status":"LIVE","rackName":"Rack-0","io":"23"},{"cpu":"1","date":"2012-09-05T11:06:00+03:00","id":"0","memory":"46","name":"Node-0.0","network":"54","status":"LIVE","rackName":"Rack-0","io":"96"},{"cpu":"36","date":"2012-09-05T11:09:00+03:00","id":"0","memory":"65","name":"Node-0.0","network":"42","status":"LIVE","rackName":"Rack-0","io":"49"},{"cpu":"50","date":"2012-09-05T11:12:00+03:00","id":"0","memory":"46","name":"Node-0.0","network":"76","status":"LIVE","rackName":"Rack-0","io":"67"},{"cpu":"79","date":"2012-09-05T11:15:00+03:00","id":"0","memory":"91","name":"Node-0.0","network":"14","status":"LIVE","rackName":"Rack-0","io":"47"},{"cpu":"65","date":"2012-09-05T11:18:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"90","status":"LIVE","rackName":"Rack-0","io":"74"},{"cpu":"42","date":"2012-09-05T11:21:00+03:00","id":"0","memory":"96","name":"Node-0.0","network":"29","status":"LIVE","rackName":"Rack-0","io":"6"},{"cpu":"76","date":"2012-09-05T11:24:00+03:00","id":"0","memory":"28","name":"Node-0.0","network":"52","status":"LIVE","rackName":"Rack-0","io":"1"},{"cpu":"24","date":"2012-09-05T11:27:00+03:00","id":"0","memory":"66","name":"Node-0.0","network":"75","status":"LIVE","rackName":"Rack-0","io":"31"},{"cpu":"71","date":"2012-09-05T11:30:00+03:00","id":"0","memory":"8","name":"Node-0.0","network":"1","status":"LIVE","rackName":"Rack-0","io":"36"},{"cpu":"3","date":"2012-09-05T11:33:00+03:00","id":"0","memory":"57","name":"Node-0.0","network":"12","status":"LIVE","rackName":"Rack-0","io":"71"},{"cpu":"85","date":"2012-09-05T11:36:00+03:00","id":"0","memory":"44","name":"Node-0.0","network":"76","status":"LIVE","rackName":"Rack-0","io":"54"},{"cpu":"49","date":"2012-09-05T11:39:00+03:00","id":"0","memory":"8","name":"Node-0.0","network":"28","status":"LIVE","rackName":"Rack-0","io":"60"},{"cpu":"46","date":"2012-09-05T11:42:00+03:00","id":"0","memory":"75","name":"Node-0.0","network":"7","status":"LIVE","rackName":"Rack-0","io":"86"},{"cpu":"61","date":"2012-09-05T11:45:00+03:00","id":"0","memory":"11","name":"Node-0.0","network":"65","status":"LIVE","rackName":"Rack-0","io":"65"},{"cpu":"5","date":"2012-09-05T11:48:00+03:00","id":"0","memory":"24","name":"Node-0.0","network":"14","status":"LIVE","rackName":"Rack-0","io":"62"},{"cpu":"30","date":"2012-09-05T11:51:00+03:00","id":"0","memory":"40","name":"Node-0.0","network":"52","status":"LIVE","rackName":"Rack-0","io":"98"},{"cpu":"5","date":"2012-09-05T11:54:00+03:00","id":"0","memory":"38","name":"Node-0.0","network":"17","status":"LIVE","rackName":"Rack-0","io":"27"},{"cpu":"22","date":"2012-09-05T11:57:00+03:00","id":"0","memory":"80","name":"Node-0.0","network":"62","status":"LIVE","rackName":"Rack-0","io":"38"}] */ }); diff --git a/ambari-web/app/styles/application.less b/ambari-web/app/styles/application.less index 126883e8b7..ee011fc807 100644 --- a/ambari-web/app/styles/application.less +++ b/ambari-web/app/styles/application.less @@ -260,6 +260,9 @@ h1 { margin-bottom: 0; } } + .progress { + margin-bottom: 0; + } } #step4, #step6 { a.selected { diff --git a/ambari-web/app/templates/wizard/step3.hbs b/ambari-web/app/templates/wizard/step3.hbs index 35bfd7c770..3a4af157c4 100644 --- a/ambari-web/app/templates/wizard/step3.hbs +++ b/ambari-web/app/templates/wizard/step3.hbs @@ -61,11 +61,10 @@ <thead> <tr> <th class="span1">{{view Ember.Checkbox checkedBinding="allChecked"}}</th> - <th class="span2">Status</th> - <!-- given by the parsing function that parses data from bootstrap call --> - <th class="span4">Host</th> + <th class="span3">Host</th> <!-- retrieved from local storage initially --> - <th class="span2">Message</th> + <th class="span3">Progress</th> + <th class="span2">Status</th> <!-- given by the parsing function that parses data from bootstrap call, dynamically assign the color --> <th class="span3">Action</th> <!-- trash icon --> @@ -81,14 +80,17 @@ {{view Ember.Checkbox checkedBinding="host.isChecked"}} </td> <td> - {{host.bootStatus}} + {{host.name}} </td> <td> - {{host.name}} + <div {{bindAttr class="host.bootBarColor host.isBootDone::progress-striped host.isBootDone::active :progress"}}> + <div class="bar" style="width:100%"> + </div> + </div> </td> <td> <a href="javascript:void(null)" - data-toggle="modal" {{action hostLogPopup target="controller"}}>{{host.message}}</a> + data-toggle="modal" {{action hostLogPopup host target="controller"}}>{{host.bootStatusForDisplay}}</a> </td> <td> {{#if view.isRemovable}}<a class="btn btn-mini" {{action remove target="view"}}><i class="icon-trash"></i> diff --git a/ambari-web/app/templates/wizard/step3HostLogPopup.hbs b/ambari-web/app/templates/wizard/step3_host_log_popup.hbs index 7e9ab9e162..9a1ca7df58 100644 --- a/ambari-web/app/templates/wizard/step3HostLogPopup.hbs +++ b/ambari-web/app/templates/wizard/step3_host_log_popup.hbs @@ -16,4 +16,9 @@ * limitations under the License. }} -<p>{{t installer.step3.hostLog.popup.body}}</p> + +<div id="host-log"> + <div> + <pre class="bootLog">{{view.host.bootLog}}</pre> + </div> +</div> diff --git a/ambari-web/app/views/wizard/step3_view.js b/ambari-web/app/views/wizard/step3_view.js index 8c21f2ffea..c2ea51650c 100644 --- a/ambari-web/app/views/wizard/step3_view.js +++ b/ambari-web/app/views/wizard/step3_view.js @@ -52,3 +52,5 @@ App.WizardHostView = Em.View.extend({ }.property('hostInfo.bootStatus') }); + + |