瀏覽代碼

AMBARI-3204. Ambari UI shows JMX links as HTTP URLs even when SSL is enabled on Hadoop JMX endpoints. (Andrii Babiichuk via yusaku)

Yusaku Sako 11 年之前
父節點
當前提交
4a0b21b54d
共有 3 個文件被更改,包括 159 次插入34 次删除
  1. 63 31
      ambari-web/app/models/quick_links.js
  2. 9 0
      ambari-web/app/utils/ajax.js
  3. 87 3
      ambari-web/app/views/common/quick_view_link_view.js

+ 63 - 31
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'
   }
 ];

+ 9 - 0
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}',

+ 87 - 3
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('content.quickLinks.@each.label'),
+  }.property('content.quickLinks.@each.label','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";
     }