You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ja...@apache.org on 2013/08/15 02:48:46 UTC

git commit: AMBARI-2904: Security wizard: Misc fixes for namenode HA. (jaimin)

Updated Branches:
  refs/heads/trunk eacb81660 -> 8a11fdd86


AMBARI-2904: Security wizard: Misc fixes for namenode HA. (jaimin)


Project: http://git-wip-us.apache.org/repos/asf/incubator-ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ambari/commit/8a11fdd8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ambari/tree/8a11fdd8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ambari/diff/8a11fdd8

Branch: refs/heads/trunk
Commit: 8a11fdd868021121aae4d817d9bf3925469c65eb
Parents: eacb816
Author: Jaimin Jetly <ja...@hortonworks.com>
Authored: Wed Aug 14 17:47:39 2013 -0700
Committer: Jaimin Jetly <ja...@hortonworks.com>
Committed: Wed Aug 14 17:47:47 2013 -0700

----------------------------------------------------------------------
 .../app/controllers/main/admin/security.js      | 19 +++++++++++-------
 .../main/admin/security/add/step2.js            | 21 ++++++++++++--------
 .../main/admin/security/add/step3.js            |  6 ++++--
 ambari-web/app/data/HDP2/secure_mapping.js      | 12 +++++------
 ambari-web/app/data/HDP2/secure_properties.js   |  6 ++++--
 ambari-web/app/data/secure_properties.js        |  2 ++
 ambari-web/app/mappers/service_mapper.js        | 11 ++++++++++
 ambari-web/app/models/host_component.js         |  1 +
 ambari-web/app/models/service/hdfs.js           |  1 +
 ambari-web/app/utils/helper.js                  |  2 ++
 10 files changed, 56 insertions(+), 25 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/8a11fdd8/ambari-web/app/controllers/main/admin/security.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/security.js b/ambari-web/app/controllers/main/admin/security.js
