Blame SOURCES/bz1690290-GUI-cannot-create-a-cluster-if-k.patch

3f6cae
From 77760bdeb1642e30f109ba88a98fff8b1faba206 Mon Sep 17 00:00:00 2001
3f6cae
From: Ivan Devat <idevat@redhat.com>
3f6cae
Date: Tue, 19 Mar 2019 10:05:40 +0100
3f6cae
Subject: [PATCH] squash bz1690290 GUI cannot create a cluster if k
3f6cae
3f6cae
fix missing addrs field in cluster setup in webUi
3f6cae
3f6cae
fix transport options in cluster setup in webui
3f6cae
---
3f6cae
 pcsd/public/js/api.js           | 41 ++++++++++++++++++++++++---------
3f6cae
 pcsd/public/js/cluster-setup.js |  8 +++----
3f6cae
 2 files changed, 33 insertions(+), 16 deletions(-)
3f6cae
3f6cae
diff --git a/pcsd/public/js/api.js b/pcsd/public/js/api.js
3f6cae
index 6c433b54..b9c94720 100644
3f6cae
--- a/pcsd/public/js/api.js
3f6cae
+++ b/pcsd/public/js/api.js
3f6cae
@@ -209,10 +209,39 @@ api.checkAuthAgainstNodes = function(nodesNames){
3f6cae
 
3f6cae
 api.clusterSetup = function(submitData, processOptions){
3f6cae
   var setupData = submitData.setupData;
3f6cae
+  var transportOptions = {};
3f6cae
+  if (setupData.transportType === "knet") {
3f6cae
+    transportOptions = {
3f6cae
+      ip_version: setupData.transportOptions.ip_version,
3f6cae
+      knet_pmtud_interval: setupData.transportOptions.knet_pmtud_interval,
3f6cae
+      link_mode: setupData.transportOptions.link_mode,
3f6cae
+    };
3f6cae
+  } else if(setupData.transportType !== undefined) {
3f6cae
+    transportOptions = {
3f6cae
+        ip_version: setupData.transportOptions.ip_version,
3f6cae
+        netmtu: setupData.transportOptions.netmtu,
3f6cae
+    };
3f6cae
+  }
3f6cae
   var data = {
3f6cae
     cluster_name: setupData.clusterName,
3f6cae
     nodes: setupData.nodeList.map(function(node){
3f6cae
       apiNode = { name: node.name };
3f6cae
+      // The backend defaults addresses. But for the defaulting addresses there
3f6cae
+      // must be no key "addrs".
3f6cae
+      // There can be following (valid) scenarios:
3f6cae
+      // 1 User uses no link. We omit key "addrs" for every node. The backend
3f6cae
+      //   defaults addresses.
3f6cae
+      // 2 User uses 1 link and keep all addresses fields empty. We omit key
3f6cae
+      //   "addrs" for every node. The backend defaults addresses.
3f6cae
+      // 3 User uses 1 link and keep some addresses fields empty. We omit key
3f6cae
+      //   "addrs" for respective nodes. The backend then refuses it because
3f6cae
+      //   nodes addreses are inconsistent.
3f6cae
+      // 4 User uses more links. We omit key "addrs" when no address for node is
3f6cae
+      //   filled. The backend then refuses it because nodes addresses count
3f6cae
+      //   is inconsistent with links count.
3f6cae
+      // Because we need to support scenario 2 and the backend defaults
3f6cae
+      // addresses only when key "addrs" is not specified we cannot simply
3f6cae
+      // sent empty addresses or empty address list (i.e. key "addrs").
3f6cae
       var addrs = node.addrs.filter(function(addr){return addr.length > 0});
3f6cae
       if (addrs.length > 0) {
3f6cae
         apiNode["addrs"] = addrs;
3f6cae
@@ -220,17 +249,7 @@ api.clusterSetup = function(submitData, processOptions){
3f6cae
       return apiNode;
3f6cae
     }),
3f6cae
     transport_type: setupData.transportType,
3f6cae
-    transport_options: setupData.transportType == "knet"
3f6cae
-      ? {
3f6cae
-        ip_version: setupData.transportOptions.ip_version,
3f6cae
-        knet_pmtud_interval: setupData.transportOptions.knet_pmtud_interval,
3f6cae
-        link_mode: setupData.transportOptions.link_mode,
3f6cae
-      }
3f6cae
-      : {
3f6cae
-        ip_version: setupData.transportOptions.ip_version,
3f6cae
-        netmtu: setupData.transportOptions.netmtu,
3f6cae
-      }
3f6cae
-    ,
3f6cae
+    transport_options: transportOptions,
3f6cae
     link_list: setupData.linkList.map(function(link){
3f6cae
       return setupData.transportType == "knet"
3f6cae
         ? {
3f6cae
diff --git a/pcsd/public/js/cluster-setup.js b/pcsd/public/js/cluster-setup.js
3f6cae
index 2b7b0a4e..be0a22d5 100644
3f6cae
--- a/pcsd/public/js/cluster-setup.js
3f6cae
+++ b/pcsd/public/js/cluster-setup.js
3f6cae
@@ -322,11 +322,9 @@ clusterSetup.data.validateNameAndNodes = function(formData){
3f6cae
 
3f6cae
 clusterSetup.data.nodes = function(nodesNames, getAddrs){
3f6cae
   return nodesNames.map(function(nodeName){
3f6cae
-    addrs = getAddrs ? getAddrs(nodeName) : [];
3f6cae
-    return addrs.length > 0
3f6cae
-      ? { name: nodeName, addrs: addrs }
3f6cae
-      : { name: nodeName }
3f6cae
-    ;
3f6cae
+    // The field addrs is here always. The details of backend is solved within
3f6cae
+    // api.js module.
3f6cae
+    return { name: nodeName, addrs: getAddrs ? getAddrs(nodeName) : [] };
3f6cae
   });
3f6cae
 };
3f6cae
 
3f6cae
-- 
3f6cae
2.20.1
3f6cae