You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2017/05/04 11:32:36 UTC

[32/60] [abbrv] ignite git commit: IGNITE-4052 Add ability to set up users for MESOS.

IGNITE-4052 Add ability to set up users for MESOS.

Signed-off-by: nikolay_tikhonov <nt...@gridgain.com>


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

Branch: refs/heads/ignite-5075-cacheStart
Commit: 7db2d63efc4e4e8100dd7c7d9ff4be5503b689a2
Parents: 402154c
Author: vadopolski <vo...@gmail.com>
Authored: Thu Apr 27 19:21:01 2017 +0300
Committer: nikolay_tikhonov <nt...@gridgain.com>
Committed: Thu Apr 27 19:21:01 2017 +0300

----------------------------------------------------------------------
 .../apache/ignite/mesos/IgniteFramework.java    | 111 ++++++++++++++-----
 .../ignite/mesos/IgniteSchedulerSelfTest.java   |  39 ++++++-
 2 files changed, 123 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/7db2d63e/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteFramework.java
----------------------------------------------------------------------
diff --git a/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteFramework.java b/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteFramework.java
index 6054302..451d870 100644
--- a/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteFramework.java
+++ b/modules/mesos/src/main/java/org/apache/ignite/mesos/IgniteFramework.java
@@ -38,6 +38,24 @@ public class IgniteFramework {
     /** Framework name. */
     private static final String IGNITE_FRAMEWORK_NAME = "Ignite";
 
+    /** MESOS system environment name */
+    private static final String MESOS_USER_NAME = "MESOS_USER";
+
+    /** MESOS system environment role */
+    private static final String MESOS_ROLE = "MESOS_ROLE";
+
+    /** */
+    private static final String MESOS_AUTHENTICATE = "MESOS_AUTHENTICATE";
+
+    /** */
+    private static final String DEFAULT_PRINCIPAL = "DEFAULT_PRINCIPAL";
+
+    /** */
+    private static final String DEFAULT_SECRET = "DEFAULT_SECRET";
+
+    /** */
+    private static final String MESOS_CHECKPOINT = "MESOS_CHECKPOINT";
+
     /**
      * Main methods has only one optional parameter - path to properties files.
      *
@@ -45,19 +63,7 @@ public class IgniteFramework {
      * @throws Exception If failed.
      */
     public static void main(String[] args) throws Exception {
-        final int frameworkFailoverTimeout = 0;
-
-        // Have Mesos fill in the current user.
-        Protos.FrameworkInfo.Builder frameworkBuilder = Protos.FrameworkInfo.newBuilder()
-            .setName(IGNITE_FRAMEWORK_NAME)
-            .setUser("")
-            .setFailoverTimeout(frameworkFailoverTimeout);
-
-        if (System.getenv("MESOS_CHECKPOINT") != null) {
-            log.info("Enabling checkpoint for the framework");
-
-            frameworkBuilder.setCheckpoint(true);
-        }
+        IgniteFramework igniteFramework = new IgniteFramework();
 
         ClusterProperties clusterProps = ClusterProperties.from(args.length >= 1 ? args[0] : null);
 
@@ -82,36 +88,31 @@ public class IgniteFramework {
         // Create the driver.
         MesosSchedulerDriver driver;
 
-        if (System.getenv("MESOS_AUTHENTICATE") != null) {
+        if (System.getenv(MESOS_AUTHENTICATE) != null) {
             log.info("Enabling authentication for the framework");
 
-            if (System.getenv("DEFAULT_PRINCIPAL") == null) {
+            if (System.getenv(DEFAULT_PRINCIPAL) == null) {
                 log.log(Level.SEVERE, "Expecting authentication principal in the environment");
 
                 System.exit(1);
             }
 
-            if (System.getenv("DEFAULT_SECRET") == null) {
+            if (System.getenv(DEFAULT_SECRET) == null) {
                 log.log(Level.SEVERE, "Expecting authentication secret in the environment");
 
                 System.exit(1);
             }
 
             Protos.Credential cred = Protos.Credential.newBuilder()
-                .setPrincipal(System.getenv("DEFAULT_PRINCIPAL"))
-                .setSecret(ByteString.copyFrom(System.getenv("DEFAULT_SECRET").getBytes()))
+                .setPrincipal(System.getenv(DEFAULT_PRINCIPAL))
+                .setSecret(ByteString.copyFrom(System.getenv(DEFAULT_SECRET).getBytes()))
                 .build();
 
-            frameworkBuilder.setPrincipal(System.getenv("DEFAULT_PRINCIPAL"));
-
-            driver = new MesosSchedulerDriver(scheduler, frameworkBuilder.build(), clusterProps.masterUrl(),
+            driver = new MesosSchedulerDriver(scheduler, igniteFramework.getFrameworkInfo(), clusterProps.masterUrl(),
                 cred);
         }
-        else {
-            frameworkBuilder.setPrincipal("ignite-framework-java");
-
-            driver = new MesosSchedulerDriver(scheduler, frameworkBuilder.build(), clusterProps.masterUrl());
-        }
+        else
+            driver = new MesosSchedulerDriver(scheduler, igniteFramework.getFrameworkInfo(), clusterProps.masterUrl());
 
         int status = driver.run() == Protos.Status.DRIVER_STOPPED ? 0 : 1;
 
@@ -122,4 +123,62 @@ public class IgniteFramework {
 
         System.exit(status);
     }
+
+    /**
+     * @return Mesos Protos FrameworkInfo.
+     */
+    public Protos.FrameworkInfo getFrameworkInfo() throws Exception {
+        final int frameworkFailoverTimeout = 0;
+
+        Protos.FrameworkInfo.Builder frameworkBuilder = Protos.FrameworkInfo.newBuilder()
+            .setName(IGNITE_FRAMEWORK_NAME)
+            .setUser(getUser())
+            .setRole(getRole())
+            .setFailoverTimeout(frameworkFailoverTimeout);
+
+        if (System.getenv(MESOS_CHECKPOINT) != null) {
+            log.info("Enabling checkpoint for the framework");
+
+            frameworkBuilder.setCheckpoint(true);
+        }
+
+        if (System.getenv(MESOS_AUTHENTICATE) != null)
+            frameworkBuilder.setPrincipal(System.getenv(DEFAULT_PRINCIPAL));
+        else
+            frameworkBuilder.setPrincipal("ignite-framework-java");
+
+        return frameworkBuilder.build();
+    }
+
+    /**
+     * @return Mesos user name value.
+     */
+    protected String getUser() {
+        String userName = System.getenv(MESOS_USER_NAME);
+
+        return userName != null ? userName : "";
+    }
+
+    /**
+     * @return Mesos role value.
+     */
+    protected String getRole() {
+        String mesosRole = System.getenv(MESOS_ROLE);
+
+        return isRoleValid(mesosRole) ? mesosRole : "*";
+    }
+
+    /**
+     * @return Result of Mesos role validation.
+     */
+    static boolean isRoleValid(String mRole) {
+        if (mRole == null || mRole.isEmpty() || mRole.equals(".") || mRole.equals("..") ||
+            mRole.startsWith("-") || mRole.contains("/") || mRole.contains("\\") || mRole.contains(" ")) {
+            log.severe("Provided mesos role is not valid:" + mRole +
+                ". Mesos role should be a valid directory name.");
+
+            return false;
+        }
+        return true;
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/7db2d63e/modules/mesos/src/test/java/org/apache/ignite/mesos/IgniteSchedulerSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/mesos/src/test/java/org/apache/ignite/mesos/IgniteSchedulerSelfTest.java b/modules/mesos/src/test/java/org/apache/ignite/mesos/IgniteSchedulerSelfTest.java
index d4e7ecb..099daa2 100644
--- a/modules/mesos/src/test/java/org/apache/ignite/mesos/IgniteSchedulerSelfTest.java
+++ b/modules/mesos/src/test/java/org/apache/ignite/mesos/IgniteSchedulerSelfTest.java
@@ -17,6 +17,7 @@
 
 package org.apache.ignite.mesos;
 
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
@@ -111,7 +112,6 @@ public class IgniteSchedulerSelfTest extends TestCase {
         assertEquals(offer.getId(), declinedOffer);
     }
 
-
     /**
      * @throws Exception If failed.
      */
@@ -302,6 +302,43 @@ public class IgniteSchedulerSelfTest extends TestCase {
     }
 
     /**
+     * @throws Exception If failed.
+     */
+    public void testIgniteFramework() throws Exception {
+        final String mesosUserValue = "userAAAAA";
+        final String mesosRoleValue = "role1";
+
+        IgniteFramework igniteFramework = new IgniteFramework() {
+            @Override protected String getUser() {
+                return mesosUserValue;
+            }
+
+            @Override protected String getRole() {
+                return mesosRoleValue;
+            }
+        };
+
+        Protos.FrameworkInfo info = igniteFramework.getFrameworkInfo();
+
+        String actualUserValue = info.getUser();
+        String actualRoleValue = info.getRole();
+
+        assertEquals(actualUserValue, mesosUserValue);
+        assertEquals(actualRoleValue, mesosRoleValue);
+    }
+
+    /**
+     * @throws Exception If failed.
+     */
+    public void testMesosRoleValidation() throws Exception {
+        List<String> failedRoleValues = Arrays.asList("", ".", "..", "-testRole",
+            "test/Role", "test\\Role", "test Role", null);
+
+        for (String failedRoleValue : failedRoleValues)
+            assertFalse(IgniteFramework.isRoleValid(failedRoleValue));
+    }
+
+    /**
      * @param resourceType Resource type.
      * @return Value.
      */