Updated Branches: refs/heads/trunk 8dd0f4f51 -> 4a0b21b54
AMBARI-3204. Ambari UI shows JMX links as HTTP URLs even when SSL is enabled on Hadoop JMX endpoints. (Andrii Babiichuk via yusaku) Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/4a0b21b5 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/4a0b21b5 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/4a0b21b5 Branch: refs/heads/trunk Commit: 4a0b21b54d5e7fa9e4040d88d12feebbdf896176 Parents: 8dd0f4f Author: Yusaku Sako <[email protected]> Authored: Thu Sep 12 12:59:28 2013 -0700 Committer: Yusaku Sako <[email protected]> Committed: Thu Sep 12 12:59:42 2013 -0700 ---------------------------------------------------------------------- ambari-web/app/models/quick_links.js | 94 +++++++++++++------- ambari-web/app/utils/ajax.js | 9 ++ .../app/views/common/quick_view_link_view.js | 90 ++++++++++++++++++- 3 files changed, 159 insertions(+), 34 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/4a0b21b5/ambari-web/app/models/quick_links.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/models/quick_links.js b/ambari-web/app/models/quick_links.js index 38809e1..068f5bd 100644 --- a/ambari-web/app/models/quick_links.js +++ b/ambari-web/app/models/quick_links.js @@ -21,7 +21,8 @@ var App = require('app'); App.QuickLinks = DS.Model.extend({ label: DS.attr('string'), url: DS.attr('string'), - service_id: DS.attr('string') + service_id: DS.attr('string'), + template: DS.attr('string') }); App.QuickLinks.FIXTURES = [ @@ -29,180 +30,211 @@ App.QuickLinks.FIXTURES = [ id:1, label:'NameNode UI', url:'%@://%@:50070/dfshealth.jsp', - service_id: 'HDFS' + service_id: 'HDFS', + template:'%@://%@:50070/dfshealth.jsp' }, { id:2, label:'NameNode logs', url:'%@://%@:50070/logs', - service_id: 'HDFS' + service_id: 'HDFS', + template:'%@://%@:50070/logs' }, { id:3, label:'NameNode JMX', url:'%@://%@:50070/jmx', - service_id: 'HDFS' + service_id: 'HDFS', + template:'%@://%@:50070/jmx' }, { id:4, label:'Thread Stacks', url:'%@://%@:50070/stacks', - service_id: 'HDFS' + service_id: 'HDFS', + template:'%@://%@:50070/stacks' }, { id:5, label:'JobTracker UI', url:'%@://%@:50030/jobtracker.jsp', - service_id: 'MAPREDUCE' + service_id: 'MAPREDUCE', + template:'%@://%@:50030/jobtracker.jsp' }, { id:6, label:'Scheduling Info', url:'%@://%@:50030/scheduler', - service_id: 'MAPREDUCE' + service_id: 'MAPREDUCE', + template:'%@://%@:50030/scheduler' }, { id:7, label:'Running Jobs', url:'%@://%@:50030/jobtracker.jsp#running_jobs', - service_id: 'MAPREDUCE' + service_id: 'MAPREDUCE', + template:'%@://%@:50030/jobtracker.jsp#running_jobs' }, { id:8, label:'Retired Jobs', url:'%@://%@:50030/jobtracker.jsp#retired_jobs', - service_id: 'MAPREDUCE' + service_id: 'MAPREDUCE', + template:'%@://%@:50030/jobtracker.jsp#retired_jobs' }, { id:9, label:'JobHistory Server', url:'%@://%@:51111/jobhistoryhome.jsp', - service_id: 'MAPREDUCE' + service_id: 'MAPREDUCE', + template:'%@://%@:51111/jobhistoryhome.jsp' }, { id:10, label:'JobTracker Logs', url:'%@://%@:50030/logs', - service_id: 'MAPREDUCE' + service_id: 'MAPREDUCE', + template:'%@://%@:50030/logs' }, { id:11, label:'JobTracker JMX', url:'%@://%@:50030/jmx', - service_id: 'MAPREDUCE' + service_id: 'MAPREDUCE', + template:'%@://%@:50030/jmx' }, { id:12, label:'Thread Stacks', url:'%@://%@:50030/stacks', - service_id: 'MAPREDUCE' + service_id: 'MAPREDUCE', + template:'%@://%@:50030/stacks' }, { id:13, label:'HBase Master UI', url:'%@://%@:60010/master-status', - service_id: 'HBASE' + service_id: 'HBASE', + template:'%@://%@:60010/master-status' }, { id:14, label:'HBase Logs', url:'%@://%@:60010/logs', - service_id: 'HBASE' + service_id: 'HBASE', + template:'%@://%@:60010/logs' }, { id:15, label:'Zookeeper Info', url:'%@://%@:60010/zk.jsp', - service_id: 'HBASE' + service_id: 'HBASE', + template:'%@://%@:60010/zk.jsp' }, { id:16, label:'HBase Master JMX', url:'%@://%@:60010/jmx', - service_id: 'HBASE' + service_id: 'HBASE', + template:'%@://%@:60010/jmx' }, { id:17, label:'Debug Dump', url:'%@://%@:60010/dump', - service_id: 'HBASE' + service_id: 'HBASE', + template:'%@://%@:60010/dump' }, { id:18, label:'Thread Stacks', url:'%@://%@:60010/stacks', - service_id: 'HBASE' + service_id: 'HBASE', + template:'%@://%@:60010/stacks' }, { id:19, label:'Oozie Web UI', url:'%@://%@:11000/oozie', - service_id: 'OOZIE' + service_id: 'OOZIE', + template:'%@://%@:11000/oozie' }, { id:20, label:'Ganglia Web UI', url:'%@://%@/ganglia', - service_id: 'GANGLIA' + service_id: 'GANGLIA', + template:'%@://%@/ganglia' + }, { id:21, label:'Nagios Web UI', url:'%@://%@/nagios', - service_id: 'NAGIOS' + service_id: 'NAGIOS', + template:'%@://%@/nagios' }, { id:22, label:'Hue Web UI', url:'%@://%@/hue', - service_id: 'HUE' + service_id: 'HUE', + template:'%@://%@/hue' }, { id:23, label:'ResourceManager UI', url:'%@://%@:8088', - service_id: 'YARN' + service_id: 'YARN', + template:'%@://%@:8088' }, { id:24, label:'ResourceManager logs', url:'%@://%@:8088/logs', - service_id: 'YARN' + service_id: 'YARN', + template:'%@://%@:8088/logs' }, { id:25, label:'ResourceManager JMX', url:'%@://%@:8088/jmx', - service_id: 'YARN' + service_id: 'YARN', + template:'%@://%@:8088/jmx' }, { id:26, label:'Thread Stacks', url:'%@://%@:8088/stacks', - service_id: 'YARN' + service_id: 'YARN', + template:'%@://%@:8088/stacks' }, { id:27, label:'JobHistory UI', url:'%@://%@:19888', - service_id: 'MAPREDUCE2' + service_id: 'MAPREDUCE2', + template:'%@://%@:19888' }, { id:28, label:'JobHistory logs', url:'%@://%@:19888/logs', - service_id: 'MAPREDUCE2' + service_id: 'MAPREDUCE2', + template:'%@://%@:19888/logs' }, { id:29, label:'JobHistory JMX', url:'%@://%@:19888/jmx', - service_id: 'MAPREDUCE2' + service_id: 'MAPREDUCE2', + template:'%@://%@:19888/jmx' }, { id:30, label:'Thread Stacks', url:'%@://%@:19888/stacks', - service_id: 'MAPREDUCE2' + service_id: 'MAPREDUCE2', + template:'%@://%@:19888/stacks' } ]; http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/4a0b21b5/ambari-web/app/utils/ajax.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/utils/ajax.js b/ambari-web/app/utils/ajax.js index 73d8191..419a3ab 100644 --- a/ambari-web/app/utils/ajax.js +++ b/ambari-web/app/utils/ajax.js @@ -222,6 +222,15 @@ var urls = { 'real': '/clusters/{clusterName}', 'mock': '/data/clusters/cluster.json' }, + 'config.tags.sync': { + 'real': '/clusters/{clusterName}', + 'mock': '/data/clusters/cluster.json', + 'format': function (data) { + return { + async: false + }; + } + }, 'config.on_site': { 'real': '/clusters/{clusterName}/configurations?{params}', 'mock': '/data/configurations/cluster_level_configs.json?{params}', http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/4a0b21b5/ambari-web/app/views/common/quick_view_link_view.js ---------------------------------------------------------------------- diff --git a/ambari-web/app/views/common/quick_view_link_view.js b/ambari-web/app/views/common/quick_view_link_view.js index 5e2fa50..649a30f 100644 --- a/ambari-web/app/views/common/quick_view_link_view.js +++ b/ambari-web/app/views/common/quick_view_link_view.js @@ -20,6 +20,70 @@ var App = require('app'); App.QuickViewLinks = Em.View.extend({ + + loadTags: function() { + App.ajax.send({ + name: 'config.tags.sync', + sender: this, + success: 'loadTagsSuccess', + error: 'loadTagsError' + }); + }, + + loadTagsSuccess: function(data) { + var tags = [] + for( var prop in data.Clusters.desired_configs){ + tags.push(Em.Object.create({ + siteName: prop, + tagName: data.Clusters.desired_configs[prop]['tag'] + })); + } + var actual = this.get('actualTags'); + if (JSON.stringify(actual) != JSON.stringify(tags)) { + this.set('actualTags',tags); + this.getSecurityPropertie(); + } + }, + + actualTags: [], + + securityProperties: [], + + /** + * list of files that contains properties for enabling/disabling ssl + */ + siteNames: ['core-site'], + + getSecurityPropertie: function() { + this.set('securityProperties',[]); + this.get('siteNames').forEach(function(name){ + var tag = this.get('actualTags'); + if (tag && tag.findProperty('siteName',name)) { + var tagName = tag.findProperty('siteName',name).tagName; + App.ajax.send({ + name: 'admin.service_config', + sender: this, + data: { + tagName: tagName, + siteName: name + }, + success: 'getSecurityPropertiesSuccess', + error: 'getSecurityPropertiesError' + }); + } + }, this) + }, + + getSecurityPropertiesSuccess: function(data) { + var properties = this.get('securityProperties'); + if(data.items[0]) { + properties.pushObject(data.items[0].properties); + this.set('securityProperties', properties); + } + }, + getSecurityPropertiesError: function() { + console.warn('can\'t get properties') + }, ambariProperties: function() { return App.router.get('clusterController.ambariProperties'); }, @@ -27,6 +91,7 @@ App.QuickViewLinks = Em.View.extend({ * Updated quick links. Here we put correct hostname to url */ quickLinks: function () { + this.loadTags(); var serviceName = this.get('content.serviceName'); var components = this.get('content.hostComponents'); var host; @@ -76,15 +141,22 @@ App.QuickViewLinks = Em.View.extend({ } return this.get('content.quickLinks').map(function (item) { var protocol = self.setProtocol(item.get('service_id')); - if (item.get('url')) { - item.set('url', item.get('url').fmt(protocol,host)); + if (item.get('template')) { + item.set('url', item.get('template').fmt(protocol,host)); } return item; }); - }.property('[email protected]'), + }.property('[email protected]','actualTags'), setProtocol: function(service_id){ var properties = this.ambariProperties(); + var securityProperties = this.get('securityProperties'); + var hadoopSslEnabled = false; + if(securityProperties) { + securityProperties.forEach(function(property){ + property['hadoop.ssl.enabled'] && property['hadoop.ssl.enabled'] === 'true' ? hadoopSslEnabled = true : null; + }); + } switch(service_id){ case "GANGLIA": return (properties && properties.hasOwnProperty('ganglia.https') && properties['ganglia.https']) ? "https" : "http"; @@ -92,6 +164,18 @@ App.QuickViewLinks = Em.View.extend({ case "NAGIOS": return (properties && properties.hasOwnProperty('nagios.https') && properties['nagios.https']) ? "https" : "http"; break; + case "HDFS": + return hadoopSslEnabled ? "https" : "http"; + break; + case "YARN": + return hadoopSslEnabled ? "https" : "http"; + break; + case "MAPREDUCE": + return hadoopSslEnabled ? "https" : "http"; + break; + case "MAPREDUCE2": + return hadoopSslEnabled ? "https" : "http"; + break; default: return "http"; }
