Commit 38fa4687 authored by lichenchong's avatar lichenchong
Browse files

Kinetic Admin:

1. Add discover device util.
2. Add discover device script and firmware update script for chassis.
3. Fix a typo in IntegrationTestCase.
4. Refactor KineticAdminCLI
parent e6157019
Loading
Loading
Loading
Loading

bin/discover.sh

0 → 100644
+29 −0
Original line number Diff line number Diff line
#! /usr/bin/env bash

BASE_DIR=`dirname "$0"`/..
BASE_DIR=`cd "$BASE_DIR"; pwd`
#echo "BASE_DIR=$BASE_DIR"

JAVA=""
if [ "$JAVA_HOME" != "" ]; then
    JAVA=$JAVA_HOME/bin/java
else
   echo "JAVA_HOME must be set."
   exit 1
fi

#Set the classpath

if [ "$CLASSPATH" != "" ]; then
   CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar
else
   CLASSPATH=$JAVA_HOME/lib/tools.jar
fi

for f in $BASE_DIR/kinetic-client/target/*.jar; do
   CLASSPATH=${CLASSPATH}:$f
done

#echo "CLASSPATH=$CLASSPATH"

exec "$JAVA" -classpath "$CLASSPATH" com.seagate.kinetic.admin.cli.DiscoverDevice "$@"
 No newline at end of file

bin/firmwareupdate.sh

0 → 100644
+112 −0
Original line number Diff line number Diff line
#!/usr/bin/env bash

BASE_DIR=`dirname "$0"`/..
BASE_DIR=`cd "$BASE_DIR"; pwd`
echo "BASE_DIR=$BASE_DIR"
LOG_DIR="kinetic_log"
SSL_PORT=8443
PORT=8123
DEFAULT_USE_SSL=false
HOME=`cd ~; pwd`
NODES=127.0.0.1
IFS_DEFAULT=##

JAVA=""
if [ "$JAVA_HOME" != "" ]; then
   JAVA=$JAVA_HOME/bin/java
else
   echo "JAVA_HOME must be set."
   exit 1
fi

#Set the classpath

if [ "$CLASSPATH" != "" ]; then
   CLASSPATH=${CLASSPATH}:$JAVA_HOME/lib/tools.jar
else
CLASSPATH=$JAVA_HOME/lib/tools.jar
fi

for f in $BASE_DIR/kinetic-client/target/*.jar; do
   CLASSPATH=${CLASSPATH}:$f
done

printUsage(){
   echo "Usage: sh firmwareupdate.sh [-option]"
   echo "       [-option]"
   echo "            -help                   usage"
   echo "            -url                    firmware path" 
   echo "            -iplist                 ip address for all drives. For instance, 192.168.2.11,192.168.2.12,192.168.2.13 or 192.168.2.11~192.168.2.13"
}

until [ $# -eq 0 ]
do
   case $1 in
   -help)
       printUsage;
       exit 0
       ;;
    -iplist)
      echo "Print iplist \"$2\""
      NODES=$2
      shift
      ;;   
     -url)
      echo "Print url \"$2\""
      URL=$2
      shift
      ;; 
   *)
      echo "Invalid option : $1"
      printUsage;
      exit 1
      ;;
   esac
   shift
done

mkdir -p ${LOG_DIR}

total_nodes=0
IFS=","
node_arr=($NODES)
for node in "${node_arr[@]}"
do
    if [[ $node == *~* ]]
    then
        IFS="~"
        node_ip_from_and_to=($node)
        node_ip_from=${node_ip_from_and_to[0]}
        node_ip_to=${node_ip_from_and_to[1]}
        IFS="."
        node_ip_from_as_array=(${node_ip_from})
        node_ip_to_as_array=(${node_ip_to})
        node_ip_from_last_byte=${node_ip_from_as_array[3]}
        node_ip_to_last_byte=${node_ip_to_as_array[3]}
        curr=${node_ip_from_last_byte}
        IFS=${IFS_DEFAULT}
        while [ $curr -le ${node_ip_to_last_byte} ]
        do
           node_ip=${node_ip_from_as_array[0]}.${node_ip_from_as_array[1]}.${node_ip_from_as_array[2]}.$curr
           echo "start update firmware ${node_ip}..."
           exec "$JAVA" -classpath "$CLASSPATH" -Dkinetic.io.in=true -Dkinetic.io.out=true com.seagate.kinetic.admin.cli.KineticAdminCLI -firmware ${firmware_url} -host ${node_ip} -port ${PORT} -usessl ${DEFAULT_USE_SSL} 1>${LOG_DIR}/${node_ip}_fw.log 2>&1 & 
           total_nodes=$(( total_nodes + 1 )) 
           curr=$(( curr + 1 )) 
        done
    else
        node_ip=${node}
        echo "start update firmware ${node_ip}..."
        exec "$JAVA" -classpath "$CLASSPATH" -Dkinetic.io.in=true -Dkinetic.io.out=true com.seagate.kinetic.admin.cli.KineticAdminCLI -firmware ${URL} -host ${node_ip} -port ${PORT} -usessl ${DEFAULT_USE_SSL} 1>${LOG_DIR}/${node_ip}_fw.log 2>&1 & 
        total_nodes=$(( total_nodes + 1 ))
    fi
done


for((i=0;i<${total_nodes};i++)); 
do
	j=$(echo "$i+1" | bc -l) 
    wait %$j 
done

wait $!
exit 0
 No newline at end of file
+5 −0
Original line number Diff line number Diff line
@@ -210,6 +210,11 @@
			<artifactId>jetty-webapp</artifactId>
			<version>8.1.13.v20130916</version>
		</dependency>
		<dependency>
			<groupId>org.codehaus.jackson</groupId>
			<artifactId>jackson-mapper-asl</artifactId>
			<version>1.9.13</version>
		</dependency>

		<dependency>
			<groupId>${project.groupId}</groupId>
+126 −0
Original line number Diff line number Diff line
package com.seagate.kinetic.admin.cli;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.NetworkInterface;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.codehaus.jackson.JsonNode;
import org.codehaus.jackson.map.ObjectMapper;

public class DiscoverDevice {
    private Set<String> registerWwn = new HashSet<String>();

    public void registerWwn(String wwn) {
        registerWwn.add(wwn);
    }

    public boolean isRegisterWwn(String wwn) {
        return registerWwn.contains(wwn);
    }

    public class DeviceDiscoveryThread extends Thread {
        private MulticastSocket multicastSocket;

        public DeviceDiscoveryThread(MulticastSocket multicastSocket) {
            this.multicastSocket = multicastSocket;
        }

        @Override
        public void run() {
            while (true) {
                try {
                    registerNewKineticDevice();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }

        public List<KineticDevice> registerNewKineticDevice()
                throws IOException {
            List<KineticDevice> newDiscoveriedKineticDevice = new ArrayList<KineticDevice>();
            byte[] b = new byte[64 * 1024];
            DatagramPacket p = new DatagramPacket(b, b.length);
            multicastSocket.receive(p);
            ObjectMapper mapper = new ObjectMapper();
            JsonNode root = mapper.readValue(p.getData(), JsonNode.class);
            String model = root.get("model").asText();
            String wwn = root.get("world_wide_name").asText();
            String serialNumber = root.get("serial_number").asText();
            int port = root.get("port").asInt();
            int tlsPort = root.get("tlsPort").asInt();

            if (!isRegisterWwn(wwn)) {
                registerWwn(wwn);
                JsonNode ifs = root.get("network_interfaces");
                List<String> inet4 = new ArrayList<String>();

                if (!ifs.isArray()) {
                    return newDiscoveriedKineticDevice;
                } else {
                    for (int i = 0; i < ifs.size(); i++) {
                        inet4.add(ifs.get(i).get("ipv4_addr").asText());
                    }
                }

                KineticDevice device = new KineticDevice(inet4, port, tlsPort,
                        wwn, model, serialNumber);
                System.out.println(device.toString());
                newDiscoveriedKineticDevice.add(device);
            }

            return newDiscoveriedKineticDevice;
        }
    }

    private void broadcastToDiscoverNodes() throws IOException {
        Enumeration<NetworkInterface> nets = NetworkInterface
                .getNetworkInterfaces();
        String mcastDestination = "239.1.2.3";
        int mcastPort = 8123;
        MulticastSocket multicastSocket;
        for (NetworkInterface netIf : Collections.list(nets)) {
            InetAddress iadd;
            iadd = InetAddress.getByName(mcastDestination);

            multicastSocket = new MulticastSocket(mcastPort);
            multicastSocket.setNetworkInterface(netIf);
            multicastSocket.joinGroup(iadd);
            new DeviceDiscoveryThread(multicastSocket).start();
        }
    }

    public static void main(String[] args) {
        long sleepTime = 60000;
        if (args.length > 1) {
            System.out.println("Parameter error!!!");
            System.out.println("Usage:");
            System.out.println("DeviceDiscovery [timeout(ms)]");
            System.out.println("Welcome to try again.");
            return;
        }
        if (args.length == 1) {
            sleepTime = Integer.parseInt(args[0]);
        }

        DiscoverDevice discoveryDevice = new DiscoverDevice();
        try {
            discoveryDevice.broadcastToDiscoverNodes();
            Thread.sleep(sleepTime);
            System.exit(0);
        } catch (IOException e) {
            System.out.println(e.getMessage());
        } catch (InterruptedException e) {
            System.out.println(e.getMessage());
        }
    }
}
+117 −86

File changed.

Preview size limit exceeded, changes collapsed.

Loading