You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by yu...@apache.org on 2014/08/14 22:24:19 UTC

[2/2] git commit: AMBARI-6787. Cleanup of Cluster > Admin tab. (xiwang via yusaku)

AMBARI-6787. Cleanup of Cluster > Admin tab. (xiwang via yusaku)


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

Branch: refs/heads/trunk
Commit: 433337402553978dd2ca7818cd935f9c2b625858
Parents: c6c2165
Author: Yusaku Sako <yu...@hortonworks.com>
Authored: Thu Aug 14 13:23:23 2014 -0700
Committer: Yusaku Sako <yu...@hortonworks.com>
Committed: Thu Aug 14 13:23:40 2014 -0700

----------------------------------------------------------------------
 ambari-web/app/controllers.js                   |   7 +-
 .../app/controllers/main/admin/cluster.js       | 161 ------------
 .../nameNode/step1_controller.js                |   2 +-
 .../nameNode/step4_controller.js                |   2 +-
 .../resourceManager/step4_controller.js         |   2 +-
 .../controllers/main/admin/misc_controller.js   | 127 ----------
 .../app/controllers/main/admin/repositories.js  | 161 ++++++++++++
 .../main/admin/serviceAccounts_controller.js    | 127 ++++++++++
 ambari-web/app/controllers/main/admin/user.js   |  76 ------
 .../app/controllers/main/admin/user/create.js   |  24 --
 .../app/controllers/main/admin/user/edit.js     |  24 --
 ambari-web/app/controllers/wizard.js            |   2 +-
 ambari-web/app/messages.js                      |   2 +
 ambari-web/app/routes/main.js                   |  84 +------
 ambari-web/app/templates/main/admin/access.hbs  |  29 ---
 ambari-web/app/templates/main/admin/cluster.hbs | 121 ---------
 ambari-web/app/templates/main/admin/misc.hbs    |  50 ----
 .../app/templates/main/admin/repositories.hbs   | 121 +++++++++
 .../templates/main/admin/serviceAccounts.hbs    |  50 ++++
 ambari-web/app/templates/main/admin/user.hbs    |  42 ----
 .../app/templates/main/admin/user/create.hbs    |  43 ----
 .../app/templates/main/admin/user/edit.hbs      |  38 ---
 .../app/templates/main/admin/user/row.hbs       |  27 --
 ambari-web/app/views.js                         |  10 +-
 ambari-web/app/views/main/admin.js              |  41 ++--
 ambari-web/app/views/main/admin/access_view.js  |  23 --
 ambari-web/app/views/main/admin/cluster.js      | 246 -------------------
 ambari-web/app/views/main/admin/menu.js         |  89 -------
 ambari-web/app/views/main/admin/misc_view.js    |  26 --
 ambari-web/app/views/main/admin/repositories.js | 246 +++++++++++++++++++
 .../views/main/admin/serviceAccounts_view.js    |  26 ++
 ambari-web/app/views/main/admin/user.js         |  37 ---
 ambari-web/app/views/main/admin/user/create.js  | 129 ----------
 ambari-web/app/views/main/admin/user/edit.js    | 137 -----------
 ambari-web/app/views/main/admin/user/row.js     |  24 --
 ambari-web/app/views/main/menu.js               |  42 ++--
 36 files changed, 780 insertions(+), 1618 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers.js b/ambari-web/app/controllers.js
