[ONOS-5184] Allow configuring cluster partition size

Adds a new parameter to onos-form-cluster: -s <partition-size>
to allow specifying the partition size to be used when creating
the cluster.

Change-Id: I4c31d6e97fe0fd811831296f41a09160bebb58de
diff --git a/web/api/src/main/java/org/onosproject/rest/resources/ClusterWebResource.java b/web/api/src/main/java/org/onosproject/rest/resources/ClusterWebResource.java
index 250fd02..63a4081 100644
--- a/web/api/src/main/java/org/onosproject/rest/resources/ClusterWebResource.java
+++ b/web/api/src/main/java/org/onosproject/rest/resources/ClusterWebResource.java
@@ -15,6 +15,7 @@
  */
 package org.onosproject.rest.resources;
 
+import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.node.ArrayNode;
 import com.fasterxml.jackson.databind.node.ObjectNode;
 import org.onosproject.cluster.ClusterAdminService;
@@ -94,7 +95,16 @@
         ObjectNode root = (ObjectNode) mapper().readTree(config);
 
         List<ControllerNode> nodes = codec.decode((ArrayNode) root.path("nodes"), this);
-        get(ClusterAdminService.class).formCluster(new HashSet<>(nodes));
+        JsonNode partitionSizeNode = root.get("partitionSize");
+        if (partitionSizeNode != null) {
+            int partitionSize = partitionSizeNode.asInt();
+            if (partitionSize == 0) {
+                return Response.notAcceptable(null).build();
+            }
+            get(ClusterAdminService.class).formCluster(new HashSet<>(nodes), partitionSize);
+        } else {
+            get(ClusterAdminService.class).formCluster(new HashSet<>(nodes));
+        }
 
         return Response.ok().build();
     }