You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by ol...@apache.org on 2016/06/01 22:37:38 UTC

ambari git commit: AMBARI-16719. Enable authentication using Ambari for LogSearch (Miklos Gergely via oleewere)

Repository: ambari
Updated Branches:
  refs/heads/trunk b4df6da51 -> 2ff12b7e0


AMBARI-16719. Enable authentication using Ambari for LogSearch (Miklos Gergely via oleewere)


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

Branch: refs/heads/trunk
Commit: 2ff12b7e0ff3ff111f5f8b01e2a232b3109f4ab7
Parents: b4df6da
Author: Miklos Gergely <mg...@hortonworks.com>
Authored: Thu Jun 2 00:21:56 2016 +0200
Committer: oleewere <ol...@gmail.com>
Committed: Thu Jun 2 00:36:46 2016 +0200

----------------------------------------------------------------------
 .../ambari_agent/CustomServiceOrchestrator.py   |  8 +++++-
 .../TestCustomServiceOrchestrator.py            |  2 ++
 ...rchExternalServerAuthenticationProvider.java | 10 +++++---
 .../src/main/resources/logsearch.properties     |  2 +-
 .../ambari/server/controller/AmbariServer.java  |  1 +
 .../apache/ambari/server/utils/StageUtils.java  | 25 ++++++++++++++----
 .../configuration/logsearch-properties.xml      | 27 ++++++++++++++++++++
 .../LOGSEARCH/0.5.0/package/scripts/params.py   | 23 +++++++++++++++--
 .../package/templates/logsearch.properties.j2   |  9 +++++++
 .../AmbariCustomCommandExecutionHelperTest.java |  6 ++---
 .../AmbariManagementControllerTest.java         |  2 ++
 .../BackgroundCustomCommandExecutionTest.java   |  3 ++-
 .../server/controller/KerberosHelperTest.java   |  6 +++++
 ...ClusterStackVersionResourceProviderTest.java |  4 +--
 .../HostStackVersionResourceProviderTest.java   |  5 ++--
 .../UpgradeResourceProviderHDP22Test.java       |  2 ++
 .../internal/UpgradeResourceProviderTest.java   |  2 ++
 .../ambari/server/utils/StageUtilsTest.java     |  2 ++
 .../test/python/stacks/2.4/configs/default.json | 11 +++++++-
 ambari-web/app/data/HDP2/site_properties.js     | 21 +++++++++++++++
 20 files changed, 149 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
index fcea23f..fc1b72a 100644
--- a/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
+++ b/ambari-agent/src/main/python/ambari_agent/CustomServiceOrchestrator.py
@@ -56,6 +56,8 @@ class CustomServiceOrchestrator():
   IPV4_ADDRESSES_KEY = "all_ipv4_ips"
 
   AMBARI_SERVER_HOST = "ambari_server_host"
+  AMBARI_SERVER_PORT = "ambari_server_port"
+  AMBARI_SERVER_USE_SSL = "ambari_server_use_ssl"
 
   FREQUENT_COMMANDS = [COMMAND_NAME_SECURITY_STATUS, COMMAND_NAME_STATUS]
   DONT_DEBUG_FAILURES_FOR_COMMANDS = FREQUENT_COMMANDS
@@ -360,6 +362,8 @@ class CustomServiceOrchestrator():
     ipv4_addresses = info.pop(self.IPV4_ADDRESSES_KEY)
 
     ambariServerHost = info.pop(self.AMBARI_SERVER_HOST)
+    ambariServerPort = info.pop(self.AMBARI_SERVER_PORT)
+    ambariServerUseSsl = info.pop(self.AMBARI_SERVER_USE_SSL)
 
     decompressedMap = {}
 
@@ -385,8 +389,10 @@ class CustomServiceOrchestrator():
     decompressedMap[self.RACKS_KEY] = racks
     #Add ips list to result
     decompressedMap[self.IPV4_ADDRESSES_KEY] = ipv4_addresses
-    #Add ambari-server host to result
+    #Add ambari-server properties to result
     decompressedMap[self.AMBARI_SERVER_HOST] = ambariServerHost
