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/0f76c7f9 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/0f76c7f9 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/0f76c7f9 Branch: refs/heads/branch-feature-AMBARI-22008 Commit: 0f76c7f9d642bced5c89e0a25986c12c89213912 Parents: d88d3cc Author: Robert Levas <rle...@hortonworks.com> Authored: Thu Oct 12 15:49:57 2017 -0400 Committer: Robert Levas <rle...@hortonworks.com> Committed: Thu Oct 12 15:49:57 2017 -0400 ---------------------------------------------------------------------- .../ambari/server/controller/KerberosHelperImpl.java | 2 +- .../kerberos/AbstractPrepareKerberosServerAction.java | 14 ++++++++++++++ .../upgrades/PreconfigureKerberosAction.java | 13 +++++++++++++ .../AbstractPrepareKerberosServerActionTest.java | 5 +++++ 4 files changed, 33 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/0f76c7f9/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 f8fe31a..4f14614 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 @@ -1644,7 +1644,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/0f76c7f9/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 3db844a..7948a60 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 @@ -40,6 +40,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; @@ -141,6 +142,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/0f76c7f9/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 d18f333..5af7c6b 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/0f76c7f9/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 8ff5ad2..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 @@ -45,6 +45,7 @@ import org.apache.ambari.server.state.kerberos.KerberosComponentDescriptor; 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; @@ -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")); } }