[ONOS-7990]: Update Branch to Node Mapping in TestON Jenkins Pipelines

Change-Id: I609927123d239f92c5a648da87709c2676a32550
diff --git a/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy b/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
index 6ee0485..109b79b 100644
--- a/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
+++ b/TestON/JenkinsFile/dependencies/JenkinsTestONTests.groovy
@@ -32,6 +32,10 @@
     branches = readJSON text: branches_buffer
 }
 
+// ***************
+// General Methods
+// ***************
+
 // returns the entire set of TestON tests from the json file
 def getAllTests(){
     return allTests
@@ -42,24 +46,128 @@
     return schedules
 }
 
+// returns a list of days corresponding to the given schedule code
+def convertScheduleKeyToDays( sch ){
+    return schedules[ sch ]
+}
+
+// given a test dictionary, returns a list of tests as a string
+def getTestListAsString( tests ){
+    str_result = ""
+    for ( String test in tests.keySet() ){
+        str_result += test + ","
+    }
+    return str_result[ 0..-2 ]
+}
+
+def getTestsFromStringList( list ){
+    testsResult = [:]
+    for ( item in list ){
+        if ( allTests.contains( item ) ){
+            testsResult.put( item, allTests[ item ] )
+        }
+    }
+    return testsResult
+}
+
+// Get a given test property from the schedules list for a given test
+// Example: getTestScheduleProperty( "FUNCflow", "nodeLabel" ) gets all node labels for each branch
+def getTestScheduleProperty( test_name, property, tests=[:] ){
+    schedulePropertyResult = [:]
+
+    if ( tests == [:] ){
+        tests = allTests
+    }
+    for ( subDict in tests[ test_name ][ "schedules" ] ){
+        schedulePropertyResult.put( subDict[ "branch" ], subDict[ property ] )
+    }
+
+    return schedulePropertyResult
+}
+
 def getAllBranches(){
     return branches
 }
 
