Rework cluster_setup() to use node types instead of $CLUSTER_TYPE
[tridge/autocluster.git] / autocluster
index e8850378d29a26e0f59d39c7b044e8e1efdd631a..6793f8c48bb12d555d4d69664b42037ab8b47da0 100755 (executable)
@@ -596,46 +596,67 @@ cluster_boot ()
     echo ""
 }
 
+cluster_setup_tasks_DEFAULT ()
+{
+    local stage="$1"
+
+    # By default nodes have no tasks
+    case "$stage" in
+       install_packages) echo "" ;;
+       setup_clusterfs)  echo "" ;;
+       setup_node)       echo "" ;;
+       setup_cluster)    echo "" ;;
+    esac
+}
+
 cluster_setup ()
 {
     announce "cluster setup \"${CLUSTER}\""
     [ -n "$CLUSTER" ] || die "\$CLUSTER not set"
 
-    local install_tasks=""
-    local setup_tasks=""
-
-    case "$CLUSTER_TYPE" in
-       "build")
-           install_tasks="clusterfs build"
-           setup_tasks="build"
-           ;;
-       "ad")
-           install_tasks="ad_server"
-           setup_tasks="ad_server"
-           ;;
-       "samba")
-           install_tasks="clusterfs nas"
-           setup_tasks="clusterfs nas"
-           ;;
-    esac
-
     local ssh="ssh -o StrictHostKeyChecking=no"
+    local setup_clusterfs_done=false
+    local setup_cluster_done=false
 
-    if [ -n "$install_tasks" ] ; then
-       [ -n "$CLUSTER_PATTERN" ] || CLUSTER_PATTERN="$CLUSTER"
+    _cluster_setup_do_stage ()
+    {
+       local stage="$1"
+       local type="$2"
+       local ip_offset="$3"
+       local name="$4"
+       local ctdb_node="$5"
+
+       local tasks=$(call_func cluster_setup_tasks "$type" "$stage")
+
+       if [ -n "$tasks" ] ; then
+           # These tasks are only done on 1 node
+           case "$stage" in
+               setup_clusterfs)
+                   if $setup_clusterfs_done ; then
+                       return
+                   else
+                       setup_clusterfs_done=true
+                   fi
+                   ;;
+               setup_cluster)
+                   if $setup_cluster_done ; then
+                       return
+                   else
+                       setup_cluster_done=true
+                   fi
+                   ;;
+           esac
 
-       local nodes=$(vircmd dominfo "$CLUSTER_PATTERN" 2>/dev/null | \
-           sed -n -e 's/Name: *//p')
+           $ssh "$name" "./scripts/${stage}.sh" $tasks
+       fi
 
-       for i in $nodes ; do
-           $ssh "$i" ./scripts/install_packages.sh $install_tasks
-       done
-    fi
+    }
 
-    if [ -n "$setup_tasks" ] ; then
-       local n1="${CLUSTER}n1"
-       $ssh "$n1" ./scripts/setup_cluster.sh $setup_tasks
-    fi
+    local stages="install_packages setup_clusterfs setup_node setup_cluster"
+    local stage
+    for stage in $stages ; do
+       for_each_node _cluster_setup_do_stage "$stage"
+    done
 }
 
 create_one_node ()