+    decompressedMap[self.AMBARI_SERVER_PORT] = ambariServerPort
+    decompressedMap[self.AMBARI_SERVER_USE_SSL] = ambariServerUseSsl
 
     return decompressedMap
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
----------------------------------------------------------------------
diff --git a/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py b/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
index 482235f..0ff0ba5 100644
--- a/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
+++ b/ambari-agent/src/test/python/ambari_agent/TestCustomServiceOrchestrator.py
@@ -163,6 +163,8 @@ class TestCustomServiceOrchestrator(TestCase):
                          'slave_hosts'   : ['0', '1'],
                          'all_racks'   : [u'/default-rack:0'],
                          'ambari_server_host' : 'a.b.c',
+                         'ambari_server_port' : '123',
+                         'ambari_server_use_ssl' : 'false',
                          'all_ipv4_ips'   : [u'192.168.12.101:0'],
                          'all_hosts'     : ['h1.hortonworks.com', 'h2.hortonworks.com'],
                          'all_ping_ports': ['8670:0,1']},

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
index 0fd3770..f1f2e31 100644
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/java/org/apache/ambari/logsearch/web/security/LogsearchExternalServerAuthenticationProvider.java
@@ -166,11 +166,13 @@ public class LogsearchExternalServerAuthenticationProvider extends
     String allowedRoleList[] = PropertiesUtil
         .getPropertyStringList(ALLOWED_ROLE_PROP);
 