-// given a test category ("FUNC", "HA", etc.), returns all tests associated with that category
-def getTestsFromCategory( category, tests=[:] ){
-    result = [:]
+// ********
+// Branches
+// ********
+
+// given a day, returns all branches that are run on that day
+def getBranchesFromDay( day, tests=[:] ){
+    branchesFromDayResult = []
     if ( tests == [:] ){
         tests = allTests
     }
+    validSchedules = getValidSchedules( day )
+
     for ( String key in tests.keySet() ){
-        if ( tests[ key ][ "category" ] == category ){
-            result.put( key, tests[ key ] )
+        for ( subDict in tests[ key ][ "schedules" ] ){
+            sch = subDict[ "day" ]
+            if ( validSchedules.contains( sch ) && !branchesFromDayResult.contains( sch ) ){
+                branchesFromDayResult += convertBranchCodeToBranch( subDict[ "branch" ] )
+            }
         }
     }
-    return result
+    return branchesFromDayResult
 }
 
+// Converts a branch code to an actual ONOS branch.
+// Example: converts onos-1.x to onos-1.15
+def convertBranchCodeToBranch( branch_code, withPrefix=true ){
+    for ( String branch_type in branches.keySet() ){
+        for ( String b in branches[ branch_type ].keySet() ){
+            if ( branch_code == b ){
+                return withPrefix ? ( "onos-" + branches[ branch_type ][ b ] ) : branches[ branch_type ][ b ]
+            }
+        }
+    }
+    return branch_code
+}
+
+// *************
+// Test Category
+// *************
+
+// given a test category ("FUNC", "HA", etc.), returns all tests associated with that category
+def getTestsFromCategory( category, tests=[:] ){
+    testsFromCategoryResult = [:]
+    if ( tests == [:] ){
+        tests = allTests
+    }
+    for ( String test_name in tests.keySet() ){
+        if ( getCategoryOfTest( test_name ) == category ){
+            testsFromCategoryResult.put( test_name, tests[ test_name ] )
+        }
+    }
+    return testsFromCategoryResult
+}
+
+def getCategoryOfTest( test_name, tests=[:] ){
+    if ( tests == [:] ){
+        tests = allTests
+    }
+    return tests[ test_name ][ "category" ]
+}
+
+def getAllTestCategories( tests=[:] ){
+    testCategoriesResult = []
+    if ( tests == [:] ){
+        tests = allTests
+    }
+    for ( String test_name in tests.keySet() ){
+        category = getCategoryOfTest( test_name, tests )
+        if ( !testCategoriesResult.contains( category ) ){
+            testCategoriesResult += category
+        }
+    }
+    return testCategoriesResult
+}
+
+// ********************
+// Test Schedule / Days
+// ********************
+
 // given a day, returns schedules that contain that day
 def getValidSchedules( day ){
     validSchedules = []
@@ -72,80 +180,68 @@
 }
 
 // given a day and branch, returns all tests that run on the given day on the given branch
-def getTestsFromDay( day, branch, tests=[:] ){
-    result = [:]
+def getTestsFromDay( day, tests=[:] ){
+    resultDict = [:]
     if ( tests == [:] ){
         tests = allTests
     }
     validSchedules = getValidSchedules( day )
     for ( String key in tests.keySet() ){
-        schedule = tests[ key ][ "schedule" ][ branch ]
-        if ( validSchedules.contains( schedule ) ){
-            result.put( key, tests[ key ] )
-        }
-    }
-    return result
-}
-
-// given a day, returns all branches that are run on that day
-def getBranchesFromDay( day, tests=[:] ){
-    result = []
-    if ( tests == [:] ){
-        tests = allTests
-    }
-    validSchedules = getValidSchedules( day )
-
-    for ( String key in tests.keySet() ){
-        for ( String branch in tests[ key ][ "schedule" ].keySet() ){
-            sch = tests[ key ][ "schedule" ][ branch ]
-            if ( validSchedules.contains( sch ) && !result.contains( sch ) ){
-                result += convertBranchCodeToBranch( branch )
+        scheduleProperty = getTestScheduleProperty( key, "day", tests )
+        for ( b in scheduleProperty.keySet() ){
+            if ( validSchedules.contains( scheduleProperty[ b ] ) ){
+                resultDict.put( key, tests[ key ] )
+                break
             }
         }
     }
-    return result
+    return resultDict
 }
 
-// given a nodeLabel ("vm", "bm", etc.), returns all tests that run on that node.
-def getTestsFromNodeLabel( nodeLabel, tests=[:] ){
+// **********
+// Node Label
+// **********
+
+// Given a node label and branch, return all tests that run on that node.
+def getTestsFromNodeLabel( nodeLabel, branch, tests=[:] ){
+    nodeLabelTestsResult = [:]
     if ( tests == [:] ){
         tests = allTests
     }
     for ( String key in tests.keySet() ){
-        if ( tests[ key ][ "nodeLabel" ] == nodeLabel ){
-            result.put( key, tests[ key ] )
+        branchNodeLabelMap = getTestScheduleProperty( key, "nodeLabel", tests )
+        if ( branchNodeLabelMap[ branch ] == nodeLabel ){
+            nodeLabelTestsResult.put( key, tests[ key ] )
         }
     }
+    return nodeLabelTestsResult
 }
 
-// returns the test list as a string
-def getTestListAsString( tests ){
-    result = ""
-    for ( String test in tests.keySet() ){
-        result += test + ","
+// Given a test name and branch, return the node label associated.
+def getNodeLabel( test_name, branch, tests ){
+    if ( tests == [:] ){
+        tests = allTests
     }
-    return result[ 0..-2 ]
+    result = getTestScheduleProperty( test_name, "nodeLabel", tests )
+    if ( result == [:] ){
+        return "UNKNOWN"
+    } else {
+        return result[ branch ]
+    }
 }
 
-// returns the schedule for a given test
-def getTestSchedule( test ){
-    return allTests[ test ][ "schedule" ]
-}
-
-// returns a list of days from the given schedule
-def convertScheduleKeyToDays( sch ){
-    return schedules[ sch ]
-}
-
-def convertBranchCodeToBranch( branch_code, withPrefix=true ){
-    for ( String branch_type in branches.keySet() ){
-        for ( String b in branches[ branch_type ].keySet() ){
-            if ( branch_code == b ){
-                return withPrefix ? ( "onos-" + branches[ branch_type ][ b ] ) : branches[ branch_type ][ b ]
-            }
+def getAllNodeLabels( branch, tests ){
+    nodeLabelResult = []
+    if ( tests == [:] ){
+        tests = allTests
+    }
+    for ( test_name in tests.keySet() ){
+        nodeLabel = getNodeLabel( test_name, branch, tests )
+        if ( !nodeLabelResult.contains( nodeLabel ) ){
+            nodeLabelResult += nodeLabel
         }
     }
-    return branch_code
+    return nodeLabelResult
 }
 
 return this
diff --git a/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy b/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy
index c35a94e..4eb22ab 100644
--- a/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy
+++ b/TestON/JenkinsFile/dependencies/TriggerFuncs.groovy
@@ -48,7 +48,7 @@
         result += test + ": ["
         test_schedule = test_list.getTestSchedule( test )
         for ( String sch in test_schedule.keySet() ){
-            for ( String day in convertScheduleKeyToDays( sch ) ){
+            for ( String day in test_list.convertScheduleKeyToDays( sch ) ){
                 result += day + " "
             }
         }
diff --git a/TestON/JenkinsFile/dependencies/tests.json b/TestON/JenkinsFile/dependencies/tests.json
index 89927de..ed48bcd 100644
--- a/TestON/JenkinsFile/dependencies/tests.json
+++ b/TestON/JenkinsFile/dependencies/tests.json
@@ -2,789 +2,1420 @@
     "FUNCflow": {
         "wikiName": "FUNCflow",
         "wikiFile": "FUNCflowWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "FUNC",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "FUNCintent": {
         "wikiName": "FUNCintent",
         "wikiFile": "FUNCintentWiki.txt",
-        "schedule": {
-            "master": "mon_wed_fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "mon_wed_fri",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "FUNC",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "FUNCintentRest": {
         "wikiName": "FUNCintentRest",
         "wikiFile": "FUNCintentRestWiki.txt",
-        "schedule": {
-            "master": "tue_thu",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "tue_thu",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "FUNC",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "FUNCipv6Intent": {
         "wikiName": "FUNCipv6Intent",
         "wikiFile": "FUNCipv6IntentWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "FUNC",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "FUNCnetCfg": {
         "wikiName": "FUNCnetCfg",
         "wikiFile": "FUNCnetCfgWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "FUNC",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "FUNCnetconf": {
         "wikiName": "FUNCnetconf",
         "wikiFile": "FUNCnetconfWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "FUNC",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "FUNCoptical": {
         "wikiName": "FUNCoptical",
         "wikiFile": "FUNCopticalWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "FUNC",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "FUNCovsdbtest": {
         "wikiName": "FUNCovsdbtest",
         "wikiFile": "FUNCovsdbtestWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "FUNC",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "FUNCgroup": {
         "wikiName": "FUNCgroup",
         "wikiFile": "FUNCgroupWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "FUNC",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "FUNCformCluster": {
         "wikiName": "FUNCformCluster",
         "wikiFile": "FUNCformClusterWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "FUNC",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAsanity": {
         "wikiName": "HA Sanity",
         "wikiFile": "HAsanityWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAsingleInstanceRestart": {
         "wikiName": "HA Single Instance Restart",
         "wikiFile": "HAsingleInstanceRestartWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAclusterRestart": {
         "wikiName": "HA Cluster Restart",
         "wikiFile": "HAclusterRestart.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAkillNodes": {
         "wikiName": "HA Kill Nodes",
         "wikiFile": "HAkillNodes.txt",
-        "schedule": {
-            "master": "tue_thu",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "tue_thu",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAstopNodes": {
         "wikiName": "HA Stop Nodes",
         "wikiFile": "HAstopNodes.txt",
-        "schedule": {
-            "master": "mon_wed_fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "mon_wed_fri",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAfullNetPartition": {
         "wikiName": "HA Full Network Partition",
         "wikiFile": "HAfullNetPartitionWiki.txt",
-        "schedule": {
-            "master": "mon_wed_fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "mon_wed_fri",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAscaling": {
         "wikiName": "HA Scaling",
         "wikiFile": "HAscalingWiki.txt",
-        "schedule": {
-            "master": "tue_thu",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "tue_thu",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAswapNodes": {
         "wikiName": "HA Swap Nodes",
         "wikiFile": "HAswapNodesWiki.txt",
-        "schedule": {
-            "master": "tue_thu",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "tue_thu",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAupgrade": {
         "wikiName": "HA Upgrade",
         "wikiFile": "HAupgradeWiki.txt",
-        "schedule": {
-
-        },
+        "schedules": [
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAupgradeRollback": {
         "wikiName": "HA Upgrade Rollback",
         "wikiFile": "HAupgradeRollbackWiki.txt",
-        "schedule": {
-
-        },
+        "schedules": [
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "HAbackupRecover": {
         "wikiName": "HA Backup Recover",
         "wikiFile": "HAbackupRecoverWiki.txt",
-        "schedule": {
-            "master": "tue_thu",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "tue_thu",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "VM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "VM"
+            }
+        ],
         "category": "HA",
-        "nodeLabel": "VM",
         "supportedBranches": [ "all" ]
     },
     "SCPFswitchLat": {
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFportLat": {
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFintentInstallWithdrawLat": {
-        "schedule": {
-            "master": "wed_fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "wed_fri",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFintentInstallWithdrawLatWithFlowObj": {
-        "schedule": {
-            "master": "mon_thu",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "mon_thu",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFintentRerouteLat": {
-        "schedule": {
-            "master": "wed_fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "wed_fri",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFintentRerouteLatWithFlowObj": {
-        "schedule": {
-            "master": "mon_thu",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "mon_thu",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFintentEventTp": {
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFintentEventTpWithFlowObj": {
-        "schedule": {
-            "master": "mon_thu",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "mon_thu",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFscaleTopo": {
-        "schedule": {
-            "master": "tue",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "tue",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFflowTp1g": {
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFflowTp1gWithFlowObj": {
-        "schedule": {
-            "master": "mon_thu",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "mon_thu",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFcbench": {
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFscalingMaxIntents": {
-        "schedule": {
-
-        },
+        "schedules": [
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFscalingMaxIntentsWithFlowObj": {
-        "schedule": {
-
-        },
+        "schedules": [
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFbatchFlowResp": {
-        "schedule": {
-            "master": "wed_fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "wed_fri",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFhostLat": {
-        "schedule": {
-            "master": "wed_fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "wed_fri",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SCPFmastershipFailoverLat": {
-        "schedule": {
-            "master": "fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "fri",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "SCPF",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "SRBridging": {
         "wikiName": "SR Bridging",
         "wikiFile": "SRBridgingWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRRouting": {
         "wikiName": "SR Routing",
         "wikiFile": "SRRoutingWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRDhcprelay": {
         "wikiName": "SR Dhcp Relay",
         "wikiFile": "SRDhcprelayWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRDynamicConf": {
         "wikiName": "SR Dynamic Config",
         "wikiFile": "SRDynamicConfWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRMulticast": {
         "wikiName": "SR Multi Cast",
         "wikiFile": "SRMulticastWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRSanity": {
         "wikiName": "SR Sanity",
         "wikiFile": "SRSanityWiki.txt",
-        "schedule": {
-            "master": "fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "fri",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRSwitchFailure": {
         "wikiName": "SR Switch Failure",
         "wikiFile": "SRSwitchFailureWiki.txt",
-        "schedule": {
-            "master": "fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "fri",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRLinkFailure": {
         "wikiName": "SR Link Failure",
         "wikiFile": "SRLinkFailureWiki.txt",
-        "schedule": {
-            "master": "fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "fri",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SROnosFailure": {
         "wikiName": "SR Onos node Failure",
         "wikiFile": "SROnosFailureWiki.txt",
-        "schedule": {
-            "master": "fri",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "fri",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRClusterRestart": {
         "wikiName": "SR Cluster Restart",
         "wikiFile": "SRClusterRestartWiki.txt",
-        "schedule": {
-            "master": "sat",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "sat",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRDynamic": {
         "wikiName": "SR Dynamic",
         "wikiFile": "SRDynamicWiki.txt",
-        "schedule": {
-            "master": "sat",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "sat",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHighAvailability": {
         "wikiName": "SR High Availability",
         "wikiFile": "SRHighAvailabilityWiki.txt",
-        "schedule": {
-            "master": "sat",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "sat",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAsanity": {
         "test": "HAsanity --params-file HAsanity.params.fabric",
         "wikiName": "SR HA Sanity",
         "wikiFile": "HAsanityWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAclusterRestart": {
         "test": "HAclusterRestart --params-file HAclusterRestart.params.fabric",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAsingleInstanceRestart": {
         "test": "HAsingleInstanceRestart --params-file HAsingleInstanceRestart.params.fabric",
         "wikiName": "SR HA Single Instance Restart",
         "wikiFile": "HAsingleInstanceRestartWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAstopNodes": {
         "test": "HAstopNodes --params-file HAstopNodes.params.fabric",
         "wikiName": "SR HA Stop Nodes",
         "wikiFile": "HAstopNodes.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAfullNetPartition": {
         "test": "HAfullNetPartition --params-file HAfullNetPartition.params.fabric",
         "wikiName": "SR HA Full Network Partition",
         "wikiFile": "HAfullNetPartitionWiki.txt",
-        "schedule": {
-            "master": "fri"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "fri",
+                "nodeLabel": "Fabric4"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAswapNodes": {
         "test": "HAswapNodes --params-file HAswapNodes.params.fabric",
         "wikiName": "SR HA Swap Nodes",
         "wikiFile": "HAswapNodesWiki.txt",
-        "schedule": {
-            "master": "sat"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "sat",
+                "nodeLabel": "Fabric4"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAscaling": {
         "test": "HAscaling --params-file HAscaling.params.fabric",
         "wikiName": "SR HA Scaling",
         "wikiFile": "HAscalingWiki.txt",
-        "schedule": {
-            "master": "sat"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "sat",
+                "nodeLabel": "Fabric4"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAkillNodes": {
         "test": "HAkillNodes --params-file HAkillNodes.params.fabric",
         "wikiName": "SR HA Kill Nodes",
         "wikiFile": "HAkillNodes.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAbackupRecover": {
         "test": "HAbackupRecover --params-file HAbackupRecover.params.fabric",
         "wikiName": "SR HA Backup Recover",
         "wikiFile": "HAbackupRecoverWiki.txt",
-        "schedule": {
-            "master": "weekdays",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "weekdays",
+                "nodeLabel": "Fabric4"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "Fabric2"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "Fabric3"
+            }
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAupgrade": {
         "test": "HAupgrade --params-file HAupgrade.params.fabric",
         "wikiName": "SR HA Upgrade",
         "wikiFile": "HAupgradeWiki.txt",
-        "schedule": {
-        },
+        "schedules": [
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "SRHAupgradeRollback": {
         "test": "HAupgradeRollback --params-file HAupgradeRollback.params.fabric",
         "wikiName": "SR HA Upgrade Rollback",
         "wikiFile": "HAupgradeRollbackWiki.txt",
-        "schedule": {
-        },
+        "schedule": [
+        ],
         "category": "SR",
-        "nodeLabel": "Fabric",
         "supportedBranches": [ "all" ]
     },
     "FUNCvirNetNB": {
         "wikiName": "FUNCvirNetNB",
         "wikiFile": "FUNCvirNetNBWiki.txt",
-        "schedule": {
-            "master": "USECASE_master",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "USECASE_master",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "USECASE",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "FUNCbgpls": {
         "wikiName": "FUNCbgpls",
         "wikiFile": "FUNCbgplsWiki.txt",
-        "schedule": {
-            "master": "USECASE_master",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "USECASE_master",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "USECASE",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "VPLSBasic": {
         "wikiName": "VPLSBasic",
         "wikiFile": "VPLSBasicWiki.txt",
-        "schedule": {
-            "master": "USECASE_master",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "USECASE_master",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "USECASE",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "VPLSfailsafe": {
         "wikiName": "VPLSfailsafe",
         "wikiFile": "VPLSfailsafeWiki.txt",
-        "schedule": {
-            "master": "USECASE_master",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "USECASE_master",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "USECASE",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "USECASE_SdnipFunction": {
         "wikiName": "SDNIP Function",
         "wikiFile": "USECASE_SdnipFunctionWiki.txt",
-        "schedule": {
-            "master": "USECASE_master",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "USECASE_master",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "USECASE",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "USECASE_SdnipFunctionCluster": {
         "wikiName": "SDNIP Function Cluster",
         "wikiFile": "USECASE_SdnipFunctionClusterWiki.txt",
-        "schedule": {
-            "master": "USECASE_master",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "USECASE_master",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "USECASE",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     },
     "PLATdockertest": {
         "wikiName": "Docker Images sanity test",
         "wikiFile": "PLATdockertestTableWiki.txt",
-        "schedule": {
-            "master": "USECASE_master",
-            "onos-1.x": "onos-1.x_schedule",
-            "onos-2.x": "onos-2.x_schedule"
-        },
+        "schedules": [
+            {
+                "branch": "master",
+                "day": "USECASE_master",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-1.x",
+                "day": "onos-1.x_schedule",
+                "nodeLabel": "BM"
+            },
+            {
+                "branch": "onos-2.x",
+                "day": "onos-2.x_schedule",
+                "nodeLabel": "BM"
+            }
+        ],
         "category": "USECASE",
-        "nodeLabel": "BM",
         "supportedBranches": [ "all" ]
     }
 }