Browse Source

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 12 năm trước cách đây
mục cha
commit
4a0b21b54d

+ 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";
     }