Add Isolation Toggle 24/77524/1
authorHaddox, Anthony <ah0647@att.com>
Tue, 29 Jan 2019 16:50:09 +0000 (08:50 -0800)
committerHaddox, Anthony <ah0647@att.com>
Tue, 29 Jan 2019 16:52:06 +0000 (08:52 -0800)
Add extra input option that allows user to toggle
the ODL isolation step in the failover process.

Change-Id: I1fdfd4bf5cf2484af8ce67f9c91d0111134b762c
Issue-ID: CCSDK-1012
Signed-off-by: Haddox, Anthony <ah0647@att.com>
grToolkit/model/src/main/yang/gr-toolkit.yang
grToolkit/provider/src/main/java/org/onap/ccsdk/sli/plugins/GrToolkitProvider.java

index 951201c..8b22d66 100755 (executable)
@@ -142,7 +142,7 @@ module gr-toolkit{
 \r
   rpc halt-akka-traffic {\r
     description\r
-      "Invokes a utility script to halt traffic to the akka port.";\r
+      "Executes IP Tables commands to halt traffic to the akka port.";\r
     input {\r
       list node-info {\r
         uses node;\r
@@ -155,7 +155,7 @@ module gr-toolkit{
 \r
   rpc resume-akka-traffic {\r
     description\r
-      "Invokes a utility script to resume traffic to the akka port.";\r
+      "Executes IP Tables commands to resume traffic to the akka port.";\r
     input {\r
       list node-info {\r
         uses node;\r
@@ -174,6 +174,14 @@ module gr-toolkit{
         type string;\r
         default "false";\r
       }\r
+      leaf isolate {\r
+        type string;\r
+        default "false";\r
+      }\r
+      leaf downUnreachable {\r
+        type string;\r
+        default "false";\r
+      }\r
     }\r
     output {\r
       leaf status { type string; }\r
index 249640a..f0a104d 100755 (executable)
@@ -384,49 +384,51 @@ public class GrToolkitProvider implements AutoCloseable, GrToolkitService, DataT
             return Futures.immediateFuture(RpcResultBuilder.<FailoverOutput>status(true).withResult(outputBuilder.build()).build());
         }
 
-        // Halt akka traffic
-        log.info("Halting Akka traffic...");
-        for(ClusterActor actor : standbySite) {
-            try {
-                log.info("Halting Akka traffic for: " + actor.getNode());
-                // Build JSON with activeSite actor.getNode() and actor.getAkkaPort();
-                JSONObject akkaInput = new JSONObject();
-                JSONObject inputBlock = new JSONObject();
-                JSONArray votingStateArray = new JSONArray();
-                JSONObject nodeInfo;
-                for(ClusterActor node : activeSite) {
-                    nodeInfo = new JSONObject();
-                    nodeInfo.put("node", node.getNode());
-                    nodeInfo.put("port", node.getAkkaPort());
-                    votingStateArray.put(nodeInfo);
+        if(Boolean.parseBoolean(input.getIsolate())) {
+            log.info("Halting Akka traffic...");
+            for(ClusterActor actor : standbySite) {
+                try {
+                    log.info("Halting Akka traffic for: " + actor.getNode());
+                    // Build JSON with activeSite actor.getNode() and actor.getAkkaPort();
+                    JSONObject akkaInput = new JSONObject();
+                    JSONObject inputBlock = new JSONObject();
+                    JSONArray votingStateArray = new JSONArray();
+                    JSONObject nodeInfo;
+                    for(ClusterActor node : activeSite) {
+                        nodeInfo = new JSONObject();
+                        nodeInfo.put("node", node.getNode());
+                        nodeInfo.put("port", node.getAkkaPort());
+                        votingStateArray.put(nodeInfo);
+                    }
+                    inputBlock.put("node-info", votingStateArray);
+                    akkaInput.put("input", inputBlock);
+                    getRequestContent(HTTP_PROTOCOL + actor.getNode() + ":" + port + "/restconf/operations/gr-toolkit:halt-akka-traffic", HttpMethod.Post, akkaInput.toString());
+                } catch(IOException e) {
+                    log.error("Could not halt Akka traffic for: " + actor.getNode(), e);
                 }
-                inputBlock.put("node-info", votingStateArray);
-                akkaInput.put("input", inputBlock);
-                getRequestContent(HTTP_PROTOCOL + actor.getNode() + ":" + port + "/restconf/operations/gr-toolkit:halt-akka-traffic", HttpMethod.Post, akkaInput.toString());
-            } catch(IOException e) {
-                log.error("Could not halt Akka traffic for: " + actor.getNode(), e);
             }
-        }
 
-        // Set unreachable
-        log.info("Setting site unreachable...");
-        JSONObject jolokiaInput = new JSONObject();
-        jolokiaInput.put("type", "EXEC");
-        jolokiaInput.put("mbean", "akka:type=Cluster");
-        jolokiaInput.put("operation", "down");
-        JSONArray arguments = new JSONArray();
-        for(ClusterActor actor : activeSite) {
-            // Build Jolokia input
-            //TODO: May need to change from akka port to actor.getAkkaPort()
-            arguments.put("akka.tcp://opendaylight-cluster-data@" + actor.getNode() + ":" + properties.getProperty("controller.port.akka"));
-        }
-        jolokiaInput.put("arguments", arguments);
-        log.debug(jolokiaInput.toString(2));
-        try {
-            log.info("Setting nodes unreachable");
-            getRequestContent(HTTP_PROTOCOL + standbySite.get(0).getNode() + ":" + port + "/jolokia", HttpMethod.Post, jolokiaInput.toString());
-        } catch(IOException e) {
-            log.error("Error setting nodes unreachable", e);
+            if(Boolean.parseBoolean(input.getDownUnreachable())) {
+                log.info("Setting site unreachable...");
+                JSONObject jolokiaInput = new JSONObject();
+                jolokiaInput.put("type", "EXEC");
+                jolokiaInput.put("mbean", "akka:type=Cluster");
+                jolokiaInput.put("operation", "down");
+                JSONArray arguments = new JSONArray();
+                for(ClusterActor actor : activeSite) {
+                    // Build Jolokia input
+                    //TODO: May need to change from akka port to actor.getAkkaPort()
+                    arguments.put("akka.tcp://opendaylight-cluster-data@" + actor.getNode() + ":" + properties.getProperty("controller.port.akka"));
+                }
+                jolokiaInput.put("arguments", arguments);
+                log.debug(jolokiaInput.toString(2));
+                try {
+                    log.info("Setting nodes unreachable");
+                    getRequestContent(HTTP_PROTOCOL + standbySite.get(0).getNode() + ":" + port + "/jolokia", HttpMethod.Post, jolokiaInput.toString());
+                } catch(IOException e) {
+                    log.error("Error setting nodes unreachable", e);
+                }
+            }
         }
 
         log.info(appName + ":failover complete.");