Repository: ambari Updated Branches: refs/heads/branch-2.6 a837d6191 -> f41d8359c
AMBARI-22224. host and hostname built-in variables are not populated when performing Kerberos-related operations (rlevas) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/f41d8359 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/f41d8359 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/f41d8359 Branch: refs/heads/branch-2.6 Commit: f41d8359c9df9b78d004b8b14e9e834b2fc5c76b Parents: a837d61 Author: Robert Levas <rle...@hortonworks.com> Authored: Thu Oct 12 16:24:47 2017 -0400 Committer: Robert Levas <rle...@hortonworks.com> Committed: Thu Oct 12 16:24:47 2017 -0400 ---------------------------------------------------------------------- .../server/controller/KerberosHelperImpl.java | 2 +- .../AbstractPrepareKerberosServerAction.java | 14 ++++++++++++++ .../upgrades/PreconfigureKerberosAction.java | 13 +++++++++++++ .../AbstractPrepareKerberosServerActionTest.java | 19 ++++++++++++------- 4 files changed, 40 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/f41d8359/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java index 7627d59..86d3ee0 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/controller/KerberosHelperImpl.java @@ -1611,7 +1611,7 @@ public class KerberosHelperImpl implements KerberosHelper { // Calculate the current host-specific configurations. These will be used to replace // variables within the Kerberos descriptor data Map<String, Map<String, String>> configurations = calculateConfigurations(cluster, - hostname.equals(ambariServerHostname) ? null : hostname, + hostname, kerberosDescriptor, false, false); http://git-wip-us.apache.org/repos/asf/ambari/blob/f41d8359/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/AbstractPrepareKerberosServerAction.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/AbstractPrepareKerberosServerAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/AbstractPrepareKerberosServerAction.java index d1b442c..a932da4 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/AbstractPrepareKerberosServerAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/kerberos/AbstractPrepareKerberosServerAction.java @@ -39,6 +39,7 @@ import org.apache.ambari.server.state.kerberos.KerberosDescriptor; import org.apache.ambari.server.state.kerberos.KerberosIdentityDescriptor; import org.apache.ambari.server.state.kerberos.KerberosServiceDescriptor; import org.apache.ambari.server.utils.StageUtils; +import org.apache.commons.lang.StringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -125,6 +126,19 @@ public abstract class AbstractPrepareKerberosServerAction extends KerberosServer if (serviceDescriptor != null) { List<KerberosIdentityDescriptor> serviceIdentities = serviceDescriptor.getIdentities(true, filterContext); + if (!StringUtils.isEmpty(hostName)) { + // Update the configurations with the relevant hostname + Map<String, String> generalProperties = currentConfigurations.get(""); + if (generalProperties == null) { + generalProperties = new HashMap<>(); + currentConfigurations.put("", generalProperties); + } + + // Add the current hostname under "host" and "hostname" + generalProperties.put("host", hostName); + generalProperties.put("hostname", hostName); + } + // Add service-level principals (and keytabs) kerberosHelper.addIdentities(kerberosIdentityDataFileWriter, serviceIdentities, identityFilter, hostName, serviceName, componentName, kerberosConfigurations, currentConfigurations, excludeHeadless); http://git-wip-us.apache.org/repos/asf/ambari/blob/f41d8359/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/PreconfigureKerberosAction.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/PreconfigureKerberosAction.java b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/PreconfigureKerberosAction.java index 30bc47f..89e313f 100644 --- a/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/PreconfigureKerberosAction.java +++ b/ambari-server/src/main/java/org/apache/ambari/server/serveraction/upgrades/PreconfigureKerberosAction.java @@ -305,6 +305,19 @@ public class PreconfigureKerberosAction extends AbstractUpgradeServerAction { KerberosServiceDescriptor serviceDescriptor = kerberosDescriptor.getService(serviceName); + if (!StringUtils.isEmpty(hostName)) { + // Update the configurations with the relevant hostname + Map<String, String> generalProperties = currentConfigurations.get(""); + if (generalProperties == null) { + generalProperties = new HashMap<>(); + currentConfigurations.put("", generalProperties); + } + + // Add the current hostname under "host" and "hostname" + generalProperties.put("host", hostName); + generalProperties.put("hostname", hostName); + } + if (serviceDescriptor != null) { List<KerberosIdentityDescriptor> serviceIdentities = serviceDescriptor.getIdentities(true, filterContext); http://git-wip-us.apache.org/repos/asf/ambari/blob/f41d8359/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/AbstractPrepareKerberosServerActionTest.java ---------------------------------------------------------------------- diff --git a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/AbstractPrepareKerberosServerActionTest.java b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/AbstractPrepareKerberosServerActionTest.java index 4ce7228..5522132 100644 --- a/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/AbstractPrepareKerberosServerActionTest.java +++ b/ambari-server/src/test/java/org/apache/ambari/server/serveraction/kerberos/AbstractPrepareKerberosServerActionTest.java @@ -18,6 +18,12 @@ package org.apache.ambari.server.serveraction.kerberos; +import static org.easymock.EasyMock.anyBoolean; +import static org.easymock.EasyMock.anyObject; +import static org.easymock.EasyMock.expect; +import static org.easymock.EasyMock.replay; +import static org.easymock.EasyMock.verify; + import java.io.File; import java.util.ArrayList; import java.util.Collection; @@ -36,9 +42,10 @@ import org.apache.ambari.server.state.Clusters; import org.apache.ambari.server.state.Service; import org.apache.ambari.server.state.ServiceComponentHost; import org.apache.ambari.server.state.kerberos.KerberosComponentDescriptor; -import org.apache.ambari.server.state.kerberos.KerberosServiceDescriptor; import org.apache.ambari.server.state.kerberos.KerberosDescriptor; +import org.apache.ambari.server.state.kerberos.KerberosServiceDescriptor; import org.easymock.EasyMock; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; @@ -46,12 +53,6 @@ import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; -import static org.easymock.EasyMock.anyBoolean; -import static org.easymock.EasyMock.anyObject; -import static org.easymock.EasyMock.expect; -import static org.easymock.EasyMock.replay; -import static org.easymock.EasyMock.verify; - public class AbstractPrepareKerberosServerActionTest { private class PrepareKerberosServerAction extends AbstractPrepareKerberosServerAction{ @@ -152,6 +153,10 @@ public class AbstractPrepareKerberosServerActionTest { false, propertiesToIgnore, false); verify(kerberosHelper); + + // Ensure the host and hostname values were set in the configuration context + Assert.assertEquals("host1", configurations.get("").get("host")); + Assert.assertEquals("host1", configurations.get("").get("hostname")); } }