index a34282c..a0f6894 100644
--- a/ambari-web/app/controllers/main/admin/security.js
+++ b/ambari-web/app/controllers/main/admin/security.js
@@ -96,9 +96,9 @@ App.MainAdminSecurityController = Em.Controller.extend({
 
   getSecurityStatusFromServerSuccessCallback: function (data) {
     var configs = data.Clusters.desired_configs;
-    if ('global' in configs && 'core-site' in configs) {
+    if ('global' in configs && 'hdfs-site' in configs) {
       this.set('tag.global', configs['global'].tag);
-      this.set('tag.core-site', configs['core-site'].tag);
+      this.set('tag.hdfs-site', configs['hdfs-site'].tag);
       this.getServiceConfigsFromServer();
     }
     else {
@@ -109,7 +109,7 @@ App.MainAdminSecurityController = Em.Controller.extend({
   getServiceConfigsFromServer: function () {
     var urlParams = [];
     urlParams.push('(type=global&tag=' + this.get('tag.global') + ')');
-    urlParams.push('(type=core-site&tag=' + this.get('tag.core-site') + ')');
+    urlParams.push('(type=hdfs-site&tag=' + this.get('tag.hdfs-site') + ')');
     App.ajax.send({
       name: 'admin.security.all_configurations',
       sender: this,
@@ -129,15 +129,20 @@ App.MainAdminSecurityController = Em.Controller.extend({
     }
     else {
       this.set('securityEnabled', false);
-      var coreConfigs = data.items.findProperty('tag', this.get('tag.core-site')).properties;
-      this.setNnHaStatus(coreConfigs);
+      var hdfsConfigs = data.items.findProperty('tag', this.get('tag.hdfs-site')).properties;
+      this.setNnHaStatus(hdfsConfigs);
     }
     this.loadUsers(configs);
     this.set('dataIsLoaded', true);
   },
 
-  setNnHaStatus: function(coreConfigs) {
-    if(coreConfigs && coreConfigs['dfs.nameservices'] && coreConfigs['dfs.ha.namenodes.mycluster']) {
+  setNnHaStatus: function(hdfsConfigs) {
+    var nnHaStatus = hdfsConfigs && hdfsConfigs['dfs.nameservices'];
+    var namenodes;
+    if (nnHaStatus) {
+      namenodesKey = 'dfs.ha.namenodes.' + hdfsConfigs['dfs.nameservices'];
+    }
+    if(nnHaStatus && hdfsConfigs[namenodesKey]) {
       App.db.setIsNameNodeHa('true');
     } else {
       App.db.setIsNameNodeHa('false');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/8a11fdd8/ambari-web/app/controllers/main/admin/security/add/step2.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/security/add/step2.js b/ambari-web/app/controllers/main/admin/security/add/step2.js
index 1d18d77..7511b86 100644
--- a/ambari-web/app/controllers/main/admin/security/add/step2.js
+++ b/ambari-web/app/controllers/main/admin/security/add/step2.js
@@ -47,8 +47,8 @@ App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({
     this.addUserPrincipals(this.get('content.services'));
     this.addMasterHostToGlobals(this.get('content.services'));
     this.addSlaveHostToGlobals(this.get('content.services'));
-    this.changeCategoryOnHa(this.get('content.services'));
     this.renderServiceConfigs(this.get('content.services'));
+    this.changeCategoryOnHa(this.get('content.services'));
     var storedServices = this.get('content.serviceConfigProperties');
     if (storedServices) {
       var configs = new Ember.Set();
@@ -231,10 +231,15 @@ App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({
     if (hdfsService) {
       var namenodeHost = hdfsService.configs.findProperty('name', 'namenode_host');
       var sNamenodeHost = hdfsService.configs.findProperty('name', 'snamenode_host');
+      var jnHosts = hdfsService.configs.findProperty('name', 'journalnode_hosts');
       if (namenodeHost && sNamenodeHost) {
         namenodeHost.defaultValue = App.Service.find('HDFS').get('hostComponents').findProperty('componentName', 'NAMENODE').get('host.hostName');
         sNamenodeHost.defaultValue = App.Service.find('HDFS').get('hostComponents').findProperty('componentName', 'SECONDARY_NAMENODE').get('host.hostName');
       }
+      var jnComponent = App.Service.find('HDFS').get('hostComponents').findProperty('componentName', 'JOURNALNODE');
+      if(jnHosts && jnComponent) {
+        this.setHostsToConfig(hdfsService, 'journalnode_hosts', 'JOURNALNODE');
+      }
     }
     if (mapReduceService) {
       var jobTrackerHost = mapReduceService.configs.findProperty('name', 'jobtracker_host');
@@ -261,17 +266,17 @@ App.MainAdminSecurityAddStep2Controller = Em.Controller.extend({
   changeCategoryOnHa: function (serviceConfigs) {
     var hdfsService = serviceConfigs.findProperty('serviceName', 'HDFS');
     if (hdfsService) {
-      var secureProperties = require('data/HDP2/secure_properties').configProperties;
+      var hdfsProperties = this.get('stepConfigs').findProperty('serviceName','HDFS').get('configs');
       var configCategories = hdfsService.configCategories;
-      var dfsHttpPrincipal = secureProperties.findProperty('name', 'hadoop_http_principal_name');
-      var dfsHttpKeytab = secureProperties.findProperty('name', 'hadoop_http_keytab');
+      var dfsHttpPrincipal = hdfsProperties.findProperty('name', 'hadoop_http_principal_name');
+      var dfsHttpKeytab = hdfsProperties.findProperty('name', 'hadoop_http_keytab');
       if ((App.testMode && App.testNameNodeHA) || (this.get('content.isNnHa') === 'true')) {
         if (dfsHttpPrincipal && dfsHttpKeytab) {
-          dfsHttpPrincipal.category = 'NameNode';
-          dfsHttpKeytab.category = 'NameNode';
+          dfsHttpPrincipal.set('category','NameNode');
+          dfsHttpKeytab.set('category','NameNode');
         } else {
-          dfsHttpPrincipal.category = 'General';
-          dfsHttpKeytab.category = 'General';
+          dfsHttpPrincipal.set('category','General');
+          dfsHttpKeytab.set('category','General');
         }
         var generalCategory = configCategories.findProperty('name','General');
         var snCategory = configCategories.findProperty('name','SNameNode');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/8a11fdd8/ambari-web/app/controllers/main/admin/security/add/step3.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/security/add/step3.js b/ambari-web/app/controllers/main/admin/security/add/step3.js
index d129305..38eac09 100644
--- a/ambari-web/app/controllers/main/admin/security/add/step3.js
+++ b/ambari-web/app/controllers/main/admin/security/add/step3.js
@@ -45,7 +45,7 @@ App.MainAdminSecurityAddStep3Controller = Em.Controller.extend({
     var hosts = App.Host.find();
     var result = [];
     var componentsToDisplay = ['NAMENODE', 'SECONDARY_NAMENODE', 'DATANODE', 'JOBTRACKER', 'ZOOKEEPER_SERVER', 'HIVE_SERVER', 'TASKTRACKER',
-      'OOZIE_SERVER', 'NAGIOS_SERVER', 'HBASE_MASTER', 'HBASE_REGIONSERVER','HISTORYSERVER','RESOURCEMANAGER','NODEMANAGER'];
+      'OOZIE_SERVER', 'NAGIOS_SERVER', 'HBASE_MASTER', 'HBASE_REGIONSERVER','HISTORYSERVER','RESOURCEMANAGER','NODEMANAGER','JOURNALNODE'];
     var securityUsers = [];
     if (!securityUsers || securityUsers.length < 1) { // Page could be refreshed in middle
       securityUsers = this.getSecurityUsers();
@@ -77,6 +77,7 @@ App.MainAdminSecurityAddStep3Controller = Em.Controller.extend({
       'NAMENODE': hdfsUserId,
       'SECONDARY_NAMENODE': hdfsUserId,
       'DATANODE': hdfsUserId,
+      'JOURNALNODE': hdfsUserId,
       'TASKTRACKER': mapredUserId,
       'JOBTRACKER': mapredUserId,
       'HISTORYSERVER': mapredUserId,
@@ -126,7 +127,7 @@ App.MainAdminSecurityAddStep3Controller = Em.Controller.extend({
         });
       }
       if(host.get('hostComponents').someProperty('componentName', 'NAMENODE') ||
-        host.get('hostComponents').someProperty('componentName', 'SECONDARY_NAMENODE')){
+        host.get('hostComponents').someProperty('componentName', 'SECONDARY_NAMENODE') ||  host.get('hostComponents').someProperty('componentName', 'JOURNALNODE')){
         result.push({
           host: host.get('hostName'),
           component: Em.I18n.t('admin.addSecurity.hdfs.user.httpUser'),
@@ -138,6 +139,7 @@ App.MainAdminSecurityAddStep3Controller = Em.Controller.extend({
           acl: '440'
         });
       }
+
       if (host.get('hostComponents').someProperty('componentName', 'WEBHCAT_SERVER')) {
         var webHcatConfigs = configs.filterProperty('serviceName', 'WEBHCAT');
         var webHCatHttpPrincipal = webHcatConfigs.findProperty('name', 'webHCat_http_principal_name');

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/8a11fdd8/ambari-web/app/data/HDP2/secure_mapping.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/secure_mapping.js b/ambari-web/app/data/HDP2/secure_mapping.js
index 95fc517..0376f35 100644
--- a/ambari-web/app/data/HDP2/secure_mapping.js
+++ b/ambari-web/app/data/HDP2/secure_mapping.js
@@ -35,9 +35,9 @@ module.exports = [
   },
   {
     "name": "hadoop.security.auth_to_local",
-    "templateName": ["resourcemanager_primary_name", "kerberos_domain", "yarn_user", "nodemanager_primary_name", "namenode_primary_name", "hdfs_user", "datanode_primary_name", "hbase_master_primary_name", "hbase_user","hbase_regionserver_primary_name","oozie_primary_name","oozie_user","jobhistory_primary_name","mapred_user"],
+    "templateName": ["resourcemanager_primary_name", "kerberos_domain", "yarn_user", "nodemanager_primary_name", "namenode_primary_name", "hdfs_user", "datanode_primary_name", "hbase_master_primary_name", "hbase_user","hbase_regionserver_primary_name","oozie_primary_name","oozie_user","jobhistory_primary_name","mapred_user","journalnode_principal_name"],
     "foreignKey": null,
-    "value": "RULE:[2:$1@$0](<templateName[0]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[3]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[4]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[6]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[10]>@.*<templateName[1]>)s/.*/<templateName[11]>/\nRULE:[2:$1@$0](<templateName[12]>@.*<templateName[1]>)s/.*/<templateName[13]>/\nDEFAULT",
+    "value": "RULE:[2:$1@$0](<templateName[0]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[3]>@.*<templateName[1]>)s/.*/<templateName[2]>/\nRULE:[2:$1@$0](<templateName[4]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[6]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[10]>@.*<templateName[1]>)s/.*/<templateName[11]>/\nRULE:[2:$1@$0](<templateName[12]>@.*<templateName[1]>)s/.*/<templateName[13]>/\nRULE:[2:$1@$0](<templateName[14]>@.*<templateName[1]>)s/.*/<templateName[5]>/\nDEFAULT",
     "filename": "core-site.xml",
     "serviceName": "HDFS",
     "dependedServiceName": [{name: "HBASE", replace: "\nRULE:[2:$1@$0](<templateName[7]>@.*<templateName[1]>)s/.*/<templateName[8]>/\nRULE:[2:$1@$0](<templateName[9]>@.*<templateName[1]>)s/.*/<templateName[8]>/"},{name: "OOZIE",replace: "\nRULE:[2:$1@$0](<templateName[10]>@.*<templateName[1]>)s/.*/<templateName[11]>/"},{name: "MAPREDUCE2",replace: "\nRULE:[2:$1@$0](<templateName[12]>@.*<templateName[1]>)s/.*/<templateName[13]>/"}]
@@ -123,17 +123,17 @@ module.exports = [
   },
   {
     "name": "dfs.journalnode.kerberos.principal",
-    "templateName": ["journalnode_principal_name"],
+    "templateName": ["journalnode_principal_name", "kerberos_domain"],
     "foreignKey": null,
-    "value": "<templateName[0]>",
+    "value": "<templateName[0]>@<templateName[1]>",
     "filename": "hdfs-site.xml",
     "serviceName": "HDFS"
   },
   {
     "name": "dfs.journalnode.kerberos.internal.spnego.principal",
-    "templateName": ["journalnode_http_principal_name"],
+    "templateName": ["journalnode_http_principal_name", "kerberos_domain"],
     "foreignKey": null,
-    "value": "<templateName[0]>",
+    "value": "<templateName[0]>@<templateName[1]>",
     "filename": "hdfs-site.xml",
     "serviceName": "HDFS"
   },

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/8a11fdd8/ambari-web/app/data/HDP2/secure_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/secure_properties.js b/ambari-web/app/data/HDP2/secure_properties.js
index 685862a..024fe75 100644
--- a/ambari-web/app/data/HDP2/secure_properties.js
+++ b/ambari-web/app/data/HDP2/secure_properties.js
@@ -454,7 +454,7 @@ module.exports =
       "name": "resourcemanager_principal_name",
       "displayName": "Principal name",
       "value": "",
-      "defaultValue": "rs/_HOST",
+      "defaultValue": "rm/_HOST",
       "description": "Principal name for ResourceManager. _HOST will get automatically replaced with actual hostname at an instance of ResourceManager",
       "displayType": "principal",
       "isVisible": true,
@@ -468,7 +468,7 @@ module.exports =
       "name": "resourcemanager_keytab",
       "displayName": "Path to keytab file",
       "value": "",
-      "defaultValue": "/etc/security/keytabs/rs.service.keytab",
+      "defaultValue": "/etc/security/keytabs/rm.service.keytab",
       "description": "Path to ResourceManager keytab file",
       "displayType": "directory",
       "isVisible": true,
@@ -652,6 +652,8 @@ module.exports =
       "isVisible": true,
       "isOverridable": false,
       "serviceName": "HBASE",
+      "category": "RegionServer",
+      "components": ["HBASE_REGIONSERVER"]
     },
 
     //HIVE

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/8a11fdd8/ambari-web/app/data/secure_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/secure_properties.js b/ambari-web/app/data/secure_properties.js
index 30d2034..356bdf0 100644
--- a/ambari-web/app/data/secure_properties.js
+++ b/ambari-web/app/data/secure_properties.js
@@ -557,6 +557,8 @@ module.exports =
       "isVisible": true,
       "isOverridable": false,
       "serviceName": "HBASE",
+      "category": "RegionServer",
+      "components": ["HBASE_REGIONSERVER"]
     },
 
     //HIVE

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/8a11fdd8/ambari-web/app/mappers/service_mapper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/mappers/service_mapper.js b/ambari-web/app/mappers/service_mapper.js
index 5ffa096..a3d9a13 100644
--- a/ambari-web/app/mappers/service_mapper.js
+++ b/ambari-web/app/mappers/service_mapper.js
@@ -62,6 +62,7 @@ App.servicesMapper = App.QuickDataMapper.create({
     name_node_id: 'nameNodeComponent.host_components[0].HostRoles.host_name',
     sname_node_id: 'snameNodeComponent.host_components[0].HostRoles.host_name',
     data_nodes: 'data_nodes',
+    journal_nodes: 'journal_nodes',
     name_node_start_time: 'nameNodeComponent.ServiceComponentInfo.StartTime',
     jvm_memory_heap_used: 'nameNodeComponent.host_components[0].metrics.jvm.memHeapUsedM',
     jvm_memory_heap_committed: 'nameNodeComponent.host_components[0].metrics.jvm.memHeapCommittedM',
@@ -353,6 +354,16 @@ App.servicesMapper = App.QuickDataMapper.create({
       if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "SECONDARY_NAMENODE") {
         item.snameNodeComponent = component;
       }
+      if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "JOURNALNODE") {
+        if (!item.journal_nodes) {
+          item.journal_nodes = [];
+        }
+        if (component.host_components) {
+          component.host_components.forEach(function (hc) {
+            item.journal_nodes.push(hc.HostRoles.host_name);
+          });
+        }
+      }
       if (component.ServiceComponentInfo && component.ServiceComponentInfo.component_name == "DATANODE") {
         if (!item.data_nodes) {
           item.data_nodes = [];

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/8a11fdd8/ambari-web/app/models/host_component.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/host_component.js b/ambari-web/app/models/host_component.js
index 22406db..ecef6f4 100644
--- a/ambari-web/app/models/host_component.js
+++ b/ambari-web/app/models/host_component.js
@@ -43,6 +43,7 @@ App.HostComponent = DS.Model.extend({
       case 'NAMENODE':
       case 'SECONDARY_NAMENODE':
       case 'SNAMENODE':
+      case 'JOURNALNODE':
       case 'JOBTRACKER':
       case 'ZOOKEEPER_SERVER':
       case 'HIVE_SERVER':

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/8a11fdd8/ambari-web/app/models/service/hdfs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/models/service/hdfs.js b/ambari-web/app/models/service/hdfs.js
index 8c8a48f..78e8e87 100644
--- a/ambari-web/app/models/service/hdfs.js
+++ b/ambari-web/app/models/service/hdfs.js
@@ -22,6 +22,7 @@ App.HDFSService = App.Service.extend({
   nameNode: DS.belongsTo('App.Host'),
   snameNode: DS.belongsTo('App.Host'),
   dataNodes: DS.hasMany('App.Host'),
+  journalNodes: DS.hasMany('App.Host'),
   nameNodeStartTime: DS.attr('number'),
   jvmMemoryHeapUsed: DS.attr('number'),
   jvmMemoryHeapCommitted: DS.attr('number'),

http://git-wip-us.apache.org/repos/asf/incubator-ambari/blob/8a11fdd8/ambari-web/app/utils/helper.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/utils/helper.js b/ambari-web/app/utils/helper.js
index ba3ec30..d62f990 100644
--- a/ambari-web/app/utils/helper.js
+++ b/ambari-web/app/utils/helper.js
@@ -227,6 +227,8 @@ App.format = {
         return 'NameNode Check';
       case 'DATANODE':
         return 'DataNode';
+      case 'JOURNALNODE':
+        return 'JournalNode';
       case 'HDFS_SERVICE_CHECK':
         return 'HDFS Check';
       case 'SECONDARY_NAMENODE':