+    List<String> values = new ArrayList<String>();
+    jsonUtil.getValuesOfKey(responseJson,
+        PRIVILEGE_INFO.PERMISSION_NAME.toString(), values);
+    if (values.isEmpty())
+      return true;
+    
     if (allowedRoleList.length > 0 && responseJson != null) {
-      List<String> values = new ArrayList<String>();
-      jsonUtil.getValuesOfKey(responseJson,
-          PRIVILEGE_INFO.PERMISSION_NAME.toString(), values);
-
       for (String allowedRole : allowedRoleList) {
         for (String role : values) {
           if (role.equals(allowedRole)) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-logsearch/ambari-logsearch-portal/src/main/resources/logsearch.properties
----------------------------------------------------------------------
diff --git a/ambari-logsearch/ambari-logsearch-portal/src/main/resources/logsearch.properties b/ambari-logsearch/ambari-logsearch-portal/src/main/resources/logsearch.properties
index 0c65bd6..f477c5a 100755
--- a/ambari-logsearch/ambari-logsearch-portal/src/main/resources/logsearch.properties
+++ b/ambari-logsearch/ambari-logsearch-portal/src/main/resources/logsearch.properties
@@ -46,4 +46,4 @@ logsearch.auth.external_auth.enable=false
 logsearch.auth.external_auth.host_url=http://ip:port
 logsearch.auth.external_auth.login_url=/api/v1/users/$USERNAME/privileges?fields=*
 #Note: Use comma(,) for separation of multiple roles
-logsearch.roles.allowed=AMBARI.ADMIN
\ No newline at end of file
+logsearch.roles.allowed=AMBARI.ADMINISTRATOR
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
index d17a451..cdc8185 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java
@@ -889,6 +889,7 @@ public class AmbariServer {
     StackAdvisorResourceProvider.init(injector.getInstance(StackAdvisorHelper.class));
     StageUtils.setGson(injector.getInstance(Gson.class));
     StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
+    StageUtils.setConfiguration(injector.getInstance(Configuration.class));
     WorkflowJsonService.setDBProperties(
       injector.getInstance(Configuration.class));
     SecurityFilter.init(injector.getInstance(Configuration.class));

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/main/java/org/apache/ambari/server/utils/StageUtils.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/java/org/apache/ambari/server/utils/StageUtils.java b/ambari-server/src/main/java/org/apache/ambari/server/utils/StageUtils.java
index 218a42f..240bfc7 100644
--- a/ambari-server/src/main/java/org/apache/ambari/server/utils/StageUtils.java
+++ b/ambari-server/src/main/java/org/apache/ambari/server/utils/StageUtils.java
@@ -45,6 +45,7 @@ import org.apache.ambari.server.RoleCommand;
 import org.apache.ambari.server.actionmanager.Stage;
 import org.apache.ambari.server.actionmanager.StageFactory;
 import org.apache.ambari.server.agent.ExecutionCommand;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.ActionExecutionContext;
 import org.apache.ambari.server.state.Cluster;
 import org.apache.ambari.server.state.Host;
@@ -63,6 +64,7 @@ import org.codehaus.jackson.map.ObjectMapper;
 import org.codehaus.jackson.map.SerializationConfig;
 
 import com.google.common.base.Joiner;
+import com.google.common.collect.Sets;
 import com.google.gson.Gson;
 import com.google.inject.Inject;
 
@@ -74,6 +76,8 @@ public class StageUtils {
 
   private static final Log LOG = LogFactory.getLog(StageUtils.class);
   protected static final String AMBARI_SERVER_HOST = "ambari_server_host";
+  protected static final String AMBARI_SERVER_PORT = "ambari_server_port";
+  protected static final String AMBARI_SERVER_USE_SSL = "ambari_server_use_ssl";
   protected static final String HOSTS_LIST = "all_hosts";
   protected static final String PORTS = "all_ping_ports";
   protected static final String RACKS = "all_racks";
@@ -91,6 +95,9 @@ public class StageUtils {
   private static TopologyManager topologyManager;
 
   @Inject
+  private static Configuration configuration;
+  
+  @Inject
   public StageUtils(StageFactory stageFactory) {
     StageUtils.stageFactory = stageFactory;
   }
@@ -129,6 +136,11 @@ public class StageUtils {
     StageUtils.topologyManager = topologyManager;
   }
 
+  //todo: proper static injection
+  public static void setConfiguration(Configuration configuration) {
+    StageUtils.configuration = configuration;
+  }
+
   static {
     componentToClusterInfoKeyMap.put("NAMENODE", "namenode_host");
     componentToClusterInfoKeyMap.put("JOBTRACKER", "jtnode_host");
@@ -411,14 +423,17 @@ public class StageUtils {
 
     // Fill server host
     /*
-     * Note: We don't replace server host name by an index (like we do
+     * Note: We don't replace server host name, port, ssl usage by an index (like we do
      * with component hostnames), because if ambari-agent is not installed
      * at ambari-server host, then allHosts map will not contain
      * ambari-server hostname.
      */
-    TreeSet<String> serverHost = new TreeSet<String>();
-    serverHost.add(getHostName());
-    clusterHostInfo.put(AMBARI_SERVER_HOST, serverHost);
+    clusterHostInfo.put(AMBARI_SERVER_HOST, Sets.newHashSet(getHostName()));
+    
+    boolean serverUseSsl = configuration.getApiSSLAuthentication();
+    int port = serverUseSsl ? configuration.getClientSSLApiPort() : configuration.getClientApiPort();
+    clusterHostInfo.put(AMBARI_SERVER_PORT, Sets.newHashSet(Integer.toString(port)));
+    clusterHostInfo.put(AMBARI_SERVER_USE_SSL, Sets.newHashSet(Boolean.toString(serverUseSsl)));
 
     return clusterHostInfo;
   }
@@ -437,7 +452,7 @@ public class StageUtils {
    * @throws AmbariException if an index fails to map to a host name
    */
   public static Map<String, Set<String>> substituteHostIndexes(Map<String, Set<String>> clusterHostInfo) throws AmbariException {
-    Set<String> keysToSkip = new HashSet<String>(Arrays.asList(HOSTS_LIST, PORTS, AMBARI_SERVER_HOST, RACKS, IPV4_ADDRESSES));
+    Set<String> keysToSkip = new HashSet<String>(Arrays.asList(HOSTS_LIST, PORTS, AMBARI_SERVER_HOST, AMBARI_SERVER_PORT, AMBARI_SERVER_USE_SSL, RACKS, IPV4_ADDRESSES));
     String[] allHosts = {};
     if (clusterHostInfo.get(HOSTS_LIST) != null) {
       allHosts = clusterHostInfo.get(HOSTS_LIST).toArray(new String[clusterHostInfo.get(HOSTS_LIST).size()]);

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/configuration/logsearch-properties.xml
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/configuration/logsearch-properties.xml b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/configuration/logsearch-properties.xml
index 0d7bb89..b1fb6ab 100644
--- a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/configuration/logsearch-properties.xml
+++ b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/configuration/logsearch-properties.xml
@@ -137,4 +137,31 @@
     <on-ambari-upgrade add="false" change="true" delete="true"/>
     <on-stack-upgrade add="true" change="true" delete="false"/>
   </property>
+  <property>
+    <name>logsearch.external.auth.enabled</name>
+    <value>true</value>
+    <display-name>External authentication</display-name>
+    <description>Enable external authentication</description>
+    <value-attributes>
+      <type>boolean</type>
+    </value-attributes>
+    <on-ambari-upgrade add="false" change="true" delete="true"/>
+    <on-stack-upgrade add="true" change="true" delete="false"/>
+  </property>
+  <property>
+    <name>logsearch.external.auth.host_url</name>
+    <value>{ambari_server_auth_host_url}</value>
+    <display-name>External authentication url - host and port</display-name>
+    <description>The host and port of the external server used to authenticate</description>
+    <on-ambari-upgrade add="false" change="true" delete="true"/>
+    <on-stack-upgrade add="true" change="true" delete="false"/>
+  </property>
+  <property>
+    <name>logsearch.external.auth.login_url</name>
+    <value>/api/v1/users/$USERNAME/privileges?fields=*</value>
+    <display-name>External authentication url - path and query</display-name>
+    <description>The path and query of the external server used to authenticate</description>
+    <on-ambari-upgrade add="false" change="true" delete="true"/>
+    <on-stack-upgrade add="true" change="true" delete="false"/>
+  </property>
 </configuration>

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/params.py
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/params.py b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/params.py
index 0adc5c5..34583ba 100644
--- a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/params.py
+++ b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/scripts/params.py
@@ -195,6 +195,9 @@ logsearch_custom_properties.pop("logsearch.collection.audit.logs.replication.fac
 logsearch_custom_properties.pop("logsearch.collection.service.logs.numshards", None)
 logsearch_custom_properties.pop("logsearch.service.logs.split.interval.mins", None)
 logsearch_custom_properties.pop("logsearch.collection.audit.logs.numshards", None)
+logsearch_custom_properties.pop("logsearch.external.auth.enabled", None)
+logsearch_custom_properties.pop("logsearch.external.auth.host_url", None)
+logsearch_custom_properties.pop("logsearch.external.auth.login_url", None)
 
 # logsearch-env configs
 logsearch_user = config['configurations']['logsearch-env']['logsearch_user']
@@ -237,7 +240,7 @@ mapred_log_dir_prefix = default('/configurations/mapred-env/mapred_log_dir_prefi
 zk_log_dir = default('/configurations/zookeeper-env/zk_log_dir', '/var/log/zookeeper')
 
 #####################################
-# Logsearch admin configs
+# Logsearch auth configs
 #####################################
 
 logsearch_admin_credential_file = 'logsearch-admin.json'
@@ -245,6 +248,22 @@ logsearch_admin_username = default('/configurations/logsearch-admin-json/logsear
 logsearch_admin_password = default('/configurations/logsearch-admin-json/logsearch_admin_password', "")
 logsearch_admin_content = config['configurations']['logsearch-admin-json']['content']
 
+# for now just pick first collector
+if 'ambari_server_host' in config['clusterHostInfo']:
+  ambari_server_host = config['clusterHostInfo']['ambari_server_host'][0]
+  ambari_server_port = config['clusterHostInfo']['ambari_server_port'][0]
+  ambari_server_use_ssl = config['clusterHostInfo']['ambari_server_use_ssl'][0] == 'true'
+  
+  ambari_server_protocol = 'https' if ambari_server_use_ssl else 'http'
+
+  ambari_server_auth_host_url = format('{ambari_server_protocol}://{ambari_server_host}:{ambari_server_port}')
+else:
+  ambari_server_auth_host_url = ''
+
+logsearch_auth_external_enabled = str(config['configurations']['logsearch-properties']['logsearch.external.auth.enabled']).lower()
+logsearch_auth_external_host_url = format(config['configurations']['logsearch-properties']['logsearch.external.auth.host_url'])
+logsearch_auth_external_login_url = config['configurations']['logsearch-properties']['logsearch.external.auth.login_url']
+
 #####################################
 # Logfeeder configs
 #####################################
@@ -304,4 +323,4 @@ logfeeder_custom_properties.pop('logfeeder.config.files', None)
 logfeeder_custom_properties.pop('logfeeder.checkpoint.folder', None)
 logfeeder_custom_properties.pop('logfeeder.metrics.collector.hosts', None)
 logfeeder_custom_properties.pop('logfeeder.log.filter.enable', None)
-logfeeder_custom_properties.pop('logfeeder.solr.config.interval', None)
\ No newline at end of file
+logfeeder_custom_properties.pop('logfeeder.solr.config.interval', None)

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/templates/logsearch.properties.j2
----------------------------------------------------------------------
diff --git a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/templates/logsearch.properties.j2 b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/templates/logsearch.properties.j2
index 7e649ea..9ada5bf 100644
--- a/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/templates/logsearch.properties.j2
+++ b/ambari-server/src/main/resources/common-services/LOGSEARCH/0.5.0/package/templates/logsearch.properties.j2
@@ -47,8 +47,17 @@ logsearch.solr.jmx.port={{logsearch_solr_jmx_port}}
 logsearch.logfeeder.include.default.level={{logsearch_logfeeder_include_default_level}}
 
 # logsearch-admin.json
+logsearch.auth.file.enable=true
 logsearch.login.credentials.file={{logsearch_admin_credential_file}}
 
+logsearch.auth.ldap.enable=false
+logsearch.auth.simple.enable=false
+
+logsearch.auth.external_auth.enable={{logsearch_auth_external_enabled}}
+logsearch.auth.external_auth.host_url={{logsearch_auth_external_host_url}}
+logsearch.auth.external_auth.login_url={{logsearch_auth_external_login_url}}
+logsearch.roles.allowed=AMBARI.ADMINISTRATOR
+
 # Custom properties
 {% for key, value in logsearch_custom_properties.items() %}
 {{key}}={{value}}

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
index 1ecadc4..68b31c0 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariCustomCommandExecutionHelperTest.java
@@ -33,6 +33,7 @@ import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
 import org.apache.ambari.server.actionmanager.Request;
 import org.apache.ambari.server.actionmanager.Stage;
 import org.apache.ambari.server.agent.ExecutionCommand;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.internal.ComponentResourceProviderTest;
 import org.apache.ambari.server.controller.internal.RequestOperationLevel;
 import org.apache.ambari.server.controller.internal.RequestResourceFilter;
@@ -82,7 +83,6 @@ public class AmbariCustomCommandExecutionHelperTest {
 
   @Before
   public void setup() throws Exception {
-    TopologyManager topologyManager;
     InMemoryDefaultTestModule module = new InMemoryDefaultTestModule(){
       @Override
       protected void configure() {
@@ -96,8 +96,8 @@ public class AmbariCustomCommandExecutionHelperTest {
     injector.getInstance(GuiceJpaInitializer.class);
     controller = injector.getInstance(AmbariManagementController.class);
     clusters = injector.getInstance(Clusters.class);
-    topologyManager = injector.getInstance(TopologyManager.class);
-    StageUtils.setTopologyManager(topologyManager);
+    StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
+    StageUtils.setConfiguration(injector.getInstance(Configuration.class));
   }
 
   @After

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
index 42d62c8..fd70df5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariManagementControllerTest.java
@@ -248,6 +248,8 @@ public class AmbariManagementControllerTest {
     controller = injector.getInstance(AmbariManagementController.class);
     TopologyManager topologyManager = injector.getInstance(TopologyManager.class);
     StageUtils.setTopologyManager(topologyManager);
+    Configuration configuration = injector.getInstance(Configuration.class);
+    StageUtils.setConfiguration(configuration);
     ActionManager.setTopologyManager(topologyManager);
 
     SecurityContextHolder.getContext().setAuthentication(TestAuthenticationFactory.createAdministrator());

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
index fc39521..0f5224d 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/BackgroundCustomCommandExecutionTest.java
@@ -103,7 +103,8 @@ public class BackgroundCustomCommandExecutionTest {
     Assert.assertEquals("src/main/resources/custom_action_definitions", configuration.getCustomActionDefinitionPath());
 
     StageUtils.setTopologyManager(topologyManager);
-
+    StageUtils.setConfiguration(configuration);
+    
     // Set the authenticated user
     // TODO: remove this or replace the authenticated user to test authorization rules
     // Set the authenticated user

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
index c707a90..7281e85 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/KerberosHelperTest.java
@@ -34,6 +34,7 @@ import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorHelper;
 import org.apache.ambari.server.api.services.stackadvisor.StackAdvisorRequest;
 import org.apache.ambari.server.api.services.stackadvisor.recommendations.RecommendationResponse;
 import org.apache.ambari.server.audit.AuditLogger;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.internal.ArtifactResourceProvider;
 import org.apache.ambari.server.controller.internal.RequestStageContainer;
 import org.apache.ambari.server.controller.spi.ClusterController;
@@ -141,6 +142,7 @@ public class KerberosHelperTest extends EasyMockSupport {
   private final KerberosConfigDataFileWriterFactory kerberosConfigDataFileWriterFactory = createStrictMock(KerberosConfigDataFileWriterFactory.class);
   private final AmbariMetaInfo metaInfo = createMock(AmbariMetaInfo.class);
   private final TopologyManager topologyManager = createMock(TopologyManager.class);
+  private final Configuration configuration = createMock(Configuration.class);
 
   @Before
   public void setUp() throws Exception {
@@ -229,6 +231,10 @@ public class KerberosHelperTest extends EasyMockSupport {
     StageUtils.setTopologyManager(topologyManager);
     expect(topologyManager.getPendingHostComponents()).andReturn(
         Collections.<String, Collection<String>>emptyMap()).anyTimes();
+    
+    StageUtils.setConfiguration(configuration);
+    expect(configuration.getApiSSLAuthentication()).andReturn(false).anyTimes();
+    expect(configuration.getClientApiPort()).andReturn(8080).anyTimes();
 
     CredentialStoreService credentialStoreService = injector.getInstance(CredentialStoreService.class);
     if (!credentialStoreService.isInitialized(CredentialStoreType.TEMPORARY)) {

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
index 403f426..f3c90a1 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/ClusterStackVersionResourceProviderTest.java
@@ -322,8 +322,8 @@ public class ClusterStackVersionResourceProviderTest {
     expect(clusterVersionDAO.findByClusterAndStackAndVersion(anyObject(String.class),
             anyObject(StackId.class), anyObject(String.class))).andReturn(cve);
 
-    TopologyManager topologyManager = injector.getInstance(TopologyManager.class);
-    StageUtils.setTopologyManager(topologyManager);
+    StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
+    StageUtils.setConfiguration(injector.getInstance(Configuration.class));
 
     expect(clusterVersionDAO.findByCluster(anyObject(String.class))).andReturn(Collections.<ClusterVersionEntity>emptyList()).once();
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
index 4fcfce2..0c42d37 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/HostStackVersionResourceProviderTest.java
@@ -41,6 +41,7 @@ import java.util.Set;
 import org.apache.ambari.server.actionmanager.ActionManager;
 import org.apache.ambari.server.actionmanager.HostRoleCommand;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.RequestStatusResponse;
 import org.apache.ambari.server.controller.ResourceProviderFactory;
@@ -251,8 +252,8 @@ public class HostStackVersionResourceProviderTest {
 
     expect(actionManager.getRequestTasks(anyLong())).andReturn(Collections.<HostRoleCommand>emptyList()).anyTimes();
 
-    TopologyManager topologyManager = injector.getInstance(TopologyManager.class);
-    StageUtils.setTopologyManager(topologyManager);
+    StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
+    StageUtils.setConfiguration(injector.getInstance(Configuration.class));
 
     // replay
     replay(managementController, response, clusters, resourceProviderFactory, csvResourceProvider,

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
index 73860bc..bc99117 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderHDP22Test.java
@@ -36,6 +36,7 @@ import org.apache.ambari.server.actionmanager.ExecutionCommandWrapper;
 import org.apache.ambari.server.actionmanager.ExecutionCommandWrapperFactory;
 import org.apache.ambari.server.agent.ExecutionCommand;
 import org.apache.ambari.server.agent.ExecutionCommand.KeyNames;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.AmbariServer;
 import org.apache.ambari.server.controller.spi.Request;
@@ -239,6 +240,7 @@ public class UpgradeResourceProviderHDP22Test {
     sch.setVersion("2.2.0.0");
     topologyManager = injector.getInstance(TopologyManager.class);
     StageUtils.setTopologyManager(topologyManager);
+    StageUtils.setConfiguration(injector.getInstance(Configuration.class));
     ActionManager.setTopologyManager(topologyManager);
   }
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
index 89b508c..67be4e5 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/controller/internal/UpgradeResourceProviderTest.java
@@ -46,6 +46,7 @@ import org.apache.ambari.server.actionmanager.Stage;
 import org.apache.ambari.server.api.resources.UpgradeResourceDefinition;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
 import org.apache.ambari.server.audit.AuditLogger;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.controller.AmbariManagementController;
 import org.apache.ambari.server.controller.AmbariServer;
 import org.apache.ambari.server.controller.spi.Predicate;
@@ -241,6 +242,7 @@ public class UpgradeResourceProviderTest {
 
     topologyManager = injector.getInstance(TopologyManager.class);
     StageUtils.setTopologyManager(topologyManager);
+    StageUtils.setConfiguration(injector.getInstance(Configuration.class));
     ActionManager.setTopologyManager(topologyManager);
     EasyMock.replay(injector.getInstance(AuditLogger.class));
   }

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/test/java/org/apache/ambari/server/utils/StageUtilsTest.java
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/java/org/apache/ambari/server/utils/StageUtilsTest.java b/ambari-server/src/test/java/org/apache/ambari/server/utils/StageUtilsTest.java
index 3f1fba3..5d39841 100644
--- a/ambari-server/src/test/java/org/apache/ambari/server/utils/StageUtilsTest.java
+++ b/ambari-server/src/test/java/org/apache/ambari/server/utils/StageUtilsTest.java
@@ -56,6 +56,7 @@ import org.apache.ambari.server.actionmanager.StageFactory;
 import org.apache.ambari.server.actionmanager.StageFactoryImpl;
 import org.apache.ambari.server.agent.ExecutionCommand;
 import org.apache.ambari.server.api.services.AmbariMetaInfo;
+import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.orm.DBAccessor;
 import org.apache.ambari.server.orm.dao.HostDAO;
 import org.apache.ambari.server.orm.dao.HostRoleCommandDAO;
@@ -131,6 +132,7 @@ public class StageUtilsTest extends EasyMockSupport {
 
 
     StageUtils.setTopologyManager(injector.getInstance(TopologyManager.class));
+    StageUtils.setConfiguration(injector.getInstance(Configuration.class));
   }
 
 

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-server/src/test/python/stacks/2.4/configs/default.json
----------------------------------------------------------------------
diff --git a/ambari-server/src/test/python/stacks/2.4/configs/default.json b/ambari-server/src/test/python/stacks/2.4/configs/default.json
index e01bc26..6362a4c 100644
--- a/ambari-server/src/test/python/stacks/2.4/configs/default.json
+++ b/ambari-server/src/test/python/stacks/2.4/configs/default.json
@@ -275,7 +275,10 @@
         "logsearch.collection.audit.logs.numshards": "10",
         "logsearch.collection.audit.logs.replication.factor": "1",
         "logsearch.app.max.memory": "1g",
-        "logsearch.solr.metrics.collector.hosts" : "{metrics_collector_hosts}"
+        "logsearch.solr.metrics.collector.hosts" : "{metrics_collector_hosts}",
+        "logsearch.external.auth.enabled" : "false",
+        "logsearch.external.auth.host_url" : "{ambari_server_auth_host_url}",
+        "logsearch.external.auth.login_url" : "/api/v1/users/$USERNAME/privileges?fields=*"
       },
       "logfeeder-properties": {
         "logfeeder.metrics.collector.hosts" : "{metrics_collector_hosts}",
@@ -382,6 +385,12 @@
       "ambari_server_host": [
         "c6401.ambari.apache.org"
       ],
+      "ambari_server_port": [
+        "8080"
+      ],
+      "ambari_server_use_ssl": [
+        "false"
+      ],
       "all_ping_ports": [
         "8670",
         "8670"

http://git-wip-us.apache.org/repos/asf/ambari/blob/2ff12b7e/ambari-web/app/data/HDP2/site_properties.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/data/HDP2/site_properties.js b/ambari-web/app/data/HDP2/site_properties.js
index beb420d..2634785 100644
--- a/ambari-web/app/data/HDP2/site_properties.js
+++ b/ambari-web/app/data/HDP2/site_properties.js
@@ -2170,6 +2170,27 @@ var hdp2properties = [
     "category": "Advanced logsearch-properties",
     "index": 9
   },
+  {
+    "name": "logsearch.external.auth.enabled",
+    "serviceName": "LOGSEARCH",
+    "filename": "logsearch-properties.xml",
+    "category": "Advanced logsearch-properties",
+    "index": 10
+  },
+  {
+    "name": "logsearch.external.auth.host_url",
+    "serviceName": "LOGSEARCH",
+    "filename": "logsearch-properties.xml",
+    "category": "Advanced logsearch-properties",
+    "index": 11
+  },
+  {
+    "name": "logsearch.external.auth.login_url",
+    "serviceName": "LOGSEARCH",
+    "filename": "logsearch-properties.xml",
+    "category": "Advanced logsearch-properties",
+    "index": 12
+  },
   /*logsearch-solr-env*/
   {
     "name": "logsearch_solr_log_dir",