Updated Branches: refs/heads/trunk 9c6ed3f1c -> a7863d954
WHIRR-751. Improve Kerberos service Project: http://git-wip-us.apache.org/repos/asf/whirr/repo Commit: http://git-wip-us.apache.org/repos/asf/whirr/commit/a7863d95 Tree: http://git-wip-us.apache.org/repos/asf/whirr/tree/a7863d95 Diff: http://git-wip-us.apache.org/repos/asf/whirr/diff/a7863d95 Branch: refs/heads/trunk Commit: a7863d954c0c4537635872b4b3f3157776ec6b85 Parents: 9c6ed3f Author: Graham Gear <graham.g...@gmail.com> Authored: Tue Nov 12 15:09:34 2013 +0000 Committer: Graham Gear <graham.g...@gmail.com> Committed: Tue Nov 12 15:09:34 2013 +0000 ---------------------------------------------------------------------- .../service/kerberos/KerberosBaseHandler.java | 7 ++++- .../functions/configure_kerberos_server.sh | 32 +++++++++++++------ .../functions/install_kerberos_client.sh | 32 +++++++++++++------ .../functions/install_kerberos_server.sh | 4 ++- .../kerberos/KerberosServerDryRunTest.java | 33 ++++++++++++++++++++ 5 files changed, 88 insertions(+), 20 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/whirr/blob/a7863d95/services/kerberos/src/main/java/org/apache/whirr/service/kerberos/KerberosBaseHandler.java ---------------------------------------------------------------------- diff --git a/services/kerberos/src/main/java/org/apache/whirr/service/kerberos/KerberosBaseHandler.java b/services/kerberos/src/main/java/org/apache/whirr/service/kerberos/KerberosBaseHandler.java index e86555c..b23f3da 100644 --- a/services/kerberos/src/main/java/org/apache/whirr/service/kerberos/KerberosBaseHandler.java +++ b/services/kerberos/src/main/java/org/apache/whirr/service/kerberos/KerberosBaseHandler.java @@ -39,7 +39,12 @@ public abstract class KerberosBaseHandler extends ClusterActionHandlerSupport { protected void beforeBootstrap(ClusterActionEvent event) throws IOException { addStatement(event, call("configure_hostnames")); addStatement(event, call("retry_helpers")); - addStatement(event, call(getInstallFunction(event.getClusterSpec().getConfiguration(), "java", "install_openjdk"))); + if (!(event.getClusterSpec().getConfiguration().containsKey("whirr.env.jdk_installed") + && event.getClusterSpec() + .getConfiguration().getBoolean("whirr.env.jdk_installed"))) { + addStatement(event, + call(getInstallFunction(event.getClusterSpec().getConfiguration(), "java", "install_openjdk"))); + } addStatement(event, call("install_kerberos_client")); } http://git-wip-us.apache.org/repos/asf/whirr/blob/a7863d95/services/kerberos/src/main/resources/functions/configure_kerberos_server.sh ---------------------------------------------------------------------- diff --git a/services/kerberos/src/main/resources/functions/configure_kerberos_server.sh b/services/kerberos/src/main/resources/functions/configure_kerberos_server.sh index 6b78a95..6f002b2 100644 --- a/services/kerberos/src/main/resources/functions/configure_kerberos_server.sh +++ b/services/kerberos/src/main/resources/functions/configure_kerberos_server.sh @@ -20,10 +20,22 @@ set -x function configure_kerberos_server() { KERBEROS_USER=${KERBEROS_USER:-$CLUSTER_USER} KERBEROS_REALM_REGEX=$(echo $KERBEROS_REALM | sed s/\\\./\\\\\./g) - service krb5kdc stop - service kadmin stop - sed -i -e "s/EXAMPLE\.COM/$KERBEROS_REALM_REGEX/" /var/kerberos/krb5kdc/kdc.conf - yum install -y expect + if which dpkg &> /dev/null; then + KERBEROS_HOME=/etc/krb5kdc + KERBEROS_SERVICE_KDC=krb5-kdc + KERBEROS_SERVICE_ADMIN=krb5-admin-server + export DEBIAN_FRONTEND=noninteractive + retry_apt_get update + retry_apt_get -q -y install expect + elif which rpm &> /dev/null; then + KERBEROS_HOME=/var/kerberos/krb5kdc + KERBEROS_SERVICE_KDC=krb5kdc + KERBEROS_SERVICE_ADMIN=kadmin + retry_yum install -y expect + fi + service $KERBEROS_SERVICE_KDC stop + service $KERBEROS_SERVICE_ADMIN stop + sed -i -e "s/EXAMPLE\.COM/$KERBEROS_REALM_REGEX/" $KERBEROS_HOME/kdc.conf cat >> run_kdb5_util <<END #!/usr/bin/expect -f set timeout 5000 @@ -35,7 +47,11 @@ END chmod +x run_kdb5_util ./run_kdb5_util rm -rf run_kdb5_util - sed -i -e "s/EXAMPLE\.COM/$KERBEROS_REALM_REGEX/" /var/kerberos/krb5kdc/kadm5.acl + if [ -f $KERBEROS_HOME/kadm5.acl ]; then + sed -i -e "s/EXAMPLE\.COM/$KERBEROS_REALM_REGEX/" $KERBEROS_HOME/kadm5.acl + else + echo "*/admin@$KERBEROS_REALM *" > $KERBEROS_HOME/kadm5.acl + fi cat >> run_addpinc <<END #!/usr/bin/expect -f set timeout 5000 @@ -52,9 +68,7 @@ END ./run_addpinc $KERBEROS_USER $KERBEROS_USER $KERBEROS_REALM ./run_addpinc hdfs hdfs $KERBEROS_REALM rm -rf ./run_addpinc - service krb5kdc start - service kadmin start - chkconfig krb5kdc on - chkconfig kadmin on + service $KERBEROS_SERVICE_KDC start + service $KERBEROS_SERVICE_ADMIN start CONFIGURE_KERBEROS_DONE=1 } http://git-wip-us.apache.org/repos/asf/whirr/blob/a7863d95/services/kerberos/src/main/resources/functions/install_kerberos_client.sh ---------------------------------------------------------------------- diff --git a/services/kerberos/src/main/resources/functions/install_kerberos_client.sh b/services/kerberos/src/main/resources/functions/install_kerberos_client.sh index 74a4189..9a21ef1 100644 --- a/services/kerberos/src/main/resources/functions/install_kerberos_client.sh +++ b/services/kerberos/src/main/resources/functions/install_kerberos_client.sh @@ -19,18 +19,32 @@ set -x function install_kerberos_client() { if which dpkg &> /dev/null; then - retry_apt_get -y install krb5-libs krb5-workstation unzip + export DEBIAN_FRONTEND=noninteractive + retry_apt_get update + retry_apt_get -q -y install krb5-user krb5-config unzip elif which rpm &> /dev/null; then retry_yum install -y krb5-libs krb5-workstation unzip fi - if [ ! -z "${JDK_INSTALL_URL+xxx}" ]; then - JCE_POLICY_URL=$(dirname $JDK_INSTALL_URL)"/jce_policy-6.zip" - wget $JCE_POLICY_URL - if [ -f jce_policy-6.zip ]; then - unzip jce_policy-6.zip - mkdir -p /tmp/java_security_old - mv /usr/java/default/jre/lib/security/US_export_policy.jar /usr/java/default/jre/lib/security/local_policy.jar /tmp/java_security_old - mv jce/*.jar /usr/java/default/jre/lib/security + if [ -z "${JAVA_HOME+xxx}" ]; then + if which java &> /dev/null; then + JAVA_HOME=$(readlink -f $(which java) | sed "s:/bin/java::") + fi + fi + if [ ! -z "${JAVA_HOME+xxx}" ]; then + JAVA_VERSION_MAJOR=$($JAVA_HOME/bin/java -version 2>&1 | grep "java version" | sed 's/java version \"1\.\([0-9]*\)\..*/\1/') + if [ "$JAVA_VERSION_MAJOR" == "6" ]; then + JAVA_JCE=jce_policy-6.zip + elif [ "$JAVA_VERSION_MAJOR" == "7" ]; then + JAVA_JCE=UnlimitedJCEPolicyJDK7.zip + fi + if [ ! -z "${JAVA_JCE+xxx}" ]; then + if [ ! -z "${JDK_INSTALL_URL+xxx}" ]; then + wget -nv $(dirname $JDK_INSTALL_URL)"/"$JAVA_JCE + if [ -f $JAVA_JCE ]; then + unzip -q -o -j $JAVA_JCE -d $JAVA_HOME/jre/lib/security + rm $JAVA_JCE + fi + fi fi fi } http://git-wip-us.apache.org/repos/asf/whirr/blob/a7863d95/services/kerberos/src/main/resources/functions/install_kerberos_server.sh ---------------------------------------------------------------------- diff --git a/services/kerberos/src/main/resources/functions/install_kerberos_server.sh b/services/kerberos/src/main/resources/functions/install_kerberos_server.sh index 7a9b86c..0cf22ab 100644 --- a/services/kerberos/src/main/resources/functions/install_kerberos_server.sh +++ b/services/kerberos/src/main/resources/functions/install_kerberos_server.sh @@ -19,7 +19,9 @@ set -x function install_kerberos_server() { if which dpkg &> /dev/null; then - retry_apt_get -y install krb5-server + export DEBIAN_FRONTEND=noninteractive + retry_apt_get update + retry_apt_get -q -y install krb5-kdc krb5-admin-server elif which rpm &> /dev/null; then retry_yum install -y krb5-server fi http://git-wip-us.apache.org/repos/asf/whirr/blob/a7863d95/services/kerberos/src/test/java/org/apache/whirr/service/kerberos/KerberosServerDryRunTest.java ---------------------------------------------------------------------- diff --git a/services/kerberos/src/test/java/org/apache/whirr/service/kerberos/KerberosServerDryRunTest.java b/services/kerberos/src/test/java/org/apache/whirr/service/kerberos/KerberosServerDryRunTest.java index 5a80478..21b8531 100644 --- a/services/kerberos/src/test/java/org/apache/whirr/service/kerberos/KerberosServerDryRunTest.java +++ b/services/kerberos/src/test/java/org/apache/whirr/service/kerberos/KerberosServerDryRunTest.java @@ -23,8 +23,11 @@ import static com.google.common.base.Predicates.containsPattern; import java.util.Set; +import junit.framework.AssertionFailedError; + import org.apache.whirr.service.BaseServiceDryRunTest; import org.apache.whirr.service.DryRunModule.DryRun; +import org.junit.Assert; import org.junit.Test; import com.google.common.base.Predicate; @@ -57,4 +60,34 @@ public class KerberosServerDryRunTest extends BaseServiceDryRunTest { assertScriptPredicateOnPhase(dryRun, "configure", configurePredicate()); } + @Test + public void testJavaInstalled() throws Exception { + DryRun dryRun = launchWithClusterSpec(newClusterSpecForProperties(ImmutableMap.of("whirr.instance-templates", "1 " + + KerberosServerHandler.ROLE + "+" + KerberosClientHandler.ROLE))); + assertScriptPredicateOnPhase(dryRun, "bootstrap", bootstrapPredicate()); + assertScriptPredicateOnPhase(dryRun, "bootstrap", containsPattern("install_openjdk")); + } + + @Test + public void testJavaInstalledFalse() throws Exception { + DryRun dryRun = launchWithClusterSpec(newClusterSpecForProperties(ImmutableMap.of("whirr.instance-templates", "1 " + + KerberosServerHandler.ROLE + "+" + KerberosClientHandler.ROLE, "whirr.env.jdk_installed", "false"))); + assertScriptPredicateOnPhase(dryRun, "bootstrap", bootstrapPredicate()); + assertScriptPredicateOnPhase(dryRun, "bootstrap", containsPattern("install_openjdk")); + } + + @Test + public void testJavaInstalledTrue() throws Exception { + DryRun dryRun = launchWithClusterSpec(newClusterSpecForProperties(ImmutableMap.of("whirr.instance-templates", "1 " + + KerberosServerHandler.ROLE + "+" + KerberosClientHandler.ROLE, "whirr.env.jdk_installed", "true"))); + assertScriptPredicateOnPhase(dryRun, "bootstrap", bootstrapPredicate()); + boolean assertFailed = false; + try { + assertScriptPredicateOnPhase(dryRun, "bootstrap", containsPattern("install_openjdk")); + } catch (AssertionFailedError assertionFailedError) { + assertFailed = true; + } + Assert.assertTrue(assertFailed); + } + }