index 3601cd2..063af6a 100644
--- a/ambari-web/app/controllers.js
+++ b/ambari-web/app/controllers.js
@@ -51,13 +51,10 @@ require('controllers/main/admin/highAvailability/resourceManager/step1_controlle
 require('controllers/main/admin/highAvailability/resourceManager/step2_controller');
 require('controllers/main/admin/highAvailability/resourceManager/step3_controller');
 require('controllers/main/admin/highAvailability/resourceManager/step4_controller');
-require('controllers/main/admin/cluster');
+require('controllers/main/admin/repositories');
 require('controllers/main/admin/stack_upgrade_controller');
-require('controllers/main/admin/user');
-require('controllers/main/admin/misc_controller');
+require('controllers/main/admin/serviceAccounts_controller');
 require('controllers/main/admin/access_controller');
-require('controllers/main/admin/user/edit');
-require('controllers/main/admin/user/create');
 require('controllers/main/admin/advanced');
 require('utils/polling');
 require('controllers/main/admin/security');

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/main/admin/cluster.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/cluster.js b/ambari-web/app/controllers/main/admin/cluster.js
deleted file mode 100644
index 30095d3..0000000
--- a/ambari-web/app/controllers/main/admin/cluster.js
+++ /dev/null
@@ -1,161 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-var stringUtils = require('utils/string_utils');
-
-App.MainAdminClusterController = Em.Controller.extend({
-  name: 'mainAdminClusterController',
-  services: [],
-  allRepos: [],
-  upgradeVersion: '',
-  /**
-   * get the newest version of HDP from server
-   */
-  updateUpgradeVersion: function () {
-    if (App.router.get('clusterController.isLoaded')) {
-      App.ajax.send({
-        name: 'cluster.update_upgrade_version',
-        sender: this,
-        success: 'updateUpgradeVersionSuccessCallback',
-        error: 'updateUpgradeVersionErrorCallback'
-      });
-    }
-  }.observes('App.router.clusterController.isLoaded', 'App.currentStackVersion', 'App.router.mainServiceController.content.length'),
-
-  updateUpgradeVersionSuccessCallback: function (data) {
-    var upgradeVersion = this.get('upgradeVersion') || App.get('defaultStackVersion');
-    var currentVersion = App.get('currentStackVersionNumber');
-    upgradeVersion = upgradeVersion.replace(/HDP-/, '');
-    data.items.mapProperty('Versions.stack_version').forEach(function (version) {
-      upgradeVersion = (stringUtils.compareVersions(upgradeVersion, version) === -1) ? version : upgradeVersion;
-    });
-    var currentStack = data.items.findProperty('Versions.stack_version', currentVersion);
-    var upgradeStack = data.items.findProperty('Versions.stack_version', upgradeVersion);
-    var minUpgradeVersion = upgradeStack.Versions.min_upgrade_version;
-    if (minUpgradeVersion && (stringUtils.compareVersions(minUpgradeVersion, currentVersion) === 1)) {
-      upgradeVersion = currentVersion;
-      upgradeStack = currentStack;
-    }
-    upgradeVersion = 'HDP-' + upgradeVersion;
-    this.set('upgradeVersion', upgradeVersion);
-    if (currentStack && upgradeStack) {
-      this.parseServicesInfo(currentStack, upgradeStack);
-    }
-    else {
-      console.log('HDP stack doesn\'t have services with defaultStackVersion');
-    }
-  },
-
-  updateUpgradeVersionErrorCallback: function (request, ajaxOptions, error) {
-    console.log('Error message is: ' + request.responseText);
-    console.log('HDP stack doesn\'t have services with defaultStackVersion');
-  },
-
-  /**
-   * get the installed repositories of HDP from server
-   */
-  loadRepositories: function () {
-    if (App.router.get('clusterController.isLoaded')) {
-      var nameVersionCombo = App.get('currentStackVersion');
-      var stackName = nameVersionCombo.split('-')[0];
-      var stackVersion = nameVersionCombo.split('-')[1];
-      App.ajax.send({
-        name: 'cluster.load_repositories',
-        sender: this,
-        data: {
-          stackName: stackName,
-          stackVersion: stackVersion
-        },
-        success: 'loadRepositoriesSuccessCallback',
-        error: 'loadRepositoriesErrorCallback'
-      });
-    }
-  }.observes('App.router.clusterController.isLoaded'),
-
-  loadRepositoriesSuccessCallback: function (data) {
-    var allRepos = [];
-    data.items.forEach(function (os) {
-      if (!App.get('supports.ubuntu') && os.OperatingSystems.os_type == 'debian12') return; // @todo: remove after Ubuntu support confirmation
-      os.repositories.forEach(function (repository) {
-        var osType = repository.Repositories.os_type;
-        var repo = Em.Object.create({
-          baseUrl: repository.Repositories.base_url,
-          osType: osType,
-          repoId: repository.Repositories.repo_id,
-          repoName : repository.Repositories.repo_name,
-          stackName : repository.Repositories.stack_name,
-          stackVersion : repository.Repositories.stack_version,
-          isFirst: false
-        });
-        var group = allRepos.findProperty('name', osType);
-        if (!group) {
-          group = {
-            name: osType,
-            repositories: []
-          };
-          repo.set('isFirst', true);
-          allRepos.push(group);
-        }
-        group.repositories.push(repo);
-      });
-    }, this);
-    allRepos.stackVersion = App.get('currentStackVersionNumber');
-    this.set('allRepos', allRepos);
-  },
-
-  loadRepositoriesErrorCallback: function (request, ajaxOptions, error) {
-    console.log('Error message is: ' + request.responseText);
-  },
-
-  /**
-   * parse services info(versions, description) by version
-   */
-  parseServicesInfo: function (currentStack, upgradeStack) {
-    var result = [];
-    var installedServices = App.Service.find().mapProperty('serviceName');
-    var displayOrder = App.StackService.displayOrder;
-    if (currentStack.stackServices.length && upgradeStack.stackServices.length) {
-      // loop through all the service components
-      displayOrder.forEach(function (_stackServiceName) {
-        var entry = currentStack.stackServices.
-          findProperty("StackServices.service_name", _stackServiceName);
-        var stackService = App.StackService.find().findProperty('serviceName', _stackServiceName);
-        if (!!stackService) {
-          var myService = Em.Object.create({
-            serviceName: stackService.get('serviceName'),
-            displayName: stackService.get('displayNameOnSelectServicePage'),
-            isSelected: true,
-            isInstalled: false,
-            isHidden:  stackService.get('isHiddenOnSelectServicePage'),
-            description: stackService.get('comments'),
-            version: stackService.get('serviceVersion'),
-            newVersion: ''
-          });
-          // it's possible that there is no corresponding service in the new stack
-          var matchedService = upgradeStack.stackServices.findProperty("StackServices.service_name", stackService.get('serviceName'));
-          if (matchedService) {
-            myService.newVersion = matchedService.StackServices.service_version;
-          }
-          result.push(myService);
-        }
-      }, this);
-    }
-    this.set('services', result);
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step1_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step1_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step1_controller.js
index d3c1da4..91a35b2 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step1_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step1_controller.js
@@ -18,7 +18,7 @@
 
 var App = require('app');
 
-require('controllers/main/admin/misc_controller');
+require('controllers/main/admin/serviceAccounts_controller');
 
 App.HighAvailabilityWizardStep1Controller = Em.Controller.extend({
   name: "highAvailabilityWizardStep1Controller",

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step4_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step4_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step4_controller.js
index cc243a1..2fba24e 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step4_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/nameNode/step4_controller.js
@@ -18,7 +18,7 @@
 
 var App = require('app');
 
-require('controllers/main/admin/misc_controller');
+require('controllers/main/admin/serviceAccounts_controller');
 
 App.HighAvailabilityWizardStep4Controller = Em.Controller.extend({
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step4_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step4_controller.js b/ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step4_controller.js
index 5e0e97c..335f8e0 100644
--- a/ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step4_controller.js
+++ b/ambari-web/app/controllers/main/admin/highAvailability/resourceManager/step4_controller.js
@@ -18,7 +18,7 @@
 
 var App = require('app');
 
-require('controllers/main/admin/misc_controller');
+require('controllers/main/admin/serviceAccounts_controller');
 
 App.RMHighAvailabilityWizardStep4Controller = App.HighAvailabilityProgressPageController.extend({
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/main/admin/misc_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/misc_controller.js b/ambari-web/app/controllers/main/admin/misc_controller.js
deleted file mode 100644
index 01b92d9..0000000
--- a/ambari-web/app/controllers/main/admin/misc_controller.js
+++ /dev/null
@@ -1,127 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-var stringUtils = require('utils/string_utils');
-
-require('controllers/main/service/info/configs');
-
-App.MainAdminMiscController = App.MainServiceInfoConfigsController.extend({
-  name: 'mainAdminMiscController',
-  users: null,
-  content: Em.Object.create({
-    serviceName: 'MISC'
-  }),
-  loadUsers: function () {
-    this.set('selectedService', this.get('content.serviceName'));
-    this.loadServiceConfig();
-  },
-  loadServiceConfig: function () {
-    App.ajax.send({
-      name: 'config.tags',
-      sender: this,
-      data: {
-        serviceName: this.get('content.serviceName'),
-        serviceConfigsDef: this.get('serviceConfigs').findProperty('serviceName', this.get('content.serviceName'))
-      },
-      success: 'loadServiceTagSuccess'
-    });
-  },
-  loadServiceTagSuccess: function (data, opt, params) {
-    var self = this;
-    var installedServices = App.Service.find().mapProperty("serviceName");
-    var serviceConfigsDef = params.serviceConfigsDef;
-    var serviceName = this.get('content.serviceName');
-    var loadedClusterSiteToTagMap = {};
-
-    for (var site in data.Clusters.desired_configs) {
-      if (!!serviceConfigsDef.configTypes[site]) {
-        loadedClusterSiteToTagMap[site] = data.Clusters.desired_configs[site]['tag'];
-      }
-    }
-    this.setServiceConfigTags(loadedClusterSiteToTagMap);
-    App.router.get('configurationController').getConfigsByTags(this.get('serviceConfigTags')).done(function(configGroups){
-      var configSet = App.config.mergePreDefinedWithLoaded(configGroups, [], self.get('serviceConfigTags'), serviceName);
-
-      var misc_configs = configSet.configs.filterProperty('serviceName', self.get('selectedService')).filterProperty('category', 'Users and Groups').filterProperty('isVisible', true);
-
-      misc_configs = App.config.miscConfigVisibleProperty(misc_configs, installedServices);
-
-      var sortOrder = self.get('configs').filterProperty('serviceName', self.get('selectedService')).filterProperty('category', 'Users and Groups').filterProperty('isVisible', true).mapProperty('name');
-
-      //stack, with version lower than 2.1, doesn't have Falcon service
-      self.setProxyUserGroupLabel(misc_configs);
-
-      self.set('users', self.sortByOrder(sortOrder, misc_configs));
-
-      self.setContentProperty('hdfsUser', 'hdfs_user', misc_configs);
-      self.setContentProperty('group', 'user_group', misc_configs);
-
-      self.set('dataIsLoaded', true);
-    });
-  },
-  /**
-   * set config value to property of "content"
-   * @param key
-   * @param configName
-   * @param misc_configs
-   * @return {Boolean}
-   */
-  setContentProperty: function (key, configName, misc_configs) {
-    var content = this.get('content');
-    if (key && configName && misc_configs.someProperty('name', configName) && content.get(key)) {
-      content.set(key, misc_configs.findProperty('name', configName).get("value"));
-      return true;
-    }
-    return false;
-  },
-  /**
-   * sort miscellaneous configs by specific order
-   * @param sortOrder
-   * @param arrayToSort
-   * @return {Array}
-   */
-  sortByOrder: function (sortOrder, arrayToSort) {
-    var sorted = [];
-    if (sortOrder && sortOrder.length > 0) {
-      sortOrder.forEach(function (name) {
-        var user = arrayToSort.findProperty('name', name);
-        if (user) {
-          sorted.push({
-            isVisible: user.get('isVisible'),
-            displayName: user.get('displayName'),
-            value: user.get('value')
-          });
-        }
-      });
-      return sorted;
-    } else {
-      return arrayToSort;
-    }
-  },
-  /**
-   * set displayName of "proxyuser_group" depending on stack version
-   * @param misc_configs
-   */
-  setProxyUserGroupLabel: function (misc_configs) {
-    var proxyUserGroup = misc_configs.findProperty('name', 'proxyuser_group');
-    if (proxyUserGroup && !App.get('isHadoop21Stack')) {
-      proxyUserGroup.set('displayName', "Proxy group for Hive, WebHCat and Oozie");
-    }
-  }
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/main/admin/repositories.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/repositories.js b/ambari-web/app/controllers/main/admin/repositories.js
new file mode 100644
index 0000000..d233031
--- /dev/null
+++ b/ambari-web/app/controllers/main/admin/repositories.js
@@ -0,0 +1,161 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+var stringUtils = require('utils/string_utils');
+
+App.MainAdminRepositoriesController = Em.Controller.extend({
+  name: 'mainAdminRepositoriesController',
+  services: [],
+  allRepos: [],
+  upgradeVersion: '',
+  /**
+   * get the newest version of HDP from server
+   */
+  updateUpgradeVersion: function () {
+    if (App.router.get('clusterController.isLoaded')) {
+      App.ajax.send({
+        name: 'cluster.update_upgrade_version',
+        sender: this,
+        success: 'updateUpgradeVersionSuccessCallback',
+        error: 'updateUpgradeVersionErrorCallback'
+      });
+    }
+  }.observes('App.router.clusterController.isLoaded', 'App.currentStackVersion', 'App.router.mainServiceController.content.length'),
+
+  updateUpgradeVersionSuccessCallback: function (data) {
+    var upgradeVersion = this.get('upgradeVersion') || App.get('defaultStackVersion');
+    var currentVersion = App.get('currentStackVersionNumber');
+    upgradeVersion = upgradeVersion.replace(/HDP-/, '');
+    data.items.mapProperty('Versions.stack_version').forEach(function (version) {
+      upgradeVersion = (stringUtils.compareVersions(upgradeVersion, version) === -1) ? version : upgradeVersion;
+    });
+    var currentStack = data.items.findProperty('Versions.stack_version', currentVersion);
+    var upgradeStack = data.items.findProperty('Versions.stack_version', upgradeVersion);
+    var minUpgradeVersion = upgradeStack.Versions.min_upgrade_version;
+    if (minUpgradeVersion && (stringUtils.compareVersions(minUpgradeVersion, currentVersion) === 1)) {
+      upgradeVersion = currentVersion;
+      upgradeStack = currentStack;
+    }
+    upgradeVersion = 'HDP-' + upgradeVersion;
+    this.set('upgradeVersion', upgradeVersion);
+    if (currentStack && upgradeStack) {
+      this.parseServicesInfo(currentStack, upgradeStack);
+    }
+    else {
+      console.log('HDP stack doesn\'t have services with defaultStackVersion');
+    }
+  },
+
+  updateUpgradeVersionErrorCallback: function (request, ajaxOptions, error) {
+    console.log('Error message is: ' + request.responseText);
+    console.log('HDP stack doesn\'t have services with defaultStackVersion');
+  },
+
+  /**
+   * get the installed repositories of HDP from server
+   */
+  loadRepositories: function () {
+    if (App.router.get('clusterController.isLoaded')) {
+      var nameVersionCombo = App.get('currentStackVersion');
+      var stackName = nameVersionCombo.split('-')[0];
+      var stackVersion = nameVersionCombo.split('-')[1];
+      App.ajax.send({
+        name: 'cluster.load_repositories',
+        sender: this,
+        data: {
+          stackName: stackName,
+          stackVersion: stackVersion
+        },
+        success: 'loadRepositoriesSuccessCallback',
+        error: 'loadRepositoriesErrorCallback'
+      });
+    }
+  }.observes('App.router.clusterController.isLoaded'),
+
+  loadRepositoriesSuccessCallback: function (data) {
+    var allRepos = [];
+    data.items.forEach(function (os) {
+      if (!App.get('supports.ubuntu') && os.OperatingSystems.os_type == 'debian12') return; // @todo: remove after Ubuntu support confirmation
+      os.repositories.forEach(function (repository) {
+        var osType = repository.Repositories.os_type;
+        var repo = Em.Object.create({
+          baseUrl: repository.Repositories.base_url,
+          osType: osType,
+          repoId: repository.Repositories.repo_id,
+          repoName : repository.Repositories.repo_name,
+          stackName : repository.Repositories.stack_name,
+          stackVersion : repository.Repositories.stack_version,
+          isFirst: false
+        });
+        var group = allRepos.findProperty('name', osType);
+        if (!group) {
+          group = {
+            name: osType,
+            repositories: []
+          };
+          repo.set('isFirst', true);
+          allRepos.push(group);
+        }
+        group.repositories.push(repo);
+      });
+    }, this);
+    allRepos.stackVersion = App.get('currentStackVersionNumber');
+    this.set('allRepos', allRepos);
+  },
+
+  loadRepositoriesErrorCallback: function (request, ajaxOptions, error) {
+    console.log('Error message is: ' + request.responseText);
+  },
+
+  /**
+   * parse services info(versions, description) by version
+   */
+  parseServicesInfo: function (currentStack, upgradeStack) {
+    var result = [];
+    var installedServices = App.Service.find().mapProperty('serviceName');
+    var displayOrder = App.StackService.displayOrder;
+    if (currentStack.stackServices.length && upgradeStack.stackServices.length) {
+      // loop through all the service components
+      displayOrder.forEach(function (_stackServiceName) {
+        var entry = currentStack.stackServices.
+          findProperty("StackServices.service_name", _stackServiceName);
+        var stackService = App.StackService.find().findProperty('serviceName', _stackServiceName);
+        if (!!stackService) {
+          var myService = Em.Object.create({
+            serviceName: stackService.get('serviceName'),
+            displayName: stackService.get('displayNameOnSelectServicePage'),
+            isSelected: true,
+            isInstalled: false,
+            isHidden:  stackService.get('isHiddenOnSelectServicePage'),
+            description: stackService.get('comments'),
+            version: stackService.get('serviceVersion'),
+            newVersion: ''
+          });
+          // it's possible that there is no corresponding service in the new stack
+          var matchedService = upgradeStack.stackServices.findProperty("StackServices.service_name", stackService.get('serviceName'));
+          if (matchedService) {
+            myService.newVersion = matchedService.StackServices.service_version;
+          }
+          result.push(myService);
+        }
+      }, this);
+    }
+    this.set('services', result);
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js b/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
new file mode 100644
index 0000000..741597a
--- /dev/null
+++ b/ambari-web/app/controllers/main/admin/serviceAccounts_controller.js
@@ -0,0 +1,127 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+var App = require('app');
+var stringUtils = require('utils/string_utils');
+
+require('controllers/main/service/info/configs');
+
+App.MainAdminServiceAccountsController = App.MainServiceInfoConfigsController.extend({
+  name: 'mainAdminServiceAccountsController',
+  users: null,
+  content: Em.Object.create({
+    serviceName: 'MISC'
+  }),
+  loadUsers: function () {
+    this.set('selectedService', this.get('content.serviceName'));
+    this.loadServiceConfig();
+  },
+  loadServiceConfig: function () {
+    App.ajax.send({
+      name: 'config.tags',
+      sender: this,
+      data: {
+        serviceName: this.get('content.serviceName'),
+        serviceConfigsDef: this.get('serviceConfigs').findProperty('serviceName', this.get('content.serviceName'))
+      },
+      success: 'loadServiceTagSuccess'
+    });
+  },
+  loadServiceTagSuccess: function (data, opt, params) {
+    var self = this;
+    var installedServices = App.Service.find().mapProperty("serviceName");
+    var serviceConfigsDef = params.serviceConfigsDef;
+    var serviceName = this.get('content.serviceName');
+    var loadedClusterSiteToTagMap = {};
+
+    for (var site in data.Clusters.desired_configs) {
+      if (!!serviceConfigsDef.configTypes[site]) {
+        loadedClusterSiteToTagMap[site] = data.Clusters.desired_configs[site]['tag'];
+      }
+    }
+    this.setServiceConfigTags(loadedClusterSiteToTagMap);
+    App.router.get('configurationController').getConfigsByTags(this.get('serviceConfigTags')).done(function(configGroups){
+      var configSet = App.config.mergePreDefinedWithLoaded(configGroups, [], self.get('serviceConfigTags'), serviceName);
+
+      var misc_configs = configSet.configs.filterProperty('serviceName', self.get('selectedService')).filterProperty('category', 'Users and Groups').filterProperty('isVisible', true);
+
+      misc_configs = App.config.miscConfigVisibleProperty(misc_configs, installedServices);
+
+      var sortOrder = self.get('configs').filterProperty('serviceName', self.get('selectedService')).filterProperty('category', 'Users and Groups').filterProperty('isVisible', true).mapProperty('name');
+
+      //stack, with version lower than 2.1, doesn't have Falcon service
+      self.setProxyUserGroupLabel(misc_configs);
+
+      self.set('users', self.sortByOrder(sortOrder, misc_configs));
+
+      self.setContentProperty('hdfsUser', 'hdfs_user', misc_configs);
+      self.setContentProperty('group', 'user_group', misc_configs);
+
+      self.set('dataIsLoaded', true);
+    });
+  },
+  /**
+   * set config value to property of "content"
+   * @param key
+   * @param configName
+   * @param misc_configs
+   * @return {Boolean}
+   */
+  setContentProperty: function (key, configName, misc_configs) {
+    var content = this.get('content');
+    if (key && configName && misc_configs.someProperty('name', configName) && content.get(key)) {
+      content.set(key, misc_configs.findProperty('name', configName).get("value"));
+      return true;
+    }
+    return false;
+  },
+  /**
+   * sort miscellaneous configs by specific order
+   * @param sortOrder
+   * @param arrayToSort
+   * @return {Array}
+   */
+  sortByOrder: function (sortOrder, arrayToSort) {
+    var sorted = [];
+    if (sortOrder && sortOrder.length > 0) {
+      sortOrder.forEach(function (name) {
+        var user = arrayToSort.findProperty('name', name);
+        if (user) {
+          sorted.push({
+            isVisible: user.get('isVisible'),
+            displayName: user.get('displayName'),
+            value: user.get('value')
+          });
+        }
+      });
+      return sorted;
+    } else {
+      return arrayToSort;
+    }
+  },
+  /**
+   * set displayName of "proxyuser_group" depending on stack version
+   * @param misc_configs
+   */
+  setProxyUserGroupLabel: function (misc_configs) {
+    var proxyUserGroup = misc_configs.findProperty('name', 'proxyuser_group');
+    if (proxyUserGroup && !App.get('isHadoop21Stack')) {
+      proxyUserGroup.set('displayName', "Proxy group for Hive, WebHCat and Oozie");
+    }
+  }
+});

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/main/admin/user.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/user.js b/ambari-web/app/controllers/main/admin/user.js
deleted file mode 100644
index aacc544..0000000
--- a/ambari-web/app/controllers/main/admin/user.js
+++ /dev/null
@@ -1,76 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-App.MainAdminUserController = Em.Controller.extend({
-
-  name: 'mainAdminUserController',
-
-  /**
-   * Send request to the server to delete user if selected user is not current user
-   * @param {object} event
-   * @method deleteRecord
-   */
-  deleteRecord: function (event) {
-    var self = this;
-    if (event.context.get('userName') == App.get('router').getLoginName()) {
-      App.ModalPopup.show({
-        header: Em.I18n.t('admin.users.delete.yourself.header'),
-        body: Em.I18n.t('admin.users.delete.yourself.message'),
-        secondary: false
-      });
-      return;
-    }
-
-    App.ModalPopup.show({
-      header: Em.I18n.t('admin.users.delete.header').format(event.context.get('userName')),
-      body: Em.I18n.t('question.sure').format(''),
-      primary: Em.I18n.t('yes'),
-      secondary: Em.I18n.t('no'),
-
-      onPrimary: function () {
-        App.ajax.send({
-          name: 'common.delete.user',
-          sender: self,
-          data: {
-            user: event.context.get("userName"),
-            event: event
-          },
-          success: 'deleteUserSuccessCallback'
-        });
-        this.hide();
-      }
-    });
-  },
-
-  /**
-   * Success callback for delete user request
-   * @param {object} data
-   * @param {object} opt
-   * @param {object} params
-   * @method deleteUserSuccessCallback
-   */
-  deleteUserSuccessCallback: function (data, opt, params) {
-    params.event.context.deleteRecord();
-    try {
-      App.store.commit();
-    } catch (err) {
-    }
-  }
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/main/admin/user/create.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/user/create.js b/ambari-web/app/controllers/main/admin/user/create.js
deleted file mode 100644
index 5b833a3..0000000
--- a/ambari-web/app/controllers/main/admin/user/create.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-App.MainAdminUserCreateController = Em.Controller.extend({
-  name:'mainAdminUserCreateController',
-  content:false
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/main/admin/user/edit.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/admin/user/edit.js b/ambari-web/app/controllers/main/admin/user/edit.js
deleted file mode 100644
index 71c19ef..0000000
--- a/ambari-web/app/controllers/main/admin/user/edit.js
+++ /dev/null
@@ -1,24 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-App.MainAdminUserEditController = App.MainAdminUserController.extend({
-  name:'mainAdminUserEditController',
-  content:false
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/controllers/wizard.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/wizard.js b/ambari-web/app/controllers/wizard.js
index f680a07..723b929 100644
--- a/ambari-web/app/controllers/wizard.js
+++ b/ambari-web/app/controllers/wizard.js
@@ -742,7 +742,7 @@ App.WizardController = Em.Controller.extend(App.LocalStorage, {
   usersLoading: function () {
     var self = this;
     var dfd = $.Deferred();
-    var miscController = App.MainAdminMiscController.create({content: self.get('content')});
+    var miscController = App.MainAdminServiceAccountsController.create({content: self.get('content')});
     miscController.loadUsers();
     var interval = setInterval(function () {
       if (miscController.get('dataIsLoaded')) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/messages.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/messages.js b/ambari-web/app/messages.js
index 75ef3fc..f29e7bf 100644
--- a/ambari-web/app/messages.js
+++ b/ambari-web/app/messages.js
@@ -148,6 +148,8 @@ Em.I18n.translations = {
   'common.reUpgrade': 'Retry Upgrade',
   'common.security':'Security',
   'common.cluster':'Cluster',
+  'common.repositories':'Repositories',
+  'common.serviceAccounts': 'Service Accounts',
   'common.add': 'Add',
   'common.edit': 'Edit',
   'common.delete': 'Delete',

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/routes/main.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/routes/main.js b/ambari-web/app/routes/main.js
index ab4b0b3..1501f0f 100644
--- a/ambari-web/app/routes/main.js
+++ b/ambari-web/app/routes/main.js
@@ -355,63 +355,9 @@ module.exports = Em.Route.extend({
        router.transitionTo('admin' + controller.get('category').capitalize());
        }, */
       route: '/',
-      redirectsTo: 'adminUser'
+      redirectsTo: 'adminRepositories'
     }),
 
-
-    adminUser: Em.Route.extend({
-      route: '/user',
-      index: Em.Route.extend({
-        route: '/',
-        redirectsTo: 'allUsers'
-      }),
-      enter: function (router) {
-        router.set('mainAdminController.category', "user");
-        Em.run.next(function () {
-          router.transitionTo('allUsers');
-        });
-      },
-      routePath: function (router, event) {
-        router.set('mainAdminController.category', "user");
-        router.transitionTo('allUsers');
-        Em.run.next(function () {
-          router.transitionTo('allUsers');
-        });
-      },
-      // events
-      gotoUsers: Em.Router.transitionTo("allUsers"),
-      gotoCreateUser: Em.Router.transitionTo("createUser"),
-      gotoEditUser: function (router, event) {
-        router.transitionTo("editUser", event.context)
-      },
-
-      // states
-      allUsers: Em.Route.extend({
-        route: '/allUsers',
-        // index: Ember.Route.extend({
-        //route: '/',
-        connectOutlets: function (router) {
-          router.get('mainAdminController').connectOutlet('mainAdminUser');
-        }
-        //})
-      }),
-
-      createUser: Em.Route.extend({
-        route: '/create',
-        connectOutlets: function (router) {
-          router.get('mainAdminController').connectOutlet('mainAdminUserCreate', {});
-        }
-      }),
-
-      editUser: Em.Route.extend({
-        route: '/edit/:user_id',
-        connectOutlets: function (router, user) {
-          router.get('mainAdminController').connectOutlet('mainAdminUserEdit', user);
-        }
-      })
-    }),
-
-
     adminAuthentication: Em.Route.extend({
       route: '/authentication',
       connectOutlets: function (router, context) {
@@ -553,11 +499,11 @@ module.exports = Em.Route.extend({
       adminAddSecurity: require('routes/add_security')
     }),
 
-    adminCluster: Em.Route.extend({
-      route: '/cluster',
+    adminRepositories: Em.Route.extend({
+      route: '/repositories',
       connectOutlets: function (router) {
-        router.set('mainAdminController.category', "cluster");
-        router.get('mainAdminController').connectOutlet('mainAdminCluster');
+        router.set('mainAdminController.category', "repositories");
+        router.get('mainAdminController').connectOutlet('mainAdminRepositories');
       }
     }),
     adminAdvanced: Em.Route.extend({
@@ -567,23 +513,11 @@ module.exports = Em.Route.extend({
         router.get('mainAdminController').connectOutlet('mainAdminAdvanced');
       }
     }),
-    adminMisc: Em.Route.extend({
-      route: '/misc',
-      connectOutlets: function (router) {
-        router.set('mainAdminController.category', "misc");
-        router.get('mainAdminController').connectOutlet('mainAdminMisc');
-      }
-    }),
-    adminAccess: Em.Route.extend({
-      enter: function (router) {
-        router.get('mainController').dataLoading().done(function () {
-          if (!router.get('mainAdminController.isAccessAvailable')) router.transitionTo('adminUser.allUsers');
-        });
-      },
-      route: '/access',
+    adminServiceAccounts: Em.Route.extend({
+      route: '/serviceAccounts',
       connectOutlets: function (router) {
-        router.set('mainAdminController.category', "access");
-        router.get('mainAdminController').connectOutlet('mainAdminAccess');
+        router.set('mainAdminController.category', "serviceAccounts");
+        router.get('mainAdminController').connectOutlet('mainAdminServiceAccounts');
       }
     }),
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/templates/main/admin/access.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/access.hbs b/ambari-web/app/templates/main/admin/access.hbs
deleted file mode 100644
index 9e85a06..0000000
--- a/ambari-web/app/templates/main/admin/access.hbs
+++ /dev/null
@@ -1,29 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-<div id="access">
-  <div class="header">
-      <strong>{{t common.access}}</strong>
-  </div>
-  <div class="acces-values">
-  </div>
-  <div class="control-group">
-      <div class="controls">
-          <button type="submit" class="btn btn-primary" {{action save target="controller"}}>{{t common.save}}</button>
-      </div>
-  </div>
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/templates/main/admin/cluster.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/cluster.hbs b/ambari-web/app/templates/main/admin/cluster.hbs
deleted file mode 100644
index b38b28c..0000000
--- a/ambari-web/app/templates/main/admin/cluster.hbs
+++ /dev/null
@@ -1,121 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<div class="admin-cluster">
-    <div class="header">
-      <strong>{{t admin.cluster.stackVersion}}: {{App.currentStackVersion}}
-        {{#if App.supports.stackUpgrade}}
-          (<a href="#" {{bindAttr class="view.isUpgradeAvailable::inactive"}}{{action "upgradeStack"}}>
-            {{#if view.isUpgradeAvailable}}
-              {{t admin.cluster.upgradeAvailable}}: {{upgradeVersion}}
-            {{else}}
-              {{t admin.cluster.upgradeUnavailable}}
-            {{/if}}
-          </a>)
-        {{/if}}
-      </strong>
-    </div>
-    <table class="table table-bordered table-striped">
-      <thead>
-      <tr>
-        <th>{{t common.service}}</th>
-        <th>{{t common.version}}</th>
-        <th>{{t common.description}}</th>
-      </tr>
-      </thead>
-      <tbody>
-      {{#each service in services}}
-      {{#unless service.isHidden}}
-      <tr>
-        <td>{{service.displayName}}</td>
-        <td>{{service.version}}</td>
-        <td>{{{service.description}}}</td>
-      </tr>
-      {{/unless}}
-      {{/each}}
-      </tbody>
-    </table>
-
-    <div class="header">
-      <strong>{{t admin.cluster.repositories.repositories}}</strong>
-    </div>
-    <ul class="nav nav-tabs">
-      <li class="active">
-        <a href="javascript:void(null);">{{view.allRepositoriesGroups.stackVersion}}</a>
-      </li>
-    </ul>
-
-    <div class="repositories-table">
-      <div class="thead">
-        <div class="th os-th">{{t common.os}}</div>
-        <div class="th name-th">{{t common.name}}</div>
-        <div class="th url-th">{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</div>
-      </div>
-      <div class="tbody">
-        {{#each repoGroup in view.allRepositoriesGroups}}
-          <div class="trow">
-            <div class="os-td">
-              <label>
-                <span class="os">{{repoGroup.name}}</span>
-              </label>
-            </div>
-              <div style="width:89%">
-                {{#each repository in repoGroup.repositories}}
-                  <div class="sub-trow">
-                    <div class="name-td">{{repository.repoId}}</div>
-                    <!--edit mode for current url-->
-                    {{#if repository.onEdit}}
-                      <div {{bindAttr class=":url-td repository.empty-error:textfield-error repository.invalid-error:textfield-error"}}>
-                        {{view Ember.TextField valueBinding="repository.baseUrl"}}
-                      </div>
-                      <div class="clear-td">
-                        {{#if repository.clearAll}}
-                          <a {{action "clearGroupLocalRepository" repository target="view" }}>
-                            <i class="icon-remove-sign"></i>
-                          </a>
-                        {{/if}}
-                      </div>
-                      <div class="edit-buttons-td">
-                        <a class="btn" {{action doCancel repository target="view"}}>{{t common.cancel}}</a>
-                      </div>
-                        <div class="edit-buttons-td">
-                          {{#if repository.empty-error}}
-                            <a class="btn btn-primary" disabled="disabled">{{t common.save}}</a>
-                          {{else}}
-                            <a class="btn btn-primary" {{action saveRepoUrls repository target="view"}}>{{t common.save}}</a>
-                          {{/if}}
-                        </div>
-                    <!--non-edit mode for current url-->
-                    {{else}}
-                      <div class="url-text-td">
-                        {{repository.baseUrl}}
-                      </div>
-                      <div class="edit-td">
-                        <a {{action "onEditClick" repository target="view" }}>
-                          <i class="icon-edit"></i> {{t common.edit}}
-                        </a>
-                      </div>
-                    {{/if}}
-                  </div>
-                {{/each}}
-              </div>
-          </div>
-        {{/each}}
-      </div>
-    </div>
-</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/templates/main/admin/misc.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/misc.hbs b/ambari-web/app/templates/main/admin/misc.hbs
deleted file mode 100644
index 09b7020..0000000
--- a/ambari-web/app/templates/main/admin/misc.hbs
+++ /dev/null
@@ -1,50 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-<div class="admin-misc">
-  <div class="header">
-    <strong>{{t admin.misc.header}}</strong>
-  </div>
-  {{#if controller.dataIsLoaded}}
-    {{#if controller.users}}
-      <div class="span6">
-        <table class="table table-bordered table-striped">
-          <thead>
-            <tr>
-              <th>{{t common.name}}</th>
-              <th>{{t common.value}}</th>
-            </tr>
-          </thead>
-          <tbody>
-            {{#each user in controller.users}}
-              {{#if user.isVisible}}
-                <tr>
-                  <td>{{user.displayName}}</td>
-                  <td>{{user.value}}</td>
-                </tr>
-              {{/if}}
-            {{/each}}
-          </tbody>
-        </table>
-      </div>
-    {{else}}
-      <p>{{t admin.misc.nothingToShow}}</p>
-    {{/if}}
-  {{else}}
-    <div class="spinner"></div>
-  {{/if}}
-</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/templates/main/admin/repositories.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/repositories.hbs b/ambari-web/app/templates/main/admin/repositories.hbs
new file mode 100644
index 0000000..b38b28c
--- /dev/null
+++ b/ambari-web/app/templates/main/admin/repositories.hbs
@@ -0,0 +1,121 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+
+<div class="admin-cluster">
+    <div class="header">
+      <strong>{{t admin.cluster.stackVersion}}: {{App.currentStackVersion}}
+        {{#if App.supports.stackUpgrade}}
+          (<a href="#" {{bindAttr class="view.isUpgradeAvailable::inactive"}}{{action "upgradeStack"}}>
+            {{#if view.isUpgradeAvailable}}
+              {{t admin.cluster.upgradeAvailable}}: {{upgradeVersion}}
+            {{else}}
+              {{t admin.cluster.upgradeUnavailable}}
+            {{/if}}
+          </a>)
+        {{/if}}
+      </strong>
+    </div>
+    <table class="table table-bordered table-striped">
+      <thead>
+      <tr>
+        <th>{{t common.service}}</th>
+        <th>{{t common.version}}</th>
+        <th>{{t common.description}}</th>
+      </tr>
+      </thead>
+      <tbody>
+      {{#each service in services}}
+      {{#unless service.isHidden}}
+      <tr>
+        <td>{{service.displayName}}</td>
+        <td>{{service.version}}</td>
+        <td>{{{service.description}}}</td>
+      </tr>
+      {{/unless}}
+      {{/each}}
+      </tbody>
+    </table>
+
+    <div class="header">
+      <strong>{{t admin.cluster.repositories.repositories}}</strong>
+    </div>
+    <ul class="nav nav-tabs">
+      <li class="active">
+        <a href="javascript:void(null);">{{view.allRepositoriesGroups.stackVersion}}</a>
+      </li>
+    </ul>
+
+    <div class="repositories-table">
+      <div class="thead">
+        <div class="th os-th">{{t common.os}}</div>
+        <div class="th name-th">{{t common.name}}</div>
+        <div class="th url-th">{{t installer.step1.advancedRepo.localRepo.column.baseUrl}}</div>
+      </div>
+      <div class="tbody">
+        {{#each repoGroup in view.allRepositoriesGroups}}
+          <div class="trow">
+            <div class="os-td">
+              <label>
+                <span class="os">{{repoGroup.name}}</span>
+              </label>
+            </div>
+              <div style="width:89%">
+                {{#each repository in repoGroup.repositories}}
+                  <div class="sub-trow">
+                    <div class="name-td">{{repository.repoId}}</div>
+                    <!--edit mode for current url-->
+                    {{#if repository.onEdit}}
+                      <div {{bindAttr class=":url-td repository.empty-error:textfield-error repository.invalid-error:textfield-error"}}>
+                        {{view Ember.TextField valueBinding="repository.baseUrl"}}
+                      </div>
+                      <div class="clear-td">
+                        {{#if repository.clearAll}}
+                          <a {{action "clearGroupLocalRepository" repository target="view" }}>
+                            <i class="icon-remove-sign"></i>
+                          </a>
+                        {{/if}}
+                      </div>
+                      <div class="edit-buttons-td">
+                        <a class="btn" {{action doCancel repository target="view"}}>{{t common.cancel}}</a>
+                      </div>
+                        <div class="edit-buttons-td">
+                          {{#if repository.empty-error}}
+                            <a class="btn btn-primary" disabled="disabled">{{t common.save}}</a>
+                          {{else}}
+                            <a class="btn btn-primary" {{action saveRepoUrls repository target="view"}}>{{t common.save}}</a>
+                          {{/if}}
+                        </div>
+                    <!--non-edit mode for current url-->
+                    {{else}}
+                      <div class="url-text-td">
+                        {{repository.baseUrl}}
+                      </div>
+                      <div class="edit-td">
+                        <a {{action "onEditClick" repository target="view" }}>
+                          <i class="icon-edit"></i> {{t common.edit}}
+                        </a>
+                      </div>
+                    {{/if}}
+                  </div>
+                {{/each}}
+              </div>
+          </div>
+        {{/each}}
+      </div>
+    </div>
+</div>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/templates/main/admin/serviceAccounts.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/serviceAccounts.hbs b/ambari-web/app/templates/main/admin/serviceAccounts.hbs
new file mode 100644
index 0000000..09b7020
--- /dev/null
+++ b/ambari-web/app/templates/main/admin/serviceAccounts.hbs
@@ -0,0 +1,50 @@
+{{!
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements.  See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership.  The ASF licenses this file
+* to you under the Apache License, Version 2.0 (the
+* "License"); you may not use this file except in compliance
+* with the License.  You may obtain a copy of the License at
+*
+*     http://www.apache.org/licenses/LICENSE-2.0
+*
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+}}
+<div class="admin-misc">
+  <div class="header">
+    <strong>{{t admin.misc.header}}</strong>
+  </div>
+  {{#if controller.dataIsLoaded}}
+    {{#if controller.users}}
+      <div class="span6">
+        <table class="table table-bordered table-striped">
+          <thead>
+            <tr>
+              <th>{{t common.name}}</th>
+              <th>{{t common.value}}</th>
+            </tr>
+          </thead>
+          <tbody>
+            {{#each user in controller.users}}
+              {{#if user.isVisible}}
+                <tr>
+                  <td>{{user.displayName}}</td>
+                  <td>{{user.value}}</td>
+                </tr>
+              {{/if}}
+            {{/each}}
+          </tbody>
+        </table>
+      </div>
+    {{else}}
+      <p>{{t admin.misc.nothingToShow}}</p>
+    {{/if}}
+  {{else}}
+    <div class="spinner"></div>
+  {{/if}}
+</div>

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/templates/main/admin/user.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/user.hbs b/ambari-web/app/templates/main/admin/user.hbs
deleted file mode 100644
index 16af547..0000000
--- a/ambari-web/app/templates/main/admin/user.hbs
+++ /dev/null
@@ -1,42 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-{{#if view.ldapUser}}
-<p class="text-info">{{t admin.users.ldapAuthUsed}}.</p>
-{{else}}
-<table class="table table-bordered table-striped span6">
-  <thead>
-  <tr>
-    <th style="width:50%">{{t admin.users.username}}</th>
-    <th style="width:10%">{{t admin.users.privileges}}</th>
-    <th style="width:20%">{{t admin.users.type}}</th>
-    <th style="width:20%">{{t admin.users.action}}</th>
-  </tr>
-  </thead>
-  <tbody>
-  {{#each user in view.users}}
-  {{view App.MainAdminUserRowView userBinding="user"}}
-  {{/each}}
-  </tbody>
-</table>
-<div class="span2">
-  <button class="btn" {{action gotoCreateUser on="click"}} >
-    <i class="icon-plus"></i>{{t admin.users.addButton}}
-  </button>
-</div>
-{{/if}}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/templates/main/admin/user/create.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/user/create.hbs b/ambari-web/app/templates/main/admin/user/create.hbs
deleted file mode 100644
index a49b4cb..0000000
--- a/ambari-web/app/templates/main/admin/user/create.hbs
+++ /dev/null
@@ -1,43 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<form class="form-horizontal" autocomplete="off">
-  {{#each field in view.userForm.fields}}
-  {{#unless field.isHidden}}
-  <div {{bindAttr class="field.errorMessage:error field.warnMessage:warning :control-group"}}>
-    <label class="control-label" for="input{{unbound field.name}}">{{unbound field.displayName}}</label>
-    <div class="controls">
-        {{view field.viewClass valueBinding="field.value" disabledBinding="field.disabled"}}
-      {{#if field.errorMessage}}
-        <span class="help-inline">{{field.errorMessage}}</span>
-      {{/if}}
-      {{#if field.warnMessage}}
-        <span class="help-inline">{{field.warnMessage}}</span>
-      {{/if}}
-    </div>
-  </div>
-  {{/unless}}
-  {{/each}}
-  <div class="control-group">
-    <div class="controls">
-      <button type="submit" class="btn" {{action gotoUsers}}>{{t form.cancel}}</button>
-      <button type="submit"
-              class="btn btn-primary" {{action create target="view"}}>Create</button>
-    </div>
-  </div>
-</form>

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/templates/main/admin/user/edit.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/user/edit.hbs b/ambari-web/app/templates/main/admin/user/edit.hbs
deleted file mode 100644
index 374a947..0000000
--- a/ambari-web/app/templates/main/admin/user/edit.hbs
+++ /dev/null
@@ -1,38 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<form class="form-horizontal" autocomplete="off">
-  {{#each field in view.userForm.fields}}
-  {{#unless field.isHidden}}
-  <div {{bindAttr class="field.errorMessage:error :control-group"}}>
-    <label class="control-label" for="input{{unbound field.name}}">{{unbound field.displayName}}</label>
-    <div class="controls">
-        {{view field.viewClass valueBinding="field.value" disabledBinding="field.disabled"}}
-      <span class="help-inline">{{field.errorMessage}}</span>
-    </div>
-  </div>
-  {{/unless}}
-  {{/each}}
-  <div class="control-group">
-    <div class="controls">
-      <button type="submit" class="btn" {{action gotoUsers}}>{{t form.cancel}}</button>
-      <button type="submit"
-              class="btn btn-primary" {{action edit target="view"}}>{{t common.save}}</button>
-    </div>
-  </div>
-</form>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/templates/main/admin/user/row.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/main/admin/user/row.hbs b/ambari-web/app/templates/main/admin/user/row.hbs
deleted file mode 100644
index 3cf2148..0000000
--- a/ambari-web/app/templates/main/admin/user/row.hbs
+++ /dev/null
@@ -1,27 +0,0 @@
-{{!
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements.  See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership.  The ASF licenses this file
-* to you under the Apache License, Version 2.0 (the
-* "License"); you may not use this file except in compliance
-* with the License.  You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-}}
-
-<tr>
-  <td>{{user.userName}}</td>
-  <td>{{view Ember.Checkbox disabledBinding="view.disableCheckBoxes" checkedBinding="user.admin"}}</td>
-  <td>{{user.type}}</td>
-  <td>
-    <a href="#" {{action gotoEditUser user on="click"}}>{{t admin.users.edit}}</a>&nbsp;
-    <a href="#" {{action deleteRecord user target="App.router.mainAdminUserController" }}>{{t admin.users.delete}}</a>
-  </td>
-</tr>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/views.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views.js b/ambari-web/app/views.js
index 21eeb16..a1d1a4e 100644
--- a/ambari-web/app/views.js
+++ b/ambari-web/app/views.js
@@ -87,19 +87,13 @@ require('views/main/admin/highAvailability/resourceManager/step1_view');
 require('views/main/admin/highAvailability/resourceManager/step2_view');
 require('views/main/admin/highAvailability/resourceManager/step3_view');
 require('views/main/admin/highAvailability/resourceManager/step4_view');
-require('views/main/admin/cluster');
-require('views/main/admin/misc_view');
+require('views/main/admin/repositories');
+require('views/main/admin/serviceAccounts_view');
 require('views/main/admin/stack_upgrade');
 require('views/main/admin/advanced');
-require('views/main/admin/access_view');
 require('views/main/admin/advanced/password');
 require('views/main/admin/audit');
 require('views/main/admin/authentication');
-require('views/main/admin/menu');
-require('views/main/admin/user');
-require('views/main/admin/user/create');
-require('views/main/admin/user/edit');
-require('views/main/admin/user/row');
 require('views/main/admin/security');
 require('views/main/admin/security/disable');
 require('views/main/admin/security/add/menu');

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/views/main/admin.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin.js b/ambari-web/app/views/main/admin.js
index bd7da50..789a845 100644
--- a/ambari-web/app/views/main/admin.js
+++ b/ambari-web/app/views/main/admin.js
@@ -22,18 +22,17 @@ App.MainAdminView = Em.View.extend({
   templateName: require('templates/main/admin'),
   selectedBinding: 'controller.category',
   categories: function() {
-    var items = [{
-      name: 'user',
-      url: 'admin.index',
-      label: Em.I18n.t('common.users')
-    }];
-    if (App.get('isHadoop2Stack') && App.supports.highAvailability) {
-      items.push({
-        name: 'highAvailability',
-        url: 'adminHighAvailability',
-        label: Em.I18n.t('admin.highAvailability')
-      });
-    }
+    var items = [];
+    items.push({
+      name: 'repositories',
+      url: 'adminRepositories',
+      label: Em.I18n.t('common.repositories')
+    });
+    items.push({
+      name: 'serviceAccounts',
+      url: 'adminServiceAccounts',
+      label: Em.I18n.t('common.serviceAccounts')
+    });
     if (App.supports.secureCluster) {
       items.push({
         name: 'security',
@@ -41,21 +40,11 @@ App.MainAdminView = Em.View.extend({
         label: Em.I18n.t('common.security')
       });
     }
-    items.push({
-      name: 'cluster',
-      url: 'adminCluster',
-      label: Em.I18n.t('common.cluster')
-    });
-    items.push({
-      name: 'misc',
-      url: 'adminMisc',
-      label: Em.I18n.t('common.misc')
-    });
-    if (this.get('controller.isAccessAvailable')) {
+    if (App.get('isHadoop2Stack') && App.supports.highAvailability) {
       items.push({
-        name: 'access',
-        url: 'adminAccess',
-        label: Em.I18n.t('common.access')
+        name: 'highAvailability',
+        url: 'adminHighAvailability',
+        label: Em.I18n.t('admin.highAvailability')
       });
     }
     return items;

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/views/main/admin/access_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/access_view.js b/ambari-web/app/views/main/admin/access_view.js
deleted file mode 100644
index 2fbf46e..0000000
--- a/ambari-web/app/views/main/admin/access_view.js
+++ /dev/null
@@ -1,23 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-App.MainAdminAccessView = Em.View.extend({
-  templateName: require('templates/main/admin/access')
-});

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/views/main/admin/cluster.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/cluster.js b/ambari-web/app/views/main/admin/cluster.js
deleted file mode 100644
index a028c4b..0000000
--- a/ambari-web/app/views/main/admin/cluster.js
+++ /dev/null
@@ -1,246 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-var stringUtils = require('utils/string_utils');
-
-App.MainAdminClusterView = Em.View.extend({
-  templateName: require('templates/main/admin/cluster'),
-
-  isUpgradeAvailable: function(){
-    return stringUtils.compareVersions(this.get('controller.upgradeVersion').replace(/HDP(Local)?-/, ''), App.get('currentStackVersionNumber')) === 1;
-  }.property('controller.upgradeVersion', 'App.currentStackVersion'),
-
-  didInsertElement: function () {
-    this.get('controller').loadRepositories();
-  },
-
-  /**
-   * List of all repo-groups
-   * @type {Object[][]}
-   */
-  allRepositoriesGroups: function () {
-    var repos = this.get('controller.allRepos');
-    var reposGroup = [];
-    var repositories = [];
-    reposGroup.set('stackVersion', App.get('currentStackVersionNumber'));
-    if (repos) {
-      repos.forEach(function (group) {
-        group.repositories.forEach (function(repo) {
-          var cur_repo = Em.Object.create({
-            'repoId': repo.repoId,
-            'id': repo.repoId + '-' + repo.osType,
-            'repoName' : repo.repoName,
-            'stackName' : repo.stackName,
-            'stackVersion' : repo.stackVersion,
-            'baseUrl': repo.baseUrl,
-            'originalBaseUrl': repo.baseUrl,
-            'osType': repo.osType,
-            'onEdit': false,
-            'empty-error': !repo.baseUrl,
-            'undo': false,
-            'clearAll': repo.baseUrl
-          });
-          var cur_group = reposGroup.findProperty('name', group.name);
-          if (!cur_group) {
-            var cur_group = Ember.Object.create({
-              name: group.name,
-              repositories: []
-            });
-            reposGroup.push(cur_group);
-          }
-          cur_group.repositories.push(cur_repo);
-          repositories.push(cur_repo);
-        });
-      });
-    }
-    this.set('allRepos', repositories);
-    return reposGroup;
-  }.property('controller.allRepos'),
-
-  /**
-   * Onclick handler for edit action of each repo, enter edit mode
-   * @param {object} event
-   */
-  onEditClick:function (event) {
-    var targetRepo = this.get('allRepos').findProperty('id', event.context.get('id'));
-    if (targetRepo) {
-      targetRepo.set('onEdit', true);
-    }
-  },
-
-  /**
-   * Onclick handler for undo action of each repo group
-   * @method undoGroupLocalRepository
-   * @param {object} event
-   */
-  undoGroupLocalRepository: function (event) {
-    this.doActionForGroupLocalRepository(event, 'originalBaseUrl');
-  },
-
-  /**
-   * Handler for clear icon click
-   * @method clearGroupLocalRepository
-   * @param {object} event
-   */
-  clearGroupLocalRepository: function (event) {
-    this.doActionForGroupLocalRepository(event, '');
-  },
-
-  /**
-   * Common handler for repo groups actions
-   * @method doActionForGroupLocalRepository
-   * @param {object} event
-   * @param {string} newBaseUrlField
-   */
-  doActionForGroupLocalRepository: function (event, newBaseUrlField) {
-    var targetRepo = this.get('allRepos').findProperty('id', event.context.get('id'));
-    if (targetRepo) {
-      targetRepo.set('baseUrl', Em.isEmpty(newBaseUrlField) ? '' : Em.get(targetRepo, newBaseUrlField));
-    }
-  },
-
-  /**
-   * Handler when editing any repo group BaseUrl
-   * @method editGroupLocalRepository
-   */
-  editGroupLocalRepository: function (event) {
-    var repos = this.get('allRepos');
-    repos.forEach(function (targetRepo) {
-      targetRepo.set('undo', targetRepo.get('baseUrl') != targetRepo.get('originalBaseUrl'));
-      targetRepo.set('clearAll', targetRepo.get('baseUrl'));
-      targetRepo.set('empty-error', !targetRepo.get('baseUrl'));
-
-    });
-  }.observes('allRepos.@each.baseUrl'),
-
-  /**
-   * onSuccess callback for save Repo URL.
-   */
-  doSaveRepoUrlsSuccessCallback: function (response, request, data) {
-    var id = data.repoId + '-' + data.osType;
-    console.log('Success in check Repo URL. data repoId+osType: ' + id);
-    var targetRepo = this.get('allRepos').findProperty('id', id);
-    if (!targetRepo) {
-      return;
-    } else {
-      
-      var modalCloseHandler = function() {
-        this.hide();
-        targetRepo.set('baseUrl', data.data.Repositories.base_url);
-        targetRepo.set('originalBaseUrl', data.data.Repositories.base_url);
-        targetRepo.set('onEdit', false);
-      };
-
-      App.ModalPopup.show({
-        header: Em.I18n.t('admin.cluster.repositories.popup.header.success'),
-        secondary: null,
-        onPrimary: modalCloseHandler,
-        onClose: modalCloseHandler,
-        message: Em.I18n.t('admin.cluster.repositories.popup.body.success'),
-        bodyClass: Em.View.extend({
-          template: Em.Handlebars.compile('<div class="alert alert-success">{{{message}}}</div>')
-        })
-      })
-    }
-  },
-
-  /**
-   * onError callback for save Repo URL.
-   */
-  doSaveRepoUrlsErrorCallback: function (request, ajaxOptions, error, data) {
-    console.log('Error in check Repo URL. The baseURL sent is:  ' + data.data);
-    var self = this;
-    var id = data.url.split('/')[10] + '-' + data.url.split('/')[8];
-    var targetRepo = this.get('allRepos').findProperty('id', id);
-    if (!targetRepo) {
-      return;
-    } else {
-      App.ModalPopup.show({
-        header: Em.I18n.t('admin.cluster.repositories.popup.header.fail'),
-        primary: Em.I18n.t('common.saveAnyway'),
-        secondary: Em.I18n.t('common.revert'),
-        third: Em.I18n.t('common.cancel'),
-        onPrimary: function () {
-          // save anyway: Go ahead and save with Repo URL validation turned off and close Dialog when done.
-          this.hide();
-          self.doSaveRepoUrls(id, false);
-        },
-        onSecondary: function () {
-          // Revert: Close dialog, revert URL value, go back to non-Edit mode
-          this.hide();
-          targetRepo.set('baseUrl', targetRepo.get('originalBaseUrl'));
-          targetRepo.set('onEdit', false);
-        },
-        onThird: function () {
-          // cancel: Close dialog but stay in Edit mode
-          this.hide();
-        },
-        message: Em.I18n.t('admin.cluster.repositories.popup.body.fail'),
-        bodyClass: Em.View.extend({
-          template: Em.Handlebars.compile('<div class="alert alert-warning">{{{message}}}</div>')
-        })
-      })
-    }
-  },
-
-  /**
-   * Check validation and Save the customized local urls
-   */
-  doSaveRepoUrls: function (id, verifyBaseUrl) {
-    var targetRepo = this.get('allRepos').findProperty('id', id);
-    var verifyBaseUrl = verifyBaseUrl;
-    App.ajax.send({
-      name: 'wizard.advanced_repositories.valid_url',
-      sender: this,
-      data: {
-        stackName: targetRepo.stackName,
-        stackVersion: targetRepo.stackVersion,
-        repoId: targetRepo.repoId,
-        osType: targetRepo.osType,
-        data: {
-          'Repositories': {
-            'base_url': targetRepo.baseUrl,
-            "verify_base_url": verifyBaseUrl
-          }
-        }
-      },
-      success: 'doSaveRepoUrlsSuccessCallback',
-      error: 'doSaveRepoUrlsErrorCallback'
-    });
-  },
-  /**
-   * Check validation and Save the customized local urls
-   */
-  saveRepoUrls: function (event) {
-    this.doSaveRepoUrls(event.context.get('id'), true);
-  },
-
-  /**
-   * on click handler 'Cancel' for current repo in edit mode
-   */
-  doCancel: function (event) {
-    var targetRepo = this.get('allRepos').findProperty('id', event.context.get('id'));
-    if (targetRepo) {
-      targetRepo.set('baseUrl', targetRepo.get('originalBaseUrl'));
-      targetRepo.set('onEdit', false);
-    }
-  }
-
-});
-

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/views/main/admin/menu.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/menu.js b/ambari-web/app/views/main/admin/menu.js
deleted file mode 100644
index 7001e89..0000000
--- a/ambari-web/app/views/main/admin/menu.js
+++ /dev/null
@@ -1,89 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-// This logic is substituted by MainAdminView for now.
-App.MainAdminMenuView = Em.CollectionView.extend({
-  //contentBinding: 'controller',
-  /*content: [
-    {
-      route:'user',
-      label:'Users'
-    },
-    {
-      route:'security',
-      label:'Security'
-    },
-    {
-      route:'cluster',
-      label:'Cluster'
-    }
-    /*,
-    {
-      route:'authentication',
-      label:'Authentication'
-    },
-
-{
-      route: 'user',
-      label: 'Users'
-
-    },
-    {
-      route: 'security',
-      label: 'Security'
-    }/*,
-     {
-     route:'authentication',
-     label:'Authentication'
-     },
-
-     {
-     route:'audit',
-     label:'Audit'
-     }*/
-    /*,
-     {
-     route:'advanced',
-     label:'Advanced'
-     }
-
-  ],
-  tagName: "ul",
-  classNames: ["nav", "nav-list"],
-
-  init: function () {
-    this._super();
-    this.activateView(); // default selected menu
-  },
-
-  activateView: function () {
-    var route = App.get('router.mainAdminController.category');
-    $.each(this._childViews, function () {
-      this.set('active', (this.get('content.route') == route ? "active" : ""));
-    });
-  }.observes('App.router.mainAdminController.category'),
-
-  itemViewClass:Em.View.extend({
-    classNameBindings:["active"],
-    active:"",
-    template:Ember.Handlebars.compile('<a class="text-center" {{action adminNavigate view.content.route }} href="#"> {{unbound view.content.label}}</a>')
-  })
-*/
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/43333740/ambari-web/app/views/main/admin/misc_view.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/main/admin/misc_view.js b/ambari-web/app/views/main/admin/misc_view.js
deleted file mode 100644
index a2e6e9b..0000000
--- a/ambari-web/app/views/main/admin/misc_view.js
+++ /dev/null
@@ -1,26 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-var App = require('app');
-
-App.MainAdminMiscView = Em.View.extend({
-  templateName: require('templates/main/admin/misc'),
-  didInsertElement: function() {
-    this.get('controller').loadUsers();
-  }
-});