ELIOT-UI Backend Code Added 18/1918/2
authorAbhijit Dasgupta <abhijit.das.gupta@huawei.com>
Tue, 5 Nov 2019 10:00:49 +0000 (10:00 +0000)
committerAbhijit Dasgupta <abhijit.das.gupta@huawei.com>
Mon, 2 Dec 2019 11:05:42 +0000 (11:05 +0000)
ELIOT-UI Backend Spring Boot Application using Java Kubernetes Client
Code to interact with Kubernetes API-Server

First Release supporting below Features
1. Display Nodes in ELIOT Cluster
2. Display Services in ELIOT Cluster
3. Display PODS running in ELIOT Cluster

Added Server Port in application.properties file

Signed-off-by: Abhijit Dasgupta <abhijit.das.gupta@huawei.com>
Change-Id: Icf8e1e03a3882b83710a4e989b89e0f797765a7d

15 files changed:
blueprints/common/eliot-ui/be/src/eliotk8sclient/.mvn/wrapper/MavenWrapperDownloader.java [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/.mvn/wrapper/maven-wrapper.properties [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/mvnw [new file with mode: 0755]
blueprints/common/eliot-ui/be/src/eliotk8sclient/mvnw.cmd [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/pom.xml [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/Eliotk8sclientApplication.java [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/controller/NodeController.java [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/EliotNodes.java [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/EliotPods.java [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/EliotServices.java [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/Node.java [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/Pod.java [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/Service.java [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/resources/application.properties [new file with mode: 0644]
blueprints/common/eliot-ui/be/src/eliotk8sclient/src/test/java/com/eliot/eliotbe/eliotk8sclient/Eliotk8sclientApplicationTests.java [new file with mode: 0644]

diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/.mvn/wrapper/MavenWrapperDownloader.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/.mvn/wrapper/MavenWrapperDownloader.java
new file mode 100644 (file)
index 0000000..72308aa
--- /dev/null
@@ -0,0 +1,114 @@
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements.  See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership.  The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License.  You may obtain a copy of the License at
+
+  https://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied.  See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.net.URL;
+import java.nio.channels.Channels;
+import java.nio.channels.ReadableByteChannel;
+import java.util.Properties;
+
+public class MavenWrapperDownloader {
+
+    /**
+     * Default URL to download the maven-wrapper.jar from, if no 'downloadUrl' is provided.
+     */
+    private static final String DEFAULT_DOWNLOAD_URL =
+            "https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar";
+
+    /**
+     * Path to the maven-wrapper.properties file, which might contain a downloadUrl property to
+     * use instead of the default one.
+     */
+    private static final String MAVEN_WRAPPER_PROPERTIES_PATH =
+            ".mvn/wrapper/maven-wrapper.properties";
+
+    /**
+     * Path where the maven-wrapper.jar will be saved to.
+     */
+    private static final String MAVEN_WRAPPER_JAR_PATH =
+            ".mvn/wrapper/maven-wrapper.jar";
+
+    /**
+     * Name of the property which should be used to override the default download url for the wrapper.
+     */
+    private static final String PROPERTY_NAME_WRAPPER_URL = "wrapperUrl";
+
+    public static void main(String args[]) {
+        System.out.println("- Downloader started");
+        File baseDirectory = new File(args[0]);
+        System.out.println("- Using base directory: " + baseDirectory.getAbsolutePath());
+
+        // If the maven-wrapper.properties exists, read it and check if it contains a custom
+        // wrapperUrl parameter.
+        File mavenWrapperPropertyFile = new File(baseDirectory, MAVEN_WRAPPER_PROPERTIES_PATH);
+        String url = DEFAULT_DOWNLOAD_URL;
+        if(mavenWrapperPropertyFile.exists()) {
+            FileInputStream mavenWrapperPropertyFileInputStream = null;
+            try {
+                mavenWrapperPropertyFileInputStream = new FileInputStream(mavenWrapperPropertyFile);
+                Properties mavenWrapperProperties = new Properties();
+                mavenWrapperProperties.load(mavenWrapperPropertyFileInputStream);
+                url = mavenWrapperProperties.getProperty(PROPERTY_NAME_WRAPPER_URL, url);
+            } catch (IOException e) {
+                System.out.println("- ERROR loading '" + MAVEN_WRAPPER_PROPERTIES_PATH + "'");
+            } finally {
+                try {
+                    if(mavenWrapperPropertyFileInputStream != null) {
+                        mavenWrapperPropertyFileInputStream.close();
+                    }
+                } catch (IOException e) {
+                    // Ignore ...
+                }
+            }
+        }
+        System.out.println("- Downloading from: : " + url);
+
+        File outputFile = new File(baseDirectory.getAbsolutePath(), MAVEN_WRAPPER_JAR_PATH);
+        if(!outputFile.getParentFile().exists()) {
+            if(!outputFile.getParentFile().mkdirs()) {
+                System.out.println(
+                        "- ERROR creating output direcrory '" + outputFile.getParentFile().getAbsolutePath() + "'");
+            }
+        }
+        System.out.println("- Downloading to: " + outputFile.getAbsolutePath());
+        try {
+            downloadFileFromURL(url, outputFile);
+            System.out.println("Done");
+            System.exit(0);
+        } catch (Throwable e) {
+            System.out.println("- Error downloading");
+            e.printStackTrace();
+            System.exit(1);
+        }
+    }
+
+    private static void downloadFileFromURL(String urlString, File destination) throws Exception {
+        URL website = new URL(urlString);
+        ReadableByteChannel rbc;
+        rbc = Channels.newChannel(website.openStream());
+        FileOutputStream fos = new FileOutputStream(destination);
+        fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
+        fos.close();
+        rbc.close();
+    }
+
+}
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/.mvn/wrapper/maven-wrapper.properties b/blueprints/common/eliot-ui/be/src/eliotk8sclient/.mvn/wrapper/maven-wrapper.properties
new file mode 100644 (file)
index 0000000..cd0d451
--- /dev/null
@@ -0,0 +1 @@
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.6.0/apache-maven-3.6.0-bin.zip
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/mvnw b/blueprints/common/eliot-ui/be/src/eliotk8sclient/mvnw
new file mode 100755 (executable)
index 0000000..8b9da3b
--- /dev/null
@@ -0,0 +1,286 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#    https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Maven2 Start Up Batch script
+#
+# Required ENV vars:
+# ------------------
+#   JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+#   M2_HOME - location of maven2's installed home dir
+#   MAVEN_OPTS - parameters passed to the Java VM when running Maven
+#     e.g. to debug Maven itself, use
+#       set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+#   MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+  if [ -f /etc/mavenrc ] ; then
+    . /etc/mavenrc
+  fi
+
+  if [ -f "$HOME/.mavenrc" ] ; then
+    . "$HOME/.mavenrc"
+  fi
+
+fi
+
+# OS specific support.  $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "`uname`" in
+  CYGWIN*) cygwin=true ;;
+  MINGW*) mingw=true;;
+  Darwin*) darwin=true
+    # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+    # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+    if [ -z "$JAVA_HOME" ]; then
+      if [ -x "/usr/libexec/java_home" ]; then
+        export JAVA_HOME="`/usr/libexec/java_home`"
+      else
+        export JAVA_HOME="/Library/Java/Home"
+      fi
+    fi
+    ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+  if [ -r /etc/gentoo-release ] ; then
+    JAVA_HOME=`java-config --jre-home`
+  fi
+fi
+
+if [ -z "$M2_HOME" ] ; then
+  ## resolve links - $0 may be a link to maven's home
+  PRG="$0"
+
+  # need this for relative symlinks
+  while [ -h "$PRG" ] ; do
+    ls=`ls -ld "$PRG"`
+    link=`expr "$ls" : '.*-> \(.*\)$'`
+    if expr "$link" : '/.*' > /dev/null; then
+      PRG="$link"
+    else
+      PRG="`dirname "$PRG"`/$link"
+    fi
+  done
+
+  saveddir=`pwd`
+
+  M2_HOME=`dirname "$PRG"`/..
+
+  # make it fully qualified
+  M2_HOME=`cd "$M2_HOME" && pwd`
+
+  cd "$saveddir"
+  # echo Using m2 at $M2_HOME
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --unix "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --unix "$CLASSPATH"`
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME="`(cd "$M2_HOME"; pwd)`"
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME="`(cd "$JAVA_HOME"; pwd)`"
+  # TODO classpath?
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+  javaExecutable="`which javac`"
+  if [ -n "$javaExecutable" ] && ! [ "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ]; then
+    # readlink(1) is not available as standard on Solaris 10.
+    readLink=`which readlink`
+    if [ ! `expr "$readLink" : '\([^ ]*\)'` = "no" ]; then
+      if $darwin ; then
+        javaHome="`dirname \"$javaExecutable\"`"
+        javaExecutable="`cd \"$javaHome\" && pwd -P`/javac"
+      else
+        javaExecutable="`readlink -f \"$javaExecutable\"`"
+      fi
+      javaHome="`dirname \"$javaExecutable\"`"
+      javaHome=`expr "$javaHome" : '\(.*\)/bin'`
+      JAVA_HOME="$javaHome"
+      export JAVA_HOME
+    fi
+  fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+  if [ -n "$JAVA_HOME"  ] ; then
+    if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+      # IBM's JDK on AIX uses strange locations for the executables
+      JAVACMD="$JAVA_HOME/jre/sh/java"
+    else
+      JAVACMD="$JAVA_HOME/bin/java"
+    fi
+  else
+    JAVACMD="`which java`"
+  fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+  echo "Error: JAVA_HOME is not defined correctly." >&2
+  echo "  We cannot execute $JAVACMD" >&2
+  exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+  echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+CLASSWORLDS_LAUNCHER=org.codehaus.plexus.classworlds.launcher.Launcher
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+
+  if [ -z "$1" ]
+  then
+    echo "Path not specified to find_maven_basedir"
+    return 1
+  fi
+
+  basedir="$1"
+  wdir="$1"
+  while [ "$wdir" != '/' ] ; do
+    if [ -d "$wdir"/.mvn ] ; then
+      basedir=$wdir
+      break
+    fi
+    # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+    if [ -d "${wdir}" ]; then
+      wdir=`cd "$wdir/.."; pwd`
+    fi
+    # end of workaround
+  done
+  echo "${basedir}"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+  if [ -f "$1" ]; then
+    echo "$(tr -s '\n' ' ' < "$1")"
+  fi
+}
+
+BASE_DIR=`find_maven_basedir "$(pwd)"`
+if [ -z "$BASE_DIR" ]; then
+  exit 1;
+fi
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+if [ -r "$BASE_DIR/.mvn/wrapper/maven-wrapper.jar" ]; then
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Found .mvn/wrapper/maven-wrapper.jar"
+    fi
+else
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Couldn't find .mvn/wrapper/maven-wrapper.jar, downloading it ..."
+    fi
+    jarUrl="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
+    while IFS="=" read key value; do
+      case "$key" in (wrapperUrl) jarUrl="$value"; break ;;
+      esac
+    done < "$BASE_DIR/.mvn/wrapper/maven-wrapper.properties"
+    if [ "$MVNW_VERBOSE" = true ]; then
+      echo "Downloading from: $jarUrl"
+    fi
+    wrapperJarPath="$BASE_DIR/.mvn/wrapper/maven-wrapper.jar"
+
+    if command -v wget > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found wget ... using wget"
+        fi
+        wget "$jarUrl" -O "$wrapperJarPath"
+    elif command -v curl > /dev/null; then
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Found curl ... using curl"
+        fi
+        curl -o "$wrapperJarPath" "$jarUrl"
+    else
+        if [ "$MVNW_VERBOSE" = true ]; then
+          echo "Falling back to using Java to download"
+        fi
+        javaClass="$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.java"
+        if [ -e "$javaClass" ]; then
+            if [ ! -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Compiling MavenWrapperDownloader.java ..."
+                fi
+                # Compiling the Java class
+                ("$JAVA_HOME/bin/javac" "$javaClass")
+            fi
+            if [ -e "$BASE_DIR/.mvn/wrapper/MavenWrapperDownloader.class" ]; then
+                # Running the downloader
+                if [ "$MVNW_VERBOSE" = true ]; then
+                  echo " - Running MavenWrapperDownloader.java ..."
+                fi
+                ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$MAVEN_PROJECTBASEDIR")
+            fi
+        fi
+    fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+export MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}
+if [ "$MVNW_VERBOSE" = true ]; then
+  echo $MAVEN_PROJECTBASEDIR
+fi
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+  [ -n "$M2_HOME" ] &&
+    M2_HOME=`cygpath --path --windows "$M2_HOME"`
+  [ -n "$JAVA_HOME" ] &&
+    JAVA_HOME=`cygpath --path --windows "$JAVA_HOME"`
+  [ -n "$CLASSPATH" ] &&
+    CLASSPATH=`cygpath --path --windows "$CLASSPATH"`
+  [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+    MAVEN_PROJECTBASEDIR=`cygpath --path --windows "$MAVEN_PROJECTBASEDIR"`
+fi
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+exec "$JAVACMD" \
+  $MAVEN_OPTS \
+  -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+  "-Dmaven.home=${M2_HOME}" "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+  ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/mvnw.cmd b/blueprints/common/eliot-ui/be/src/eliotk8sclient/mvnw.cmd
new file mode 100644 (file)
index 0000000..fef5a8f
--- /dev/null
@@ -0,0 +1,161 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements.  See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership.  The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License.  You may obtain a copy of the License at
+@REM
+@REM    https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied.  See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Maven2 Start Up Batch script
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM M2_HOME - location of maven2's installed home dir
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a key stroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM     e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing my setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on"  echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_pre.bat" call "%HOME%\mavenrc_pre.bat"
+if exist "%HOME%\mavenrc_pre.cmd" call "%HOME%\mavenrc_pre.cmd"
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set DOWNLOAD_URL="https://repo.maven.apache.org/maven2/io/takari/maven-wrapper/0.4.2/maven-wrapper-0.4.2.jar"
+FOR /F "tokens=1,2 delims==" %%A IN (%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties) DO (
+       IF "%%A"=="wrapperUrl" SET DOWNLOAD_URL=%%B 
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+    echo Found %WRAPPER_JAR%
+) else (
+    echo Couldn't find %WRAPPER_JAR%, downloading it ...
+       echo Downloading from: %DOWNLOAD_URL%
+    powershell -Command "(New-Object Net.WebClient).DownloadFile('%DOWNLOAD_URL%', '%WRAPPER_JAR%')"
+    echo Finished downloading %WRAPPER_JAR%
+)
+@REM End of extension
+
+%MAVEN_JAVA_EXE% %JVM_CONFIG_MAVEN_PROPS% %MAVEN_OPTS% %MAVEN_DEBUG_OPTS% -classpath %WRAPPER_JAR% "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%HOME%\mavenrc_post.bat" call "%HOME%\mavenrc_post.bat"
+if exist "%HOME%\mavenrc_post.cmd" call "%HOME%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%" == "on" pause
+
+if "%MAVEN_TERMINATE_CMD%" == "on" exit %ERROR_CODE%
+
+exit /B %ERROR_CODE%
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/pom.xml b/blueprints/common/eliot-ui/be/src/eliotk8sclient/pom.xml
new file mode 100644 (file)
index 0000000..66d3f19
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
+       <modelVersion>4.0.0</modelVersion>
+       <parent>
+               <groupId>org.springframework.boot</groupId>
+               <artifactId>spring-boot-starter-parent</artifactId>
+               <version>2.1.8.RELEASE</version>
+               <relativePath/> <!-- lookup parent from repository -->
+       </parent>
+       <groupId>com.eliot.eliotbe</groupId>
+       <artifactId>eliotk8sclient</artifactId>
+       <version>0.0.1</version>
+       <name>eliotk8sclient</name>
+       <description>eliot backend code for kubernetes client</description>
+
+       <properties>
+               <java.version>1.8</java.version>
+       </properties>
+
+       <dependencies>
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-web</artifactId>
+               </dependency>
+
+               <dependency>
+                       <groupId>org.springframework.boot</groupId>
+                       <artifactId>spring-boot-starter-test</artifactId>
+                       <scope>test</scope>
+               </dependency>
+               <dependency>
+                       <groupId>io.kubernetes</groupId>
+                       <artifactId>client-java</artifactId>
+                       <version>5.0.0</version>
+                       <scope>compile</scope>
+               </dependency>
+       </dependencies>
+
+       <build>
+               <plugins>
+                       <plugin>
+                               <groupId>org.springframework.boot</groupId>
+                               <artifactId>spring-boot-maven-plugin</artifactId>
+                       </plugin>
+               </plugins>
+       </build>
+
+</project>
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/Eliotk8sclientApplication.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/Eliotk8sclientApplication.java
new file mode 100644 (file)
index 0000000..017a4b4
--- /dev/null
@@ -0,0 +1,35 @@
+package com.eliot.eliotbe.eliotk8sclient;
+
+
+import io.kubernetes.client.Configuration;
+import io.kubernetes.client.util.ClientBuilder;
+import io.kubernetes.client.util.KubeConfig;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import io.kubernetes.client.ApiClient;
+import org.springframework.context.annotation.Bean;
+import java.io.FileReader;
+import java.io.IOException;
+
+
+@SpringBootApplication
+public class Eliotk8sclientApplication {
+
+       @Bean
+       public static void apiclient() throws IOException {
+               // file path to your KubeConfig
+        String homePath = System.getenv("HOME");
+               String kubeConfigPath = homePath + "/.kube/config";
+
+               // loading the out-of-cluster config, a kubeconfig from file-system
+               ApiClient client =
+                               ClientBuilder.kubeconfig(KubeConfig.loadKubeConfig(new FileReader(kubeConfigPath))).build();
+
+               // set the global default api-client to the in-cluster one from above
+               Configuration.setDefaultApiClient(client);
+       }
+       public static void main(String[] args) {
+               SpringApplication.run(Eliotk8sclientApplication.class, args);
+       }
+
+}
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/controller/NodeController.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/controller/NodeController.java
new file mode 100644 (file)
index 0000000..850cc72
--- /dev/null
@@ -0,0 +1,120 @@
+package com.eliot.eliotbe.eliotk8sclient.controller;
+
+import com.eliot.eliotbe.eliotk8sclient.model.*;
+import io.kubernetes.client.ApiException;
+import io.kubernetes.client.apis.CoreV1Api;
+import io.kubernetes.client.models.*;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+
+import java.util.ArrayList;
+import java.util.List;
+
+@CrossOrigin
+@RestController
+public class NodeController {
+
+    //API To fetch the Node Details in the ELIOT Cluster.
+    @GetMapping(path = "/getnodes")
+    public ResponseEntity<EliotNodes> getNodeList() throws ApiException {
+        CoreV1Api api = new CoreV1Api();
+        V1NodeList eliotNodes = api.listNode(false,null,null,null,null,50,null,360,false);
+        Node nodeDetails;
+
+        EliotNodes nodeDetailList = new EliotNodes();
+        List <Node> nodeListElement = new ArrayList<>();
+
+        for(V1Node item: eliotNodes.getItems())
+        {
+            nodeDetails = new Node();
+            nodeDetails.setNodeName(item.getMetadata().getName());
+            nodeDetails.setNodeStatus(item.getStatus().getConditions().get(3).getStatus());
+            if (item.getMetadata().getLabels().containsKey("node-role.kubernetes.io/master"))
+                nodeDetails.setNodeRole("Master");
+            else
+                nodeDetails.setNodeRole("Worker");
+            nodeDetails.setAge(item.getMetadata().getCreationTimestamp().toString());
+            nodeDetails.setVersion(item.getStatus().getNodeInfo().getKubeletVersion());
+            nodeDetails.setInternalIp(item.getStatus().getAddresses().get(0).getAddress());
+            nodeDetails.setExternalIp("null");
+            nodeDetails.setKernel(item.getStatus().getNodeInfo().getKernelVersion());
+            nodeDetails.setOsImage(item.getStatus().getNodeInfo().getOsImage());
+            nodeDetails.setContainerRuntime(item.getStatus().getNodeInfo().getContainerRuntimeVersion());
+
+            nodeListElement.add(nodeDetails);
+
+        }
+
+        nodeDetailList.setEliotNodes(nodeListElement);
+        return new ResponseEntity<>(nodeDetailList, HttpStatus.OK);
+    }
+
+    @GetMapping(path = "/getpods")
+    public ResponseEntity<EliotPods> getAllPodList() throws ApiException {
+        Pod podDetail;
+
+        // the CoreV1Api loads default api-client from global configuration.
+        CoreV1Api api = new CoreV1Api();
+
+        // invokes the CoreV1Api client
+
+        V1PodList eliotPods = api.listPodForAllNamespaces(null,null,
+                null,null,null,null,null,null,null);
+
+        EliotPods podDetailList = new EliotPods();
+        List<Pod> podlistElement = new ArrayList<>();
+
+
+        for (V1Pod item : eliotPods.getItems()) {
+            podDetail = new Pod();
+            podDetail.setNamespace(item.getMetadata().getNamespace());
+            podDetail.setName(item.getMetadata().getName());
+            podDetail.setStatus(item.getStatus().getPhase());
+            podDetail.setIp(item.getStatus().getPodIP());
+            podDetail.setNode(item.getSpec().getNodeName());
+            podDetail.setReadiness("null");
+            podlistElement.add(podDetail);
+        }
+
+        podDetailList.setEliotPods(podlistElement);
+        return new ResponseEntity<>(podDetailList, HttpStatus.OK);
+    }
+
+
+    @GetMapping(path = "/getservices")
+    public ResponseEntity<EliotServices> getServiceList() throws ApiException{
+
+        CoreV1Api api = new CoreV1Api();
+        Service serviceDetail;
+        //JSON Object for ELIOT Services being send in Response.
+        EliotServices svcDetailList = new EliotServices();
+
+        //List of Services running on ELIOT K8S Cluster
+        List<Service> listOfServiceElement = new ArrayList<>();
+        V1ServiceList eliotServices = api.listServiceForAllNamespaces(null, null, false, null,
+                    50, null, null, 360, false);
+
+            for (V1Service item : eliotServices.getItems()) {
+                serviceDetail = new Service();
+                serviceDetail.setServiceName(item.getMetadata().getName());
+                serviceDetail.setServiceType(item.getSpec().getType());
+                serviceDetail.setClusterIp(item.getSpec().getClusterIP());
+                //TODO: Need to fetch external IP and set in the parameter.
+                serviceDetail.setExternalIp("none");
+                //TODO : Need to fetch Protocol and set in the Parameter.
+                serviceDetail.setPorts(item.getSpec().getPorts().get(0).getPort().toString());
+                serviceDetail.setAge(item.getMetadata().getCreationTimestamp().toString());
+                serviceDetail.setSelector("");
+
+                listOfServiceElement.add(serviceDetail);
+
+            }
+            svcDetailList.setEliotServices(listOfServiceElement);
+
+
+        return new ResponseEntity<>(svcDetailList,HttpStatus.OK);
+
+    }
+}
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/EliotNodes.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/EliotNodes.java
new file mode 100644 (file)
index 0000000..17bf74a
--- /dev/null
@@ -0,0 +1,19 @@
+package com.eliot.eliotbe.eliotk8sclient.model;
+
+import java.util.List;
+
+public class EliotNodes {
+
+    private List<Node> eliotNodesList;
+
+    public List<Node> getEliotNodes() {
+        return eliotNodesList;
+    }
+
+    public void setEliotNodes(List<Node> eliotNodesList) {
+        this.eliotNodesList = eliotNodesList;
+    }
+
+
+
+}
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/EliotPods.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/EliotPods.java
new file mode 100644 (file)
index 0000000..20e7ff7
--- /dev/null
@@ -0,0 +1,20 @@
+package com.eliot.eliotbe.eliotk8sclient.model;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EliotPods {
+
+    private List<Pod> eliotPodsList;
+
+    public List<Pod> getEliotPods() {
+        if(null == eliotPodsList){
+            eliotPodsList = new ArrayList<>();
+        }
+        return eliotPodsList;
+    }
+
+    public void setEliotPods(List<Pod> eliotPodsList) {
+        this.eliotPodsList = eliotPodsList;
+    }
+}
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/EliotServices.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/EliotServices.java
new file mode 100644 (file)
index 0000000..7c8686e
--- /dev/null
@@ -0,0 +1,17 @@
+package com.eliot.eliotbe.eliotk8sclient.model;
+
+import java.util.List;
+
+public class EliotServices {
+    public List<Service> getEliotServices() {
+        return eliotServicesList;
+    }
+
+    public void setEliotServices(List<Service> eliotServicesList) {
+        this.eliotServicesList = eliotServicesList;
+    }
+
+    private List<Service> eliotServicesList;
+
+
+}
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/Node.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/Node.java
new file mode 100644 (file)
index 0000000..135927a
--- /dev/null
@@ -0,0 +1,97 @@
+package com.eliot.eliotbe.eliotk8sclient.model;
+
+public class Node
+{
+    private String nodeName;
+    private String nodeStatus;
+    private String nodeRole;
+    private String age;
+    private String version;
+    private String internalIp;
+    private String externalIp;
+    private String osImage;
+    private String kernel;
+    private String containerRuntime;
+
+    public String getNodeName() {
+        return nodeName;
+    }
+
+    public void setNodeName(String nodeName) {
+        this.nodeName = nodeName;
+    }
+
+    public String getNodeStatus() {
+        return nodeStatus;
+    }
+
+    public void setNodeStatus(String nodeStatus) {
+        this.nodeStatus = nodeStatus;
+    }
+
+    public String getNodeRole() {
+        return nodeRole;
+    }
+
+    public void setNodeRole(String nodeRole) {
+        this.nodeRole = nodeRole;
+    }
+
+    public String getAge() {
+        return age;
+    }
+
+    public void setAge(String age) {
+        this.age = age;
+    }
+
+    public String getVersion() {
+        return version;
+    }
+
+    public void setVersion(String version) {
+        this.version = version;
+    }
+
+    public String getInternalIp() {
+        return internalIp;
+    }
+
+    public void setInternalIp(String internalIp) {
+        this.internalIp = internalIp;
+    }
+
+    public String getExternalIp() {
+        return externalIp;
+    }
+
+    public void setExternalIp(String externalIp) {
+        this.externalIp = externalIp;
+    }
+
+    public String getOsImage() {
+        return osImage;
+    }
+
+    public void setOsImage(String osImage) {
+        this.osImage = osImage;
+    }
+
+    public String getKernel() {
+        return kernel;
+    }
+
+    public void setKernel(String kernel) {
+        this.kernel = kernel;
+    }
+
+    public String getContainerRuntime() {
+        return containerRuntime;
+    }
+
+    public void setContainerRuntime(String containerRuntime) {
+        this.containerRuntime = containerRuntime;
+    }
+
+}
+
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/Pod.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/Pod.java
new file mode 100644 (file)
index 0000000..832cd8c
--- /dev/null
@@ -0,0 +1,98 @@
+package com.eliot.eliotbe.eliotk8sclient.model;
+
+public class Pod {
+    private String namespace;
+    private String name;
+    private String ready;
+    private String status;
+    private String restarts;
+    private String age;
+    private String ip;
+    private String node;
+    private String nominated;
+    private String readiness;
+
+
+
+    public String getNamespace() {
+        return namespace;
+    }
+
+    public void setNamespace(String namespace) {
+        this.namespace = namespace;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getReady() {
+        return ready;
+    }
+
+    public void setReady(String ready) {
+        this.ready = ready;
+    }
+
+    public String getStatus() {
+        return status;
+    }
+
+    public void setStatus(String status) {
+        this.status = status;
+    }
+
+    public String getRestarts() {
+        return restarts;
+    }
+
+    public void setRestarts(String restarts) {
+        this.restarts = restarts;
+    }
+
+    public String getAge() {
+        return age;
+    }
+
+    public void setAge(String age) {
+        this.age = age;
+    }
+
+    public String getIp() {
+        return ip;
+    }
+
+    public void setIp(String ip) {
+        this.ip = ip;
+    }
+
+    public String getNode() {
+        return node;
+    }
+
+    public void setNode(String node) {
+        this.node = node;
+    }
+
+    public String getNominated() {
+        return nominated;
+    }
+
+    public void setNominated(String nominated) {
+        this.nominated = nominated;
+    }
+
+    public String getReadiness() {
+        return readiness;
+    }
+
+    public void setReadiness(String readiness) {
+        this.readiness = readiness;
+    }
+
+
+}
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/Service.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/java/com/eliot/eliotbe/eliotk8sclient/model/Service.java
new file mode 100644 (file)
index 0000000..5b2c274
--- /dev/null
@@ -0,0 +1,69 @@
+package com.eliot.eliotbe.eliotk8sclient.model;
+
+public class Service {
+
+    private String serviceName;
+    private String serviceType;
+    private String clusterIp;
+    private String externalIp;
+    private String ports;
+    private String age;
+    private String selector;
+
+
+    public String getServiceName() {
+        return serviceName;
+    }
+
+    public void setServiceName(String serviceName) {
+        this.serviceName = serviceName;
+    }
+
+    public String getServiceType() {
+        return serviceType;
+    }
+
+    public void setServiceType(String serviceType) {
+        this.serviceType = serviceType;
+    }
+
+    public String getClusterIp() {
+        return clusterIp;
+    }
+
+    public void setClusterIp(String clusterIp) {
+        this.clusterIp = clusterIp;
+    }
+
+    public String getExternalIp() {
+        return externalIp;
+    }
+
+    public void setExternalIp(String externalIp) {
+        this.externalIp = externalIp;
+    }
+
+    public String getPorts() {
+        return ports;
+    }
+
+    public void setPorts(String ports) {
+        this.ports = ports;
+    }
+
+    public String getAge() {
+        return age;
+    }
+
+    public void setAge(String age) {
+        this.age = age;
+    }
+
+    public String getSelector() {
+        return selector;
+    }
+
+    public void setSelector(String selector) {
+        this.selector = selector;
+    }
+}
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/resources/application.properties b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/main/resources/application.properties
new file mode 100644 (file)
index 0000000..c1a46e5
--- /dev/null
@@ -0,0 +1 @@
+server.port = 8080
diff --git a/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/test/java/com/eliot/eliotbe/eliotk8sclient/Eliotk8sclientApplicationTests.java b/blueprints/common/eliot-ui/be/src/eliotk8sclient/src/test/java/com/eliot/eliotbe/eliotk8sclient/Eliotk8sclientApplicationTests.java
new file mode 100644 (file)
index 0000000..349a791
--- /dev/null
@@ -0,0 +1,16 @@
+package com.eliot.eliotbe.eliotk8sclient;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+@RunWith(SpringRunner.class)
+@SpringBootTest
+public class Eliotk8sclientApplicationTests {
+
+       @Test
+       public void contextLoads() {
+       }
